0% found this document useful (0 votes)
41 views

Computer Graphics Lab Assignment 1

The document describes Liang Barsky line clipping algorithm. It provides input coordinates for two endpoints of a line and the boundaries of a clipping window. The code implements the line clipping algorithm by calculating the parametric values t1 and t2 to determine the intersection points of the line with the clipping window boundaries. It then draws the clipped line within the window boundaries.

Uploaded by

Tim Woo
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
41 views

Computer Graphics Lab Assignment 1

The document describes Liang Barsky line clipping algorithm. It provides input coordinates for two endpoints of a line and the boundaries of a clipping window. The code implements the line clipping algorithm by calculating the parametric values t1 and t2 to determine the intersection points of the line with the clipping window boundaries. It then draws the clipped line within the window boundaries.

Uploaded by

Tim Woo
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 4

Computer Graphics Lab Assignment 5

Liang Barsky line clipping algorithm

Input:

x1=80 y1=80

x2=250 y2=209

xmin=100 ymin=100

xmax=200 ymax=200

Output:
Code:

#include<stdio.h>
#include<graphics.h>
#include<math.h>
#include<dos.h>
 
void main()
{
    int i,gd=DETECT,gm;
    int x1,y1,x2,y2,xmin,xmax,ymin,ymax,xx1,xx2,yy1,yy2,dx,dy;
    float t1,t2,p[4],q[4],temp;
    x1=80;
    y1=80;
    x2=250;
    y2=209;
    xmin=100;
    ymin=100;
    xmax=200;
    ymax=200;
    initgraph(&gd,&gm,"c:\\turboc3\\bgi");
    rectangle(xmin,ymin,xmax,ymax);
    line(x1,y1,x2,y2);

    getch();
    cleardevice();
    rectangle(xmin,ymin,xmax,ymax);
    setcolor(RED);
    dx=x2-x1;
    dy=y2-y1;
    p[0]=-dx;
    p[1]=dx;
    p[2]=-dy;
    p[3]=dy;
    q[0]=x1-xmin;
    q[1]=xmax-x1;
    q[2]=y1-ymin;
    q[3]=ymax-y1;
    for(i=0;i<4;i++)
    {
        if(p[i]==0)
        {
            printf("line is parallel to one of the clipping boundary");
            if(q[i]>=0)
            {
                if(i<2)
                {
                    if(y1<ymin)
                    {
                        y1=ymin;
                    }
                    if(y2>ymax)
                    {
                        y2=ymax;
                    }
                    line(x1,y1,x2,y2);
                }
                if(i>1)
                {
                    if(x1<xmin)
                    {
                        x1=xmin;
                    }
                    if(x2>xmax)
                    {
                        x2=xmax;
                    }
                    line(x1,y1,x2,y2);
                }
            }
        }
    }
    t1=0;
    t2=1;
    for(i=0;i<4;i++)
    {
        temp=q[i]/p[i];
        if(p[i]<0)
        {
            if(t1<=temp)
                t1=temp;
        }
        else
        {
            if(t2>temp)
                t2=temp;
        }
    }
    if(t1<t2)
    {
        xx1 = x1 + t1 * p[1];
        xx2 = x1 + t2 * p[1];
        yy1 = y1 + t1 * p[3];
        yy2 = y1 + t2 * p[3];
        line(xx1,yy1,xx2,yy2);
    }
    delay(5000);
    closegraph();
}

You might also like