> Online tutorial

WINDOWING TO VIEWPORT MAPPING




WINDOWING TO VIEWPORT MAPPING

#include<stdio.h>
#include<conio.h>
#include<graphics.h>
#include<math.h>
main()
  {
                    float sx,sy;
                    int w1,w2,w3,w4,x1,x2,x3,x4,y1,y2,y3,y4,v1,v2,v3,v4;
                    int gd=DETECT,gm;
                    initgraph(&gd,&gm,"c:\\tc\\bgi");
                    printf("Enter The Coordinate x1,y1,x2,y2,x3,y3\n");
                    scanf("%d%d%d%d%d%d",&x1,&y1,&x2,&y2,&x3,&y3);
                    cleardevice();
                    w1=5;
                    w2=5;
                    w3=635;
                    w4=465;
                    rectangle(w1,w2,w3,w4);
                    line(x1,y1,x2,y2);
                    line(x2,y2,x3,y3);
                    line(x3,y3,x1,y1);
                    getch();
                    v1=425;
                    v2=75;
                    v3=550;
                    v4=250;
                    sx=(float)(v3-v1)/(w3-w1);
                    sy=(float)(v4-v2)/(w4-w2);
                    rectangle(v1,v2,v3,v4);
                    x1=v1+floor(((float)(x1-w1)*sx)+.5);
                    x2=v1+floor(((float)(x2-w1)*sx)+.5);
                    x3=v1+floor(((float)(x3-w1)*sx)+.5);
                    y1=v2+floor(((float)(y1-w2)*sy)+.5);
                    y2=v2+floor(((float)(y2-w2)*sy)+.5);
                    y3=v2+floor(((float)(y3-w2)*sy)+.5);
                    line(x1,y1,x2,y2);
                    line(x2,y2,x3,y3);
                    line(x3,y3,x1,y1);
                    getch();
                    return 0;
 }



OUTPUT

Enter The Coordinate x1,y1,x2,y2,x3,y3

100
200
300
400
500
350





 





















































 









         
        





















COHEN-SUTHERLAND 2D LINE CLIPPING


#include<stdio.h>
#include<conio.h>
#include<graphics.h>
#include<math.h>
float cxl,cxr,cyt,cyb;
code(float ,float);
void clip(float ,float,float,float);
void  rect(float ,float,float,float);
 main()
    {
                    float x1,y1,x2,y2;
                    int g=0,d;
                    initgraph(&g,&d,"c:\\tc\\bin");
                    settextstyle(1,0,1);
                    outtextxy(40,15,"BEFORE CLIPPING");
                    printf("\n Please Enter Left,Bottom,Right,Top Of Clip Window");
                    scanf("%f%f%f%f",&cxl,&cyb,&cxr,&cyt);
rect(cxl,cyb,cxr,cyt);
                    getch();
printf("\n Enter  The Line Coordinate");
                    scanf("%f%f%f%f",&x1,&y1,&x2,&y2);
line(x1,y1,x2,y2);
                    getch();
                    cleardevice();
                    settextstyle(1,0,1);
                    outtextxy(40,15,"AFTER CLIPPING");
                    clip(x1,y1,x2,y2);
                    getch();
                    closegraph();
   }

void clip(float x1,float y1,float x2,float y2)
 {
                    int c,c1,c2;
                    float x,y;
                    c1=code(x1,y1);
                    c2=code(x2,y2);
                    getch();
         


                    while((c1!=0)||(c2!=0))
                     {
                             if((c1&c2)!=0)
                             goto out;
                             c=c1;
                              if(c==0)
                                       c=c2;
                             if((c&1)==1)
                                {
                                       y=y1+(y2-y1)*(cxl-x1);
                                       x=cxl;
                               }
                             else
                             if((c&2)==2)
                               {
                                       y=y1+(y2-y1)*(cxl-x1)/(x2-x1);
                                       x=cxr;
                                }
                             else
                             if((c&8)==8)
                                {
                                       x=x1+(x2-x1)*(cyb-y1)/(y2-y1);
                                       y=cyb;
                              }
                             else
                             if((c&4)==4)
                              {
                                       x=x1+(x2-x1)*(cyt-y1)/(y2-y1);
                                       y=cyt;
                               }
                            if(c==c1)
                             {
                                       x1=x;
                                       y1=y;
                                       c1=code(x,y);
                             }
                             else
                             {
                                       x2=x;
                                       y2=y;
                                       c2=code(x,y);
                             }
                     }
                   



out:
                              rect(cxl,cyb,cxr,cyt);
                             line(x1,y1,x2,y2);
    }

code(float x ,float y)
 {
                    int c=0;
                    if(x<cxl)                          c=1;
                    else
                              if(x>cxr)               c=2;
                    else
                              if(y<cyb)               c=c|8;
                    else
                              if(y>cyt)               c=c|4;
                    return c;
}


void rect(float xl,float yb,float xr,float yt)
  {
                    line(xl,yb,xr,yb);
                    line(xr,yb,xr,yt);
                    line(xr,yt,xl,yt);
                    line(xl,yt,xl,yb);
 }


















OUTPUT


BEFORE CLIPPING


Please Enter Left , Bottom , Right , Top Of The Clip window

200
200
400
400
         

Please Enter The Line Coordinates (X1, Y1, X2, Y2)

150
300
400
450





 






















AFTER CLIPPING







 

dda line drawing algorithm in c

DDA Line drawing Algorithm

The digital differential analyzer (DDA)  is a scan-conversion line algorithm. In this algorithm, we sample the line at unit intervals in one coordinate and determine corresponding integer values nearest the line path of the other coordinate and plot those coordinate (pixel) in computer screen. Consider first a line with positive slope. If the slope is less than or equal to 1, we sample at unit x intervals (dx = 1) and computer each successive y value as y(k+1) = y(k) + m. Subscript k takes integer values starting from 1, for the first point, and increases by 1 until the final endpoint is reached. For lines with a positive slope greater than 1, we reverse the roles of x and y.That is, we sample at unit y intervals (dy = 1) and calculate each succeeding x value as x(k+1) = x(k) + (1/m)




Program

#include<stdio.h>
#include<conio.h>
#include<graphics.h>
void DDA(int x1,int y1,int x2,int y2,int col,int del);
void main()
{
int gd=DETECT,gm,x1,x2,y1,y2;
initgraph(&gd,&gm,"");
printf("Enter (x1,y1) and (x2,y2) : ");
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
DDA(x1,y1,x2,y2,14,20);
getch();
closegraph();
}
void DDA(int x1,int y1,int x2,int y2,int col,int del)
{
int dx,dy,s,i,xi,yi,x,y;
x=x1,y=y1;
dx=x2-x1;
dy=y2-y1;
if(dx>dy)
s=dx;
else
s=dy;
xi=dx/s;
yi=dy/s;
putpixel(x,y,col);
for(i=0;i<s;i++)

{
x+=xi;
y+=yi;

putpixel(x,y,col);
delay(del);

}
}


Output









bresenham’s ellipse drawing algorithm c program



         
BRESENHAM’S ELLIPSE DRAWING ALGORITHM
#include "stdio.h"
#include "conio.h"
#include "math.h"
#include "graphics.h"
main()
{
                    int gd=DETECT,gm;
                    int xcenter,ycenter,rx,ry;
                    int p,x,y,px,py,rx1,ry1,rx2,ry2;
                    initgraph(&gd,&gm,"c:\\tc\\bgi");
                    printf("Enter The Radius Value:\n");
                    scanf("%d%d",&rx,&ry);
                    printf("Enter The xcenter and ycenter Values:\n");
                    scanf("%d%d",&xcenter,&ycenter);
                    ry1=ry*ry;
                    rx1=rx*rx;
                    ry2=2*ry1;
                    rx2=2*rx1;

/* REGION 1 */

x=0;
                    y=ry;
                    plotpoints(xcenter,ycenter,x,y);
                    p=(ry1-rx1*ry+(0.25*rx1));
                    px=0;
                    py=rx2*y;
                    while(px<py)
                    {
                              x=x+1;
                             px=px+ry2;
                             if(p>=0)
                                       y=y-1;
                                       py=py-rx2;


                               if(p<0)
                                       p=p+ry1+px;
                              else
                                        p=p+ry1+px-py;
                    plotpoints(xcenter,ycenter,x,y);

/* REGION 2*/
                  
p=(ry1*(x+0.5)*(x+0.5)+rx1*(y-1)*(y-1)-rx1*ry1);
                   while(y>0)
                   {
                             y=y-1;
                             py=py-rx2;
                              if(p<=0)
                             {
                                       x=x+1;
                                       px=px+ry2;
                              }
                              if(p>0)
                                       p=p+rx1-py;
                             else
                                      p=p+rx1-py+px;
                     plotpoints(xcenter,ycenter,x,y);
                   }
               }
                    getch();
                    return(0);
            }

int plotpoints(int xcenter,int ycenter,int x,int y)
{
                    putpixel(xcenter+x,ycenter+y,6);
                    putpixel(xcenter-x,ycenter+y,6);
                    putpixel(xcenter+x,ycenter-y,6);
                    putpixel(xcenter-x,ycenter-y,6);

}




OUTPUT


Enter The Radius Value(Rx,Ry)           :     10      30
                   

Enter The xcenter and ycenter Values  :     300    150























         
RESULT:


Buy it