Followers

Friday, 20 June 2014

CG Programmes....



Computer Graphics Programs for SE Computer Engineering Stud

 

Sr. No.
     
Name of Assignment
     
Software Used
Group A (Compulsory)
1.
     
Writing a C/C++ Program to emulate CPU Architecture (Central Bus) Develop register, ALU level GUI to display results.
     
MASM64x
Eclipse
TC++
2.
     
Writing a C++ class for displaying pixel or point on the screen.
3.
     
Write a C++ class for a Line drawing method using overloading DDA and Bresenham’s Algorithms, inheriting the pixel or point.
4.
     
Write a C++ class for a circle drawing inheriting line class.
Group B (At least Six)
5    
Write a program in C/C++ to draw a circle of desired radius.
     
Eclipse
TC++
VC++
6    
Write a program using C/C++ to draw a line with line styles (Thick, Thin, Dotted).
7    
Write a program in Java/ Python to draw a line with line style (Thick, Thin, Dotted).
8    
Write a C/C++ program to draw a convex polygons (Square, Rectangle, Triangle).
9    
Write a C/C++ program to draw a convex polygons (Square, Rectangle, Triangle) using programmable edges.
10   
Write a program in Java to draw a concave polygon.
11   
Write a C/C++ program to fill polygon using scan line algorithm.
EXTRA      
Write a Java/Python program to fill polygon using scan line algorithm.
EXTRA      
Write a program in C++ to test that given point is inside the polygon.
EXTRA      
Write a program in to draw a circle of desired radius using VC++ 12 or above. Use of BITBLT command is expected.
     

Group C: Advanced Technology Programming (At least One)
12   
Use OpenGL ES to draw a line for Android Mobile.
     
OpenGL ES
VRML
Direct3D
Maya
Cuda C++
EXTRA      
Use VRML to draw a line Diagram.
EXTRA      
Use Direct3D/Maya or open source equivalent to draw a Bouncing ball animation.
EXTRA      
Use Parallel programming using Cuda to draw polygon.
...............................................................................................
Assignment no: 01
//Aim:Writing a C/C++ Program to emulate CPU Architecture (Central Bus) Develop register, ALU level GUI to display results.

#include<iostream>
#include<graphics.h>
using namespace std;
int main()
{
int x,y;
int poly[10];
int gd=DETECT,gm=VGAMAX;
initgraph(&gd,&gm,NULL);
setcolor(WHITE);
poly[0]= 50;
poly[1]= 50;

poly[2]= 600;
poly[3]= 50;

poly[4]= 600;
poly[5]= 600;

poly[6]= 50;
poly[7]= 600;

poly[8]=poly[0];
poly[9]=poly[1];
drawpoly(5,poly);
rectangle(65,100,150,140);
outtextxy(95,115,"ALU");
line(150,120,180,120);
rectangle(180,100,380,140);
outtextxy(200,120,"SEQUENCE CONTROLLER");
rectangle(410,100,550,160);
outtextxy(422,107,"GENERAL");
outtextxy(422,122,"PURPOSE");
outtextxy(422,136,"REGISTER");
rectangle(410,220,550,250);
outtextxy(422,228,"CACHE MEMORY");
rectangle(210,180,350,220);
outtextxy(240,190,"PROGRAM");
outtextxy(240,205,"COUNTER");
line(280,140,280,180);
rectangle(65,280,200,250);
outtextxy(85,255,"INSTRUCTION");
outtextxy(85,268,"REGISTER");
rectangle(65,340,200,310);
outtextxy(85,315,"INSTRUCTION");
outtextxy(85,328," DECODER");
line(50,420,600,420);
line(50,450,600,450);
outtextxy(220,430,"ADDRESS & DATA BUS");
outtextxy(190,460,"BASIC ARCHITECTURE OF CPU");
line(105,140,105,250);
line(260,380,260,420);
line(320,380,320,420);
delay(10000);
closegraph();
return 0;
}
........................................................................................................

Assignment no: 02
//Aim:Writing a C++ class for displaying pixel or point on the screen.

#include<iostream>
#include<graphics.h>
using namespace std;
class pixel
{
private:
     int xc,yc,cl;
public:
      pixel()
       {
         xc=yc=0;
         cl=15;
       }
       void setcor(int x,int y)
       {
          xc=x;
          yc=y;
       }

       void setcolor(int p)
       {
        cl=p;
       }
  
       void draw()
       {
        putpixel(xc,yc,cl);
       }
};

int main()
{
int x1,y1,cl1,ch;
char a;

int gd=DETECT,gm=VGAMAX;
initgraph(&gd,&gm,NULL);

pixel p1;

do
{
 cout<<"  1.PIXEL BY HARDCOADED VALUE..";
 cout<<"\n2.ACCEPTING CO-ORDINATES..";
 cout<<"\n3.DRAWING PIXEL ON SCREEN..";
 cout<<"\nEnter your choice??";
 cin>>ch;
switch(ch)
{
case 1:
         p1.setcor(50,50);
         p1.setcolor(2);
         p1.draw();
         break;
case 2:
       cout<<"\nEnter Your X & Y co-ordinates??";
       cin>>x1>>y1;
       p1.setcor(x1,y1);

       cout<<"\nEnter Color For Pixel??";
       cin>>cl1;
       p1.setcolor(cl1);
break;


case 3:
       p1.draw();
break;
}
cout<<"\nDO U Want To Continue y OR n??";
cin>>a;
}while(a!='n');


getch();
closegraph();
return 0;
}

--------------------------------------------------------
OUTPUT:

gescoe@gescoe-VirtualBox:~/Desktop/04$ g++ a02.cpp -o a02 -lgraph
gescoe@gescoe-VirtualBox:~/Desktop/04$ ./a02
1.PIXEL BY HARDCOADED VALUE..
2.ACCEPTING CO-ORDINATES..
3.DRAWING PIXEL ON SCREEN..
Enter your choice
1
DO U Want To Continue y OR n??y

1.PIXEL BY HARDCOADED VALUE..
2.ACCEPTING CO-ORDINATES..
3.DRAWING PIXEL ON SCREEN..
Enter your choice??2

Enter Your X & Y co-ordinates??50
100

Enter Color For Pixel??4

DO U Want To Continue y OR n??y
1.PIXEL BY HARDCOADED VALUE..
2.ACCEPTING CO-ORDINATES..
3.DRAWING PIXEL ON SCREEN..
Enter your choice??3

DO U Want To Continue y OR n??n

.............................................................................................
Assignment no: 03
//Write a C++ class for a Line drawing method using overloading DDA and Bresenham’s Algorithms, inheriting the pixel or point.

#include<graphics.h>
#include<iostream>

using namespace std;

class pt   //base class
{

    protected: int xco,yco,color;

    public:
    pt()
    {
        xco=0;yco=0;color=15;
    }

    void setco(int x,int y)
    {  
        xco=x;
        yco=y;
    }  

    void setcolor(int c)  
    {  
        color=c;
    }
  
    void draw()
    {    putpixel(xco,yco,color);

    }

};


class dline: public pt   //derived class
{
    private: int x2,y2;
  
    public:
    dline():pt()
    {
        x2=0,y2=0;
    }
  
    void setline(int x, int y, int xx, int yy)
    {
        pt::setco(x,y);
        x2=xx;
        y2=yy;

    }

    void drawl()   //Bresenham's Line
    {

        float x,y,dx,dy,e,temp;
        int i,s1,s2,ex;
       
        dx=abs(x2-xco);
        dy=abs(y2-yco);

        x=xco;
        y=yco;

        pt::setco(x,y);
        pt::draw();
      
        if(x2 > xco)  //sign() function
        {
            s1=1;
        }

        if(x2 < xco)
        {
            s1=-1;
        }
                if(x2 == xco)
        {
            s1=0;
        }

        if(y2 > yco)
        {
            s2=1;
        }

        if(y2 < yco)
        {
            s2=-1;
        }
                if(y2 == yco)
        {
            s2=0;
        }

        if(dy > dx)
        {
            temp = dx;
              dx = dy;
              dy = temp;
              ex = 1;  
        }
        else
        {
            ex=0;
        }

        e=2*dy-dx;  //decision variable

        i=1;
        do
        {
            while(e>=0)
            {

                if(ex==1)
                {
                    x = x + s1;
                }
                else
                {
                    y = y + s2;
                }
            e = e + 2*dy - 2*dx;

            }
            if(ex==1)
                {
                    y = y + s2;
                }
                else
                {
                    x = x + s1;
                }
            e = e + 2*dy;
           
            pt::setco(x,y);
            pt::draw();
            i = i + 1;
      
        }while(i<=dx);

    }  
    void drawl(int colour)  //DDA Line
    {
        float x,y,dx,dy,len;
        int i;
        pt::setcolor(colour);
      
        dx=abs(x2-xco);
        dy=abs(y2-yco);
      
        if(dx >= dy)
        {

            len=dx;
        }
        else
        {
            len=dy;
        }

        dx=(x2-xco)/len;
        dy=(y2-yco)/len;

        x = xco + 0.5;
        y = yco + 0.5;      

        i=1;

        while(i<=len)
        {
            pt::setco(x,y);
            pt::draw();
            x = x + dx;
            y = y + dy;
            i = i + 1;
        cout<<"\ti"<<i;
        cout<<"\tx"<<x;
        cout<<"\ty "<<y<<endl;
      
        }

        pt::setco(x,y);
        pt::draw();

    }
};
int main()
{ 
    int gd=DETECT,gm=VGAMAX;
    int ch,x1,y1,x2,y2, xmax,ymax,xmid,ymid;
    char a;
    initgraph(&gd,&gm,NULL);
    pt p;
    dline dda;
  
    xmax = getmaxx();
    ymax = getmaxy();
    xmid = xmax /2;
    ymid = ymax /2;

    line(xmid,0,xmid,ymax);  //Y co-ordinate
    line(0,ymid,xmax,ymid);  //X co-ordinate

do
{

        xmax = getmaxx();
    ymax = getmaxy();
    xmid = xmax /2;
    ymid = ymax /2;

 cout<<"1.DDA LINE..";
 cout<<"\n2.BRESENHAM'S LINE..";
 cout<<"\n3.EXIT..";
 cout<<"\nEnter your choice: ";
 cin>>ch;
switch(ch)
{
case 1:
    cout<<"\n Enter x1: "; cin>>x1;  
    cout<<"\n Enter y1: "; cin>>y1;
    cout<<"\n Enter x2: "; cin>>x2;
    cout<<"\n Enter y2: "; cin>>y2;       
    dda.setline(x1+xmid,ymid-y1,x2+xmid,ymid-y2);  
    dda.drawl(15);
        break;
case 2:
        cout<<"\n Enter x1: "; cin>>x1;  
    cout<<"\n Enter y1: "; cin>>y1;
    cout<<"\n Enter x2: "; cin>>x2;
    cout<<"\n Enter y2: "; cin>>y2;       
    dda.setline(x1+xmid,ymid-y1,x2+xmid,ymid-y2);  
    dda.drawl();
        break;


case 3:
        exit;
    break;
}
cout<<"\nDO U Want To Continue y OR n: ";
cin>>a;
}while(a!='n');   
    delay(3000);
    getch();
    closegraph();
    return 0;
  
}

------------------------------------------------------------------------------------------------------
Assignment no: 04
//Aim:Write a C++ class for a circle drawing inheriting line class.
  
   
#include<graphics.h>
#include<iostream>
#include<stdlib.h>
#include<math.h>

using namespace std;

class dline   //base class
{
    protected: int x1,y1,x2,y2, colour;
    public:
    dline()
    {
        x1=0; y1=0; x2=0, y2=0;
    }
    void setcolor(int color)
        {
        colour =color;
    }

    void setline(float x1,float y1, float xx,float yy)
 
    { 
        x1=x1; y1=y1; x2=xx, y2=yy;
    } 
     
    void drawl(float x1,float y1, float xx,float yy)  //Simple DDA Line
    {
        float x,y,dx,dy,len;
        int i;     
        dx=abs(x2-x1);
        dy=abs(y2-y1);
     
        if(dx >= dy)
        {

            len=dx;
        }
        else
        {
            len=dy;
        }
        dx=(x2-x1)/len;
        dy=(y2-y1)/len;
        x = x1 + 0.5;
        y = y1 + 0.5; 
        i=1;
        while(i<=len)
        {
            putpixel(x,y,colour);
            x = x + dx;
            y = y + dy;
            i = i + 1;     
        }     

    }
};
class mcircle:public dline
    {
    private: int x0,y0;
    public:
    mcircle():dline()
    {
        x0=0;y0=0;
    }

  
    void drawc(float x1, float y1, int r)
    {
        int i, x, y;
        float d;   
        x=0, y=r;
        d = 1.25 - r;            //decision variabel
        dline::setline(x,y,x,y);
        do
        {
             
              
                      dline::drawl(x1+x, y1+y,x1+x, y1+y);
                      dline::drawl(x1+y, y1+x,x1+y, y1+x);
                      dline::drawl(x1+y, y1-x,x1+y, y1-x);
                      dline::drawl(x1+x, y1-y,x1+x, y1-y);
                       dline::drawl(x1-x, y1-y,x1-x, y1-y);
                       dline::drawl(x1-y, y1-x,x1-y, y1-x);
                        dline::drawl(x1-y, y1+x,x1-y, y1+x);
                        dline::drawl(x1-x, y1+y,x1-x, y1+y);
         

            if(d<0)
            {
                x = x + 1;
                d = d + (2*x) + 3;
            }
            else
            {
                x = x + 1;
                y = y - 1;
                d = d + (2*x-2*y) + 3;
            }

        }while(x<=y);
    } 
  
};


int main()
{
  
    int gd=DETECT,gm=VGAMAX;
    int i, x, y, r, xmax,ymax,xmid,ymid;
  
    initgraph(&gd,&gm,NULL);
    dline l; 
    mcircle c;
  
        cout<<"\n Enter x: "; cin>>x;
    cout<<"\n Enter y: "; cin>>y;
    cout<<"\n Enter radius: "; cin>>r;

    l.setcolor(15);
    c.drawc(x,y,r);

    delay(3000);
    getch();
    closegraph();
    return 0;
}
................................................................................................................................
  
#include<graphics.h>
#include<iostream>
#include<stdlib.h>
#include<math.h>

using namespace std;

class dline   //base class
{
    protected: int x0,y0,x1,y1,x2,y2, colour;
    public:
    dline()
    {
        x1=0; y1=0; x2=0, y2=0;
    }
    void setcolor(int color)
        {
        colour =color;
    }

    void setoff1(int xx,int yy)
    { 
        x0=xx;
        y0=yy;
    }
    void setline(float x1,float y1, float xx,float yy)
 
    { 
        x1=x1+x0; y1=y0-y1; x2=xx+x0, y2=y0-yy;
    } 
     
    void drawl(float x1,float y1, float xx,float yy)  //Simple DDA Line
    {
        float x,y,dx,dy,len;
        int i;     
        dx=abs(x2-x1);
        dy=abs(y2-y1);
     
        if(dx >= dy)
        {

            len=dx;
        }
        else
        {
            len=dy;
        }
        dx=(x2-x1)/len;
        dy=(y2-y1)/len;
        x = x1 + 0.5;
        y = y1 + 0.5; 
     
          putpixel(x,y,colour);
            x = x + dx;
            y = y + dy;
          
    }
};
class mcircle:public dline
    {
    private: int x0,y0;
    public:
    mcircle():dline()
    {
        x0=0;y0=0;
    }
    void setoff(int xx,int yy)
    { 
        x0=xx;
        y0=yy;
    }
  
    void drawc(float x1, float y1, int r)
    {
        int i, x, y;
        float d;    
        x=0, y=r;
        d = 1.25 - r;            //decision variabel
        dline::setline(x,y,x,y);
        do
        {
          
          
        dline::drawl(x1+x0+x, y0-y1+y,x1+x0+x, y0-y1+y);
            dline::drawl(x1+x0+y, y0-y1+x,x1+x0+y, y0-y1+x);
            dline::drawl(x1+x0+y, y0-y1-x,x1+x0+y, y0-y1-x);
            dline::drawl(x1+x0+x, y0-y1-y,x1+x0+x, y0-y1-y);
            dline::drawl(x1+x0-x, y0-y1-y,x1+x0-x, y0-y1-y);
            dline::drawl(x1+x0-y, y0-y1-x,x1+x0-y, y0-y1-x);
            dline::drawl(x1+x0-y, y0-y1+x,x1+x0-y, y0-y1+x);
            dline::drawl(x1+x0-x, y0-y1+y,x1+x0-x, y0-y1+y);
         

            if(d<0)
            {
                x = x + 1;
                d = d + (2*x) + 3;
            }
            else
            {
                x = x + 1;
                y = y - 1;
                d = d + (2*x-2*y) + 3;
            }

        }while(x<=y);
    }  
  
};


int main()
{
  
    int gd=DETECT,gm=VGAMAX;
    int i, x, y, r, xmax,ymax,xmid,ymid;
    char a;
  
    initgraph(&gd,&gm,NULL);
    dline l;  
    mcircle c;
    xmax = getmaxx();
        ymax = getmaxy();
        xmid = xmax /2;
        ymid = ymax /2;

        line(xmid,0,xmid,ymax);  //Y co-ordinate
        line(0,ymid,xmax,ymid);  //X co-ordinate
  
   do
   {  
    cout<<"\n Enter x: "; cin>>x;
    cout<<"\n Enter y: "; cin>>y;
    cout<<"\n Enter radius: "; cin>>r;
  
    c.setoff(xmid, ymid);
    l.setoff1(xmid, ymid);
    l.setcolor(15);
    c.drawc(x,y,r);
  
    cout<<"\nDO U Want To Continue y OR n: ";
    cin>>a;
    }while(a!='n');
  
    delay(3000);
    getch();
    closegraph();
    return 0;
}
------------------------------------------------------------------------------------------------------
Assignment no: 05
//Aim:Write a program in C/C++ to draw a circle of desired radius.
  
#include<graphics.h>
#include<iostream>
#include<stdlib.h>
#include<math.h>
using namespace std;
class dcircle
{
    private: int x0,y0;
    public:
    dcircle()
    {
        x0=0;y0=0;
    }

    void setoff(int xx,int yy)
    { 
        x0=xx;
        y0=yy;
    }

    void drawdc(float x, float y, int r)  //DDA Circle
    {
        float x1,y1,x2,y2,startx,starty,ep;
        int i,val;   

        x1=r*cos(0); //Initialize starting point
        y1=r*sin(0);
 
        startx = x1;
        starty = y1;

        i=0;
        do
        {
            val = pow(2,i);
            i++;
        }while(val<r);
        ep = 1/pow(2,i-1);  //calculation of epsilon
     
        do
        {
            x2 = x1 + y1*ep;
            y2 = y1 - x2*ep;
            putpixel(x0+x+x2, y0-(y+y2),15);
            x1 = x2;
            y1 = y2;
        }while((y1 - starty) < ep || (startx - x1) > ep);
    }
    void drawbc(int x1, int y1, int r)  //Bresenham's Circle
    {
        int i, x, y;
        float d;   
        x=0, y=r;
        d = 3 - 2*r;            //decision variable

        do
        {
                      
            putpixel(x1+x0+x, y0-y1+y,15);
            putpixel(x1+x0+y, y0-y1+x,15);
            putpixel(x1+x0+y, y0-y1-x,15);
            putpixel(x1+x0+x, y0-y1-y,15);
            putpixel(x1+x0-x, y0-y1-y,15);
            putpixel(x1+x0-y, y0-y1-x,15);
            putpixel(x1+x0-y, y0-y1+x,15);
            putpixel(x1+x0-x, y0-y1+y,15);
         

            if(d<=0)
            {
                x = x + 1;
                d = d + (4*x) + 6;
            }
            else
            {
                x = x + 1;
                y = y - 1;
                d = d + (4*x-4*y) + 10;
            }

        }while(x<=y);
    } 
    void drawmc(float x1, float y1, int r)  // Mid point Circle
    {
        int i, x, y;
        float d;   
        x=0, y=r;
        d = 1.25 - r;            //decision variable

        do
        {
                     
            putpixel(x1+x0+x, y0-y1+y,15);
            putpixel(x1+x0+y, y0-y1+x,15);

            putpixel(x1+x0+y, y0-y1-x,15);
            putpixel(x1+x0+x, y0-y1-y,15);
            putpixel(x1+x0-x, y0-y1-y,15);
            putpixel(x1+x0-y, y0-y1-x,15);
            putpixel(x1+x0-y, y0-y1+x,15);
            putpixel(x1+x0-x, y0-y1+y,15);
         

            if(d<0)
            {
                x = x + 1;
                d = d + (2*x) + 3;
            }
            else
            {
                x = x + 1;
                y = y - 1;
                d = d + (2*x-2*y) + 5;
            }
        }while(x<=y);
    } 
 
};

int main()
{ 
    int gd=DETECT,gm=VGAMAX;
    int i, x, y, r,ch, xmax,ymax,xmid,ymid;
    float a,b;  
    char ans;
    initgraph(&gd, &gm, NULL);     
    dcircle c1; 
    xmax = getmaxx();
    ymax = getmaxy();
    xmid = xmax /2;
    ymid = ymax /2;

    line(xmid,0,xmid,ymax);  //Y co-ordinate
    line(0,ymid,xmax,ymid);  //X co-ordinate
    do
    {     
     cout<<"\nEnter Cricle Drwaing algorithm";
     cout<<"\n1.DDA..";
     cout<<"\n2.BRESENHAM'S..";
     cout<<"\n3.MID POINT..";
     cout<<"\n4.EXIT..";
     cout<<"\nEnter your choice: ";
    cin>>ch;
switch(ch)
{
case 1:
    { 
    cout<<"\n Enter x: "; cin>>a;
    cout<<"\n Enter y: "; cin>>b;
    cout<<"\n Enter radius: "; cin>>r;

    c1.setoff(xmid, ymid);
    setcolor(15);
    c1.drawdc(a,b,r);
        break;
    }
case 2:
        { 
    cout<<"\n Enter x: "; cin>>x;
    cout<<"\n Enter y: "; cin>>y;
    cout<<"\n Enter radius: "; cin>>r;

    c1.setoff(xmid, ymid);
    setcolor(15);
    c1.drawbc(x,y,r);
        break;
    }

case 3:
    { 
    cout<<"\n Enter x: "; cin>>x;
    cout<<"\n Enter y: "; cin>>y;
    cout<<"\n Enter radius: "; cin>>r;

    c1.setoff(xmid, ymid);
    setcolor(15);
    c1.drawmc(x,y,r);
        break;
    }
case 4:
        exit;
    break;
}
cout<<"\nDO U Want To Continue y OR n: ";
cin>>ans;
}while(ans!='n'); 
 

    delay(3000);
    getch();
    closegraph();
    return 0;
}

/*
gescoe@gescoe-VirtualBox:~/Downloads/cgprogram012$ g++ 5.cpp -o 5 -lgraph
gescoe@gescoe-VirtualBox:~/Downloads/cgprogram012$ ./5

Enter Cricle Drwaing algorithm
1.DDA..
2.BRESENHAM'S..
3.MID POINT..
4.EXIT..
Enter your choice: [xcb] Unknown sequence number while processing queue
[xcb] Most likely this is a multi-threaded client and XInitThreads has not been called
[xcb] Aborting, sorry about that.
5: ../../src/xcb_io.c:274: poll_for_event: Assertion `!xcb_xlib_threads_sequence_lost' failed.
1

 Enter x: 100

 Enter y: 100

 Enter radius: 50

DO U Want To Continue y OR n: y

Enter Cricle Drwaing algorithm
1.DDA..
2.BRESENHAM'S..
3.MID POINT..
4.EXIT..
Enter your choice: 2

 Enter x: -100

 Enter y: -100

 Enter radius: 60

DO U Want To Continue y OR n: y

Enter Cricle Drwaing algorithm
1.DDA..
2.BRESENHAM'S..
3.MID POINT..
4.EXIT..
Enter your choice: 3

 Enter x: -100

 Enter y: 100

 Enter radius: 80

DO U Want To Continue y OR n: n  */

------------------------------------------------------------------------------------------------------
Assignment no: 06
//Aim:Write a program using C/C++ to draw a line with line styles (Thick, Thin, Dotted).

//Line styles using DDA

#include<graphics.h>
#include<iostream>
#include<stdlib.h>
#include<math.h>
using namespace std;
class pt   //base class
{
    protected: int xco,yco,color;

    public:
    pt()
    {
        xco=0;yco=0;color=15;
    }
    void setco(int x,int y)
    { 
        xco=x;
        yco=y;
    }
    void setcolor(int c) 
    { 
        color=c;
    }
 
    void draw()
    {    putpixel(xco,yco,color);

    }

};

class dline: public pt   //derived class
{
    private: int x2,y2;
 
    public:
    dline():pt()
    {
        x2=0,y2=0;
    }
 
    void setline(int x, int y, int xx, int yy)
    {
        pt::setco(x,y);
        x2=xx;
        y2=yy;
    }

    void drawsi(int colour)  //Simple DDA Line
    {
        float x,y,dx,dy,len;
        int i;
        pt::setcolor(colour);
     
        dx=abs(x2-xco);
        dy=abs(y2-yco);
     
        if(dx >= dy)
        {
            len=dx;
        }
        else
        {
            len=dy;
        }

        dx=(x2-xco)/len;
        dy=(y2-yco)/len;

        x = xco + 0.5;
        y = yco + 0.5;     

        i=1;
        while(i<=len)
        {
            pt::setco(x,y);
            pt::draw();
            x = x + dx;
            y = y + dy;
            i = i + 1;       
        }
        pt::setco(x,y);
        pt::draw();
    }

void drawda(int colour)  //Dash DDA Line
    {
        float x,y,dx,dy,len;
        int i,dash_pixel=0, dash_space=0;
        pt::setcolor(colour);
     
        dx=abs(x2-xco);
        dy=abs(y2-yco);
      
        if(dx >= dy)
        {
            len=dx;
        }
        else
        {
            len=dy;
        }

        dx=(x2-xco)/len;
        dy=(y2-yco)/len;

        x = xco + 0.5;
        y = yco + 0.5;     

        i=1;     
        while(i<=len)
 
        {
            dash_pixel=0;
            while(dash_pixel<5)         
            {         
            pt::setco(x,y);
            pt::draw();         
            x = x + dx;
            y = y + dy;
            i = i + 1;
            dash_pixel = dash_pixel +1;
            }
    dash_space=0;  
    while(dash_space<=2)         
            {         
                    
            x = x + dx;
            y = y + dy;
            i = i + 1;
            dash_space = dash_space +1;
            }
         
        }
     
    }

void drawdo(int colour)  //Dotted DDA Line
    {        float x,y,dx,dy,len;
        int i,dot_space;
        pt::setcolor(colour);     
        dx=abs(x2-xco);
        dy=abs(y2-yco);     
        if(dx >= dy)
        {
            len=dx;
        }
        else
        {
            len=dy;
        }
        dx=(x2-xco)/len;
        dy=(y2-yco)/len;
        x = xco + 0.5;
        y = yco + 0.5;     
        i=1;
        while(i<=len)
            {
            dot_space=0;
            while(dot_space<=1)        
            {                              
            x = x + dx;
            y = y + dy;
            i = i + 1;
            dot_space = dot_space +1;
            }
            pt::setco(x,y);
            pt::draw();           
             }
     

    }

void drawth(int x1,int y1, int x2, int y2,int colour )  //Thick DDA Line
    {
        float x,y,dx,dy,len;
        int i;         
        dx=abs(x2-x1);
        dy=abs(y2-y1);     
        if(dx >= dy)
        {            len=dx;
        }
        else     
       {            len=dy;
        }
        dx=(x2-x1)/len;
        dy=(y2-y1)/len;
        x = x1 + 0.5;
        y = y1 + 0.5;  

        i=1;
        while(i<=len)
        {            putpixel(x,y,colour);
            x = x + dx;
            y = y + dy;
            i = i + 1;           
        }
        putpixel(x,y,colour);

    } 
 };
int main()
{ 
    int gd=DETECT,gm=VGAMAX;
    int i, ch,x1,y1,x2,y2, dx,dy,xmax,ymax,xmid,ymid,wx,wy,th;
    char a;
    initgraph(&gd,&gm,NULL);
        dline ls; 
    xmax = getmaxx();
    ymax = getmaxy();
    xmid = xmax /2;
    ymid = ymax /2;
    line(xmid,0,xmid,ymax);  //Y co-ordinate
    line(0,ymid,xmax,ymid);  //X co-ordinate
do
{        xmax = getmaxx();
    ymax = getmaxy();
    xmid = xmax /2;
    ymid = ymax /2;

 cout<<"\nEnter Line Styles";
 cout<<"\n1.SIMPLE..";
 cout<<"\n2.DASH..";
 cout<<"\n3.DOTTED..";
 cout<<"\n4.THICK..";
 cout<<"\n5.EXIT..";
 cout<<"\nEnter your choice: ";
 cin>>ch;
switch(ch)
{
case 1:
    cout<<"\n Enter x1: "; cin>>x1; 
    cout<<"\n Enter y1: "; cin>>y1;
    cout<<"\n Enter x2: "; cin>>x2;
    cout<<"\n Enter y2: "; cin>>y2;      
    ls.setline(x1+xmid,ymid-y1,x2+xmid,ymid-y2); 
    ls.drawsi(15);
        break;
case 2:
        cout<<"\n Enter x1: "; cin>>x1; 
    cout<<"\n Enter y1: "; cin>>y1;
    cout<<"\n Enter x2: "; cin>>x2;
    cout<<"\n Enter y2: "; cin>>y2;      
    ls.setline(x1+xmid,ymid-y1,x2+xmid,ymid-y2); 
    ls.drawda(15);
        break;
case 3:
    cout<<"\n Enter x1: "; cin>>x1; 
    cout<<"\n Enter y1: "; cin>>y1;
    cout<<"\n Enter x2: "; cin>>x2;
    cout<<"\n Enter y2: "; cin>>y2;      
    ls.setline(x1+xmid,ymid-y1,x2+xmid,ymid-y2); 
    ls.drawdo(15);
        break;
case 4:
        cout<<"\n Enter x1: "; cin>>x1; 
    cout<<"\n Enter y1: "; cin>>y1;
    cout<<"\n Enter x2: "; cin>>x2;
    cout<<"\n Enter y2: "; cin>>y2;      
    cout<<"Enter Thickness: ";
    cin>>th;
    ls.drawth(x1+xmid,ymid-y1,x2+xmid,ymid-y2,15);        
        if((y2-y1)/(x2-x1) <1)
        {
            wy=(th-1)*sqrt(pow((x2-x1),2)+pow((y2-y1),2))/(2*abs(x2-x1));
            for(i=0;i<wy;i++)
            {
                ls.drawth(x1+xmid,ymid-y1-i,x2+xmid,ymid-y2-i,15);
                ls.drawth(x1+xmid,ymid-y1+i,x2+xmid,ymid-y2+i,15);
            }
        }
        else
        {
            wx=(th-1)*sqrt(pow((x2-x1),2)+pow((y2-y1),2))/(2*abs(y2-y1));
            for(i=0;i<wx;i++)
            {
                ls.drawth(x1+xmid-i,ymid-y1,x2+xmid-i,ymid-y2,15);
                ls.drawth(x1+xmid+i,ymid-y1,x2+xmid+i,ymid-y2,15);
            }
 }
        break;
case 5:
        exit;
    break;
}
cout<<"\nDO U Want To Continue y OR n: ";
cin>>a;
}while(a!='n');       
    delay(3000);
    getch();
    closegraph();
    return 0;
   }
/*
gescoe@gescoe-VirtualBox:~/Downloads/cgprogram012$ ./a05
Enter Line Styles
1.SIMPLE..
2.DASH..
3.DOTTED..
4.THICK..
5.EXIT..
Enter your choice:1
 Enter x1: 10
 Enter y1: 10
 Enter x2: 60
 Enter y2: 60
DO U Want To Continue y OR n: y
Enter Line Styles
1.SIMPLE..
2.DASH..
3.DOTTED..
4.THICK..
5.EXIT..
Enter your choice: 2
 Enter x1: -10
 Enter y1: 10
 Enter x2: -80
 Enter y2: 80
DO U Want To Continue y OR n: y

Enter Line Styles
1.SIMPLE..
2.DASH..
3.DOTTED..
4.THICK..
5.EXIT..
Enter your choice: 3
 Enter x1: -10
 Enter y1: -10
 Enter x2: -100
 Enter y2: -100
DO U Want To Continue y OR n: y
Enter Line Styles
1.SIMPLE..
2.DASH..
3.DOTTED..
4.THICK..
5.EXIT..
Enter your choice: 4
 Enter x1: 10
 Enter y1: -10
 Enter x2: 100
 Enter y2: -100
Enter Thickness: 10
DO U Want To Continue y OR n: n  */
---------------------------------------------------------------------------------------------------

     //line styles using Bresenham's algo

#include<graphics.h>
#include<iostream>
#include<stdlib.h>
#include<math.h>
using namespace std;

class pt   //base class
{

    protected: int xco,yco,color;

    public:
    pt()
    {
        xco=0;yco=0;color=15;
    }

    void setco(int x,int y)
    { 
        xco=x;
        yco=y;
    } 

    void setcolor(int c) 
    { 
        color=c;
    }
  
    void draw()
    {    putpixel(xco,yco,color);

    }

};

class dline: public pt   //derived class
{
    private: int x2,y2;
  
    public:
    dline():pt()
    {
        x2=0,y2=0;
    }
  
    void setline(int x, int y, int xx, int yy)
    {
        pt::setco(x,y);
        x2=xx;
        y2=yy;

    }

    void drawsi()   //Bresenham's Line
    {

        float x,y,dx,dy,e,temp;
        int i,s1,s2,ex;
     
        dx=abs(x2-xco);
        dy=abs(y2-yco);

        x=xco;
        y=yco;

        pt::setco(x,y);
        pt::draw();
     
        if(x2 > xco)  //sign() function
        {
            s1=1;
        }

        if(x2 < xco)
        {
            s1=-1;
        }
                if(x2 == xco)
        {
            s1=0;
        }

        if(y2 > yco)
        {
            s2=1;
        }

        if(y2 < yco)
        {
            s2=-1;
        }
                if(y2 == yco)
        {
            s2=0;
        }

        if(dy > dx)
        {
            temp = dx;
              dx = dy;
              dy = temp;
              ex = 1; 
        }
        else
        {
            ex=0;
        }

        e=2*dy-dx;  //decision variable

        i=1;
        do
        {
            while(e>=0)
            {

                if(ex==1)
                {
                    x = x + s1;
                }
                else
                {
                    y = y + s2;
                }
            e = e + 2*dy - 2*dx;

            }
            if(ex==1)
                {
                    y = y + s2;
                }
                else
                {
                    x = x + s1;
                }
            e = e + 2*dy;
         
            pt::setco(x,y);
            pt::draw();
            i = i + 1;
     
        }while(i<=dx);
    }
void drawda()  //Dash Line
    {
     
        float x,y,dx,dy,e,temp;
        int i,s1,s2,ex, dash=0;
     
        dx=abs(x2-xco);
        dy=abs(y2-yco);

        x=xco;
        y=yco;

        pt::setco(x,y);
        pt::draw();
     
        if(x2 > xco)  //sign() function
        {
            s1=1;
        }

        if(x2 < xco)
        {
            s1=-1;
        }
                if(x2 == xco)
        {
            s1=0;
        }

        if(y2 > yco)
        {
            s2=1;
        }

        if(y2 < yco)
        {
            s2=-1;
        }
                if(y2 == yco)
        {
            s2=0;
        }

        if(dy > dx)
        {
            temp = dx;
              dx = dy;
              dy = temp;
              ex = 1; 
        }
        else
        {
            ex=0;
        }

        e=2*dy-dx;  //decision variable

        i=1;
        do
        {
            dash=0;
            if(dash<5)         
            {
            while(e>=0)
            {
             
                if(ex==1)
                {
                    x = x + s1;
                }
                else
                {
                    y = y + s2;
                }
            e = e + 2*dy - 2*dx;

            }
                if(ex==1)
                {
                    y = y + s2;
                }
                else
                {
                    x = x + s1;
                }
            e = e + 2*dy;
         
            pt::setco(x,y);
            pt::draw();
            i = i + 1;
            dash = dash +1;
            }
            else
            {
            x = x + 2*s1;
            y = y + 2*s2;
            }
        }while(i<=dx);

    }    

void drawdo()  //Dotted Line
    {
        float x,y,dx,dy,e,temp;
        int i,s1,s2,ex, dot=0;
     
        dx=abs(x2-xco);
        dy=abs(y2-yco);

        x=xco;
        y=yco;

        pt::setco(x,y);
        pt::draw();
     
        if(x2 > xco)  //sign() function
        {
            s1=1;
        }

        if(x2 < xco)
        {
            s1=-1;
        }
                if(x2 == xco)
        {
            s1=0;
        }

        if(y2 > yco)
        {
            s2=1;
        }

        if(y2 < yco)
        {
            s2=-1;
        }
                if(y2 == yco)
        {
            s2=0;
        }

        if(dy > dx)
        {
            temp = dx;
              dx = dy;
              dy = temp;
              ex = 1; 
        }
        else
        {
            ex=0;
        }

        e=2*dy-dx;  //decision variable

        i=1;
        do
        {
            dot=0;
            while(dot<5)         
            {
            while(e>=0)
            {
              
                if(ex==1)
                {
                    x = x + s1;
                }
                else
                {
                    y = y + s2;
                }
            e = e + 2*dy - 2*dx;

            }
            if(ex==1)
                {
                    y = y + s2;
                }
                else
                {
                    x = x + s1;
                }
            e = e + 2*dy;
                 
            pt::setco(x,y);
            pt::draw();
            i = i + 1;
            dot = dot +1;
            }
         
        }while(i<=dx);

    }     

void drawth(int x1,int y1, int x2, int y2,int colour )  //Thick Line
    {
        float x,y,dx,dy,e,temp;
        int i,s1,s2,ex;
     
        dx=abs(x2-xco);
        dy=abs(y2-yco);

        x=xco;
        y=yco;

        pt::setco(x,y);
        pt::draw();
     
        if(x2 > xco)  //sign() function
        {
            s1=1;
        }

        if(x2 < xco)
        {
            s1=-1;
        }
                if(x2 == xco)
        {
            s1=0;
        }

        if(y2 > yco)
        {
            s2=1;
        }

        if(y2 < yco)
        {
            s2=-1;
        }
                if(y2 == yco)
        {
            s2=0;
        }

        if(dy > dx)
        {
            temp = dx;
              dx = dy;
              dy = temp;
              ex = 1; 
        }
        else
        {
            ex=0;
        }

        e=2*dy-dx;  //decision variable

        i=1;
        do
        {
            while(e>=0)
            {

                if(ex==1)
                {
                    x = x + s1;
                }
                else
                {
                    y = y + s2;
                }
            e = e + 2*dy - 2*dx;

            }
            if(ex==1)
                {
                    y = y + s2;
                }
                else
                {
                    x = x + s1;
                }
            e = e + 2*dy;
         
            pt::setco(x,y);
            pt::draw();
            i = i + 1;
     
        }while(i<=dx);    }
 };
int main()
{
  
    int gd=DETECT,gm=VGAMAX;
    int i, ch,x1,y1,x2,y2, dx,dy,xmax,ymax,xmid,ymid,wx,wy,th;
    char a;
    initgraph(&gd,&gm,NULL);  
  
    dline ls;  
    xmax = getmaxx();
    ymax = getmaxy();
    xmid = xmax /2;
    ymid = ymax /2;

    line(xmid,0,xmid,ymax);  //Y co-ordinate
    line(0,ymid,xmax,ymid);  //X co-ordinate

do
{        xmax = getmaxx();
    ymax = getmaxy();
    xmid = xmax /2;
    ymid = ymax /2;

 cout<<"\nEnter Line Styles";
 cout<<"\n1.SIMPLE..";
 cout<<"\n2.DASH..";
 cout<<"\n3.DOTTED..";
 cout<<"\n4.THICK..";
 cout<<"\n5.EXIT..";
 cout<<"\nEnter your choice: ";
 cin>>ch;
switch(ch)
{
case 1:
    cout<<"\n Enter x1: "; cin>>x1; 
    cout<<"\n Enter y1: "; cin>>y1;
    cout<<"\n Enter x2: "; cin>>x2;
    cout<<"\n Enter y2: "; cin>>y2;      
    ls.setline(x1+xmid,ymid-y1,x2+xmid,ymid-y2); 
    ls.drawsi();
        break;

case 2:
        cout<<"\n Enter x1: "; cin>>x1; 
    cout<<"\n Enter y1: "; cin>>y1;
    cout<<"\n Enter x2: "; cin>>x2;
    cout<<"\n Enter y2: "; cin>>y2;      
    ls.setline(x1+xmid,ymid-y1,x2+xmid,ymid-y2); 
    ls.drawda();
        break;

case 3:
    cout<<"\n Enter x1: "; cin>>x1; 
    cout<<"\n Enter y1: "; cin>>y1;
    cout<<"\n Enter x2: "; cin>>x2;
    cout<<"\n Enter y2: "; cin>>y2;      
    ls.setline(x1+xmid,ymid-y1,x2+xmid,ymid-y2); 
    ls.drawdo();
        break;

case 4:
        cout<<"\n Enter x1: "; cin>>x1;  
    cout<<"\n Enter y1: "; cin>>y1;
    cout<<"\n Enter x2: "; cin>>x2;
    cout<<"\n Enter y2: "; cin>>y2;      
    cout<<"Enter Thickness: ";
    cin>>th;
    ls.drawth(x1+xmid,ymid-y1,x2+xmid,ymid-y2,15);     
         
        if((y2-y1)/(x2-x1) <1)
        {
            wy=(th-1)*sqrt(pow((x2-x1),2)+pow((y2-y1),2))/(2*abs(x2-x1));
            for(i=0;i<wy;i++)
            {
                ls.drawth(x1+xmid,ymid-y1-i,x2+xmid,ymid-y2-i,15);
                ls.drawth(x1+xmid,ymid-y1+i,x2+xmid,ymid-y2+i,15);
            }
        }
        else
        {
            wx=(th-1)*sqrt(pow((x2-x1),2)+pow((y2-y1),2))/(2*abs(y2-y1));
            for(i=0;i<wx;i++)
            {
                ls.drawth(x1+xmid-i,ymid-y1,x2+xmid-i,ymid-y2,15);
                ls.drawth(x1+xmid+i,ymid-y1,x2+xmid+i,ymid-y2,15);
            }
         
        }
        break;
case 5:
        exit;
    break;
}
cout<<"\nDO U Want To Continue y OR n: ";
cin>>a;
}while(a!='n');        
    delay(3000);
    getch();
    closegraph();
    return 0;  
}

------------------------------------------------------------------------------------------------------
Assignment no: 07
//Write a program in Java/ Python to draw a line with line style (Thick, Thin, Dotted).
import java.awt.*;
import javax.swing.*;

public class Lines extends JFrame{
    public Lines(){
        super("Line Styles");
        setSize(400,400);
        setVisible(true);
    }

    Stroke[] linestyles=new Stroke[]{
        new BasicStroke(1.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL),
        new BasicStroke(25.0f, BasicStroke.CAP_SQUARE, BasicStroke.JOIN_MITER),
        new BasicStroke(1.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND),};

    Stroke thindashed=new BasicStroke(2.0f,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL,1.0f, new float[]                                   {8.0f,3.0f,2.0f,3.0f},0.0f);  
    final static float dash1[]={10.0f};
    final static BasicStroke dashed =new BasicStroke(1.0f, BasicStroke.CAP_BUTT,BasicStroke.JOIN_MITER, 10.0f, dash1, 0.0f);
  
    final static float thick1[]={10.0f};
    final static BasicStroke thickdash =new BasicStroke(10.0f, BasicStroke.CAP_BUTT,BasicStroke.JOIN_MITER, 10.0f, thick1, 0.0f);

    public void paint(Graphics g){
        int xpoints[]={220,350,350,220};
        int ypoints[]={220,220,320,320};
        int npoints=4;

        int xpoints1[]={60,120,180};
        int ypoints1[]={320,220,320};
        int npoints1=3;

        Graphics2D g2d = (Graphics2D) g;
        super.paint(g);
      
        ((Graphics2D)g).setStroke(dashed);
        g.setColor(Color.red);
        g2d.drawLine(50,50,200,50);
        g2d.setColor(Color.black);
        g.drawString("Dashed Line", 210,55);
  
        ((Graphics2D)g).setStroke(thindashed);
        g.setColor(Color.blue);
        g2d.drawLine(50,90,200,90);
        g2d.setColor(Color.black);
        g.drawString("Thin Dashed Line", 210,95);

        ((Graphics2D)g).setStroke(thickdash);
        g.setColor(Color.green);
        g2d.drawLine(50,130,200,130);
        g2d.setColor(Color.black);
        g.drawString("Thick Dashed Line", 210,135);

        ((Graphics2D)g).setStroke(linestyles[0]);
        g.setColor(Color.red);
        g2d.drawLine(50,170,200,170);
        g2d.setColor(Color.black);
        g.drawString("Line", 210,175);

        }  

    public static void main(String[] args){
        Lines application = new Lines();
        application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}
------------------------------------------------------------------------------------------------------------
Assignment no: 08
//Write a C/C++ program to draw a convex polygons (Square, Rectangle, Triangle).
 
#include<iostream>
#include<graphics.h>
using namespace std;

class dline
{
    protected: int x1,y1,x2,y2;
    public:
    dline()
    {
        x1=0,y1=0,x2=0,y2=0;
    }
    void step1()
    {
        cout<<"\n Enter x1: ";cin>>x1;
        cout<<"\n Enter y1: ";cin>>y1;
    }
    void step2()
    {
        cout<<"\n Enter x2: ";cin>>x2;
        cout<<"\n Enter y2: ";cin>>y2;
    }
    void drawl()
    {
        float x,y,dx,dy,len;
        int i;
          
        dx=abs(x2-x1);
        dy=abs(y2-y1);
      
        if(dx >= dy)
        {

            len=dx;
        }
        else
        {
            len=dy;
        }

        dx=(x2-x1)/len;
        dy=(y2-y1)/len;

        x = x1 + 0.5;
        y = y1 + 0.5;      

        i=1;

        while(i<=len)
        {
            putpixel(x,y,15);
            x = x + dx;
            y = y + dy;
            i = i + 1;      
        }

        putpixel(x,y,15);

    }
};

class rect: public dline  //Rectangle
{
    private: int w,l;
    public:
    void setrect()
    {
        dline::step1();
        cout<<"\n Enter width: ";cin>>w;
        cout<<"\n Enter length: ";cin>>l;
    }  
    void drawrect()
    {
        x2=x1;
        y2=y1+w;  
        dline::drawl();  //left

        x2=x1+l;
        y2=y1;  
        dline::drawl();  //top

        x1=x1;
        y1=y1+w;      
        x2=x1+l;
        y2=y1;  
        dline::drawl();  //bottom

        x1=x1+l;
        y1=y1-w;      
        x2=x1;
        y2=y1+w;      
        dline::drawl();  //right
    }
};  

class square: public dline  //Square
{
    private: int l;
    public:
    void setsquare()
    {
        dline::step1();
        cout<<"\n Enter length: ";cin>>l;
    }  
    void drawsquare()
    {
        x2=x1;
        y2=y1+l;  
        dline::drawl();  //left

        x2=x1+l;
        y2=y1;  
        dline::drawl();  //top

        x1=x1;
        y1=y1+l;      
        x2=x1+l;
        y2=y1;  
        dline::drawl();  //bottom

        x1=x1+l;
        y1=y1-l;      
        x2=x1;
        y2=y1+l;      
        dline::drawl();  //right
    }
};  
  
class triangle: public dline  //Triangle
{
    private: int x3,y3;
    public:
    void settri()
    {
        dline::step1();
        dline::step2();
        cout<<"\n Enter x3: ";cin>>x3;
        cout<<"\n Enter y3: ";cin>>y3;
    }  
    void drawtri()
    {
        int tempx,tempy;
        dline::drawl();

        tempx=x2;
        x2=y2;
        x2=x3;
        y2=y3;
        dline::drawl();

        x1=tempx;
        y1=tempy;
        dline::drawl();
    }
};  

int main()
{
  
    int gd=DETECT,gm=VGAMAX;
    int i, x, y, r,ch, xmax,ymax,xmid,ymid;
    char a;
    initgraph(&gd,&gm,NULL);
      
    rect r1;
    square s;
    triangle t;
    do
    {       
     cout<<"\nChoose polygon to draw";
     cout<<"\n1.Rectangle..";
     cout<<"\n2.Square..";
     cout<<"\n3.Triangle..";
     cout<<"\n4.EXIT..";
     cout<<"\nEnter your choice: ";
    cin>>ch;
switch(ch)
{
case 1:
    {  
    r1.setrect();
    r1.drawrect();
    break;
    }
case 2:
        {  
    s.setsquare();
    s.drawsquare();
    break;
    }

case 3:
    {  
    t.settri();
    t.drawtri();
    delay(3000);
    break;
    }
case 4:
        exit;
    break;
}
cout<<"\nDO U Want To Continue y OR n: ";
cin>>a;
}while(a!='n');  
    delay(3000);
    getch();
    closegraph();
    return 0;
}
------------------------------------------------------------------------------------------------------
Assignment no: 09
//Write a C/C++ program to draw a convex polygons (Square, Rectangle, Triangle) using programmable edges.
#include<iostream>
#include<graphics.h>
using namespace std;

class dline
{
    protected: int x1,y1,x2,y2;
    public:
    dline()
    {
        x1=0,y1=0,x2=0,y2=0;
    }
  
    void drawl()
    {
        float x,y,dx,dy,len;
        int i;
         
        dx=abs(x2-x1);
        dy=abs(y2-y1);
     
        if(dx >= dy)
        {

            len=dx;
        }
        else
        {
            len=dy;
        }

        dx=(x2-x1)/len;
        dy=(y2-y1)/len;

        x = x1 + 0.5;
        y = y1 + 0.5;     

        i=1;

        while(i<=len)
        {
            putpixel(x,y,15);
            x = x + dx;
            y = y + dy;
            i = i + 1;     
        }

        putpixel(x,y,15);

    }
};

class poly: public dline  //poly
{
    private: int a[10][2],p;
    public:
    void setpts(int i)
    {
        int j;
        for(j=0;j<i;j++)
        {
        cout<<"\n Enter x-coordinate: "<<j<<":";cin>>a[j][0];
        cout<<"\n Enter y-coordinate: "<<j<<":";cin>>a[j][1];
        }
    } 
    void drawpoly(int i)
    {
        int j;
        x1=a[0][0];
        y1=a[0][1];     
        x2=a[1][0];
        y2=a[1][1]; 
        dline::drawl();
     
        for(j=0;j<i-1;j++)
        {
        x1=a[j][0];
        y1=a[j][1];     
        x2=a[j+1][0];
        y2=a[j+1][1];
        dline::drawl();
        }

        x1=a[j][0];
        y1=a[j][1];     
        x2=a[0][0];
        y2=a[0][1];
        dline::drawl();
    }
}; 

int main()
{ 
    int n ,gd=DETECT,gm=VGAMAX;
    initgraph(&gd,&gm,NULL);
     
    poly shape;
           
     cout<<"\nEnter number of slides: "; cin>>n;
     shape.setpts(n);
    shape.drawpoly(n);
    delay(3000);
    getch();
    closegraph();
    return 0;
} 
------------------------------------------------------------------------------------------------------
Assignment no: 10
//Aim:Write a program in Java to draw a concave polygon.
import java.awt.*;
import javax.swing.*;

public class Polygon extends JFrame{
    public Polygon(){
        super("Draw Square, Rectangle, Polygon");
        setSize(400,400);
        setVisible(true);
    }

    public void paint(Graphics g){
        int xpoints[]={55,145,55,145,55};
        int ypoints[]={55,55,145,145,55};
        int npoints=5;

        int xpoints1[]={250,300,350};
        int ypoints1[]={100,50,100};
        int npoints1=3;

        Graphics2D g2d = (Graphics2D) g;
        super.paint(g);
        g.setColor(Color.red);
        g.drawRect(55,150,90,150);
        g.drawRect(150,150,200,200);
        g2d.setColor(Color.blue);
        g2d.drawLine(150,150,150,150);
        g.drawPolygon(xpoints,ypoints,npoints);
        g.drawPolygon(xpoints1,ypoints1,npoints1);
        }

    public static void main(String[] args){
        Polygon application = new Polygon();
        application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

------------------------------------------------------------------------------------------------------
Assignment no: 11
// Write a C/C++ program to fill polygon using scan line algorithm.

//Scan line algorithm for filling polygon
#include<iostream>
#include<graphics.h>
#include<stdlib.h>
using namespace std;

struct edge
{
    int x1,y1,x2,y2,flag;
};


int main()
{  
    int n,i,j,k,gd=DETECT,gm=VGAMAX, x[10],y[10],ymax=0,ymin=480,yy,temp;
    struct edge ed[10],temped;
    float dx,dy,m[10],x_int[10],inter_x[10];
    initgraph(&gd,&gm,NULL);      
            
     cout<<"\n Enter the number of vertices of the graph: "; cin>>n;
     cout<<"\n Enter the vertices: \n";
    for(i=0;i<n;i++)
    {
        cout<<"x"<<i<<":"; cin>>x[i];
        cout<<"y"<<i<<":"; cin>>y[i];
        if(y[i]>ymax)
            ymax=y[i];
        if(y[i]<ymin)
            ymin=y[i];
        ed[i].x1=x[i];
        ed[i].y1=y[i];
    }

    for(i=0;i<n-1;i++)  //store the edge information
    {
        ed[i].x2=ed[i+1].x1;
        ed[i].y2=ed[i+1].y1;
        ed[i].flag=0;
    }
        ed[i].x2=ed[0].x1;
        ed[i].y2=ed[0].y1;
        ed[i].flag=0;

    for(i=0;i<n-1;i++)  //check for y1>y2 if not interchange it
    {
        if(ed[i].y1<ed[i].y2)
        {      
        temp=ed[i].x1;
        ed[i].x1=ed[i].x2;      
        ed[i].x2=temp;
        temp=ed[i].y1;
        ed[i].y1=ed[i].y2;      
        ed[i].y2=temp;
        }
    }
    for(i=0;i<n;i++)  //draw polygon
    {  
        line(ed[i].x1,ed[i].y1,ed[i].x2,ed[i].y2);
    }
  
    for(i=0;i<n-1;i++)  //storing the edges as y1,y2,x1
    {
        for(j=0;j<n-1;j++)
        {
            if(ed[j].y1<ed[j+1].y1)
            {      
            temped=ed[j];
            ed[j]=ed[j+1];      
            ed[j+1]=temped;
            }
            if(ed[j].y1==ed[j+1].y1)
            {
                if(ed[j].y2<ed[j+1].y2)
                {      
                    temped=ed[j];
                    ed[j]=ed[j+1];      
                    ed[j+1]=temped;
                }
                if(ed[j].y2==ed[j+1].y2)
                {
                    if(ed[j].x1<ed[j+1].x1)
                    {      
                    temped=ed[j];
                    ed[j]=ed[j+1];      
                    ed[j+1]=temped;
                    }
                }
            }
        }
    }

    for(i=0;i<n;i++)  //calculate 1/slope
    {
        dx=ed[i].x2-ed[i].x1;
        dy=ed[i].y2-ed[i].y1;
        if(dy==0)
            m[i]=0;
        else
            m[i]=dx/dy;
        inter_x[i]=ed[i].x1;

    }
    yy=ymax;
    while(yy>ymin)  //Mark active edges
    {
        for(i=0;i<n;i++)
        {
            if(yy>ed[i].y2 && yy<=ed[i].y1 && ed[i].y1!=ed[i].y2)
                ed[i].flag=1;
            else
                ed[i].flag=0;
        }      
  

    j=0;
    for(i=0;i<n;i++)  //Finding x intersections
    {
        if(ed[i].flag==1)
        {
            if(yy==ed[i].y1)
            {
                x_int[j]=ed[i].x1;
                j++;
                if(ed[i-1].y1==yy&&ed[i-1].y1<yy)
                {
                    x_int[j]=ed[i].x1;
                    j++;
                }
                if(ed[i+1].y1==yy&&ed[i+1].y1<yy)
                {
                    x_int[j]=ed[i].x1;
                    j++;
                }
            }
            else
            {
                x_int[j]=inter_x[i]+(-m[i]);
                inter_x[i]=x_int[j];
                j++;
            }
        }
    }
  
    for(i=0;i<j;i++)  //sorting the x intersections
    {
        for(k=0;k<j-1;k++)
        {
            if(x_int[k]>x_int[k+1])
            {      
            temp=x_int[k];
            x_int[k]=x_int[k+1];      
            x_int[k+1]=temp;
            }
        }
    }

    for(i=0;i<j;i+=2)  //Extracting x values to draw a line
    {
        line(x_int[i],yy,x_int[i+1],yy);
    }
    yy--;
   }  //end of while loop
    delay(3000);
    getch();
    closegraph();
    return 0;
} 

------------------------------------------------------------------------------------------------------
Assignment no: 12
//Aim: Draw a line using OpenGL

#include <GL/glut.h>
#include <math.h>
#include <stdio.h>
const float PI=3.14;

void LineWithDDA(int x0,int y0,int x1,int y1)
{
    glPointSize(2.0);
    glBegin(GL_POINTS);
    glColor3f(0.0,0.0,0.0);

    int dx,dy,steps,i;
    float x,y;
    float xinc,yinc;

    dy=y1-y0;
    dx=x1-x0;
    y=y0;
    x=x0;
    if(abs(dx)>=abs(dy))
    {
        steps=dx;
    }
    else
    {
        steps=dy;
    }
    xinc=(float)dx/steps;
    yinc=(float)dy/steps;
    glVertex2d(x,y);
    for(i=1;i<steps;i++)
    {
        x+=xinc;
        y+=yinc;
        x0=floor(x);
        y0=floor(y);
        glVertex2d(x,y);
    }
    glEnd();
}

void init(void)
{
    glClearColor(1.0,1.0,1.0,0.0);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0,800,0,600,0,600);
}
void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT);
    LineWithDDA(0,0,800,600);
    LineWithDDA(0,600,800,0);
    LineWithDDA(0,300,800,300);
    LineWithDDA(400,0,400,600);
    LineWithDDA(0,150,800,450);
    LineWithDDA(0,450,800,150);
    LineWithDDA(200,0,600,600);
    LineWithDDA(600,0,200,600);
    glutSwapBuffers();
}

int main(int argc, char** argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
    glutInitWindowSize(800,600);
    glutInitWindowPosition(100,100);
    glutCreateWindow("DDA Line Drawing!");
    init();
    glutDisplayFunc(display);
    glutMainLoop();
    return 0;
}

---------------------------------------------------------------------------------------------------------------------------------
#include <GL/glut.h>
#include <math.h>
#include <stdio.h>
const float PI=3.14;
int sign(float arg)
{
    if(arg<0)
    {
        return -1;
    }
    else if(arg==0)
    {
        return 0;
    }
    else
    {
        return 1;
    }
}
void LineWithBrasenham(int x1,int y1,int x2,int y2)
{
    glPointSize(2.0);
    glBegin(GL_POINTS);
    glColor3f(0.0,0.0,0.0);

    int s1,s2,exchange,y,x,i;
    float dx,dy,g,temp;
    dx=abs(x2-x1);
    dy=abs(y2-y1);
    x=x1;
    y=y1;
    s1=sign(x2-x1);
    s2=sign(y2-y1);
    if(dy>dx)
    {
        temp=dx;
        dx=dy;
        dy=temp;
        exchange=1;
    }
    else
    {
        exchange=0;
    }
    g=2*dy-dx;
    i=1;
    while(i<=dx)
    {
        glVertex2d(x,y);
        while(g>=0)
        {
            if(exchange==1)
            {
                x=x+s1;
            }
            else
            {
                y=y+s2;
            }
            g=g-2*dx;
        }
        if(exchange==1)
        {
            y=y+s2;
        }
        else
        {
            x=x+s1;
        }
        g=g+2*dy;
        i++;
    }

    glEnd();
}

void init(void)
{
    glClearColor(1.0,1.0,1.0,0.0);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0,800,0,600,0,600);
}
void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT);
    LineWithBrasenham(100,300,700,300);
    LineWithBrasenham(400,100,400,500);
    glutSwapBuffers();
}

int main(int argc, char** argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
    glutInitWindowSize(800,600);
    glutInitWindowPosition(100,100);
    glutCreateWindow("Brasenham Line Drawing!");
    init();
    glutDisplayFunc(display);
    glutMainLoop();
    return 0;