Showing posts with label Computer Graphics. Show all posts
Showing posts with label Computer Graphics. Show all posts

Mar 18, 2010

Bresenham's line drawing algorithm

//This is Bresenham's line drawing algorithm developed in C language
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
void jayubre(int,int,int,int);
void main(void)
{
int gdriver = DETECT, gmode,x1,y1,x2,y2;
initgraph(&gdriver, &gmode, "..\\bgi");
printf("Enter starting points(x1,y1):\n"),scanf("%d%d",&x1,&y1);
printf("Enter ending points(x2,y2):\n"),scanf("%d%d",&x2,&y2);
jayubre(x1,y1,x2,y2);
getch();
}
void jayubre(int x1,int y1,int x2,int y2)
{
int p0,dy,dx,sx=1,sy=1,xmax, ymax,x,y;
float m;
putpixel(x1,y1,8);
putpixel(x2,y2,8);
if(x1>x2)
sx=-1;
if(y1>y2)
sy=-1;
dx=abs(x2-x1);
dy=abs(y2-y1);
m=dy/dx;
if(m<1)
{
p0=2*dy-dx;
while(x1!=x2)
{
if(p0<0)
{
p0=p0+2*dy;
x1=x1+sx;
y1=y1;
putpixel(x1,y1,4);
}
else if(p0>=0)
{
p0=p0+2*dy-2*dx;
x1=x1+sx;
y1=y1+sy;
putpixel(x1,y1,4);

}
}
}
else
{
p0=2*dx-dy;
while(y1!=y2)
{
if(p0<0)
{
p0=p0+2*dx;
y1=y1+sy;
x1=x1;
putpixel(x1,y1,4);
}
else if(p0>=0)
{
p0=p0+2*dx-2*dy;
y1=y1+sy;
x1=x1+sx;
putpixel(x1,y1,4);
}
}
}
}

Midpoint circle algorithm

// This is Midpoint circle algorithm developed in C language

#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
void jayucircle(int xc,int yc,int r);
void jayuprint(int x,int y,int xc,int yc);
void main()
{
   int xc,yc,p,r,x,y,gdriver = DETECT, gmode, errorcode;
   initgraph(&gdriver, &gmode, "..\\bgi");
   printf("enter value of (x,y,r)"),scanf("%d%d%d",&xc,&yc,&r);
   jayucircle(xc,yc,r);
   getch();
}
void jayucircle(int xc,int yc,int r)
{
int x=0,y=r,p=1-r;
jayuprint(0,r,xc,yc);
while(x<=y)
{
if(p<0)
{
x++;
p+=(2*x)+1;
jayuprint(x,y,xc,yc);
}
else
{
x++;
y--;
p+=(2*x)+1-(2*y);
jayuprint(x,y,xc,yc);
}
}
}
void jayuprint(int x,int y,int xc,int yc)
{
putpixel(xc+x,yc+y,7);
putpixel(xc-x,yc+y,7);
putpixel(xc+x,yc-y,7);
putpixel(xc-x,yc-y,7);
putpixel(yc+y,xc+x,7);
putpixel(yc-y,xc+x,7);
putpixel(yc+y,xc-x,7);
putpixel(yc-y,xc-x,7);
}

2D Modeling: 2D Rotation

// This is 2D Rotation program using C language

#include<stdio.h>
#include<conio.h>
#include<graphics.h>
#include<math.h>
float ans[3][10];
void multi(float tmat[3][3],float coormat[3][10],int size);
void main()
{
float coormat[3][10],x[10],y[10],temp;
int gd=DETECT,gm,no,sx,sy,sum=0,i,j,k,theta;
float tmat[3][3]={{1,0,0},{0,1,0},{0,0,1}};
clrscr();
initgraph(&gd,&gm,"..\\bgi");
printf("enter theta:"),scanf("%d",&theta);
temp=(float)theta*3.14/180;
tmat[0][0]=cos(temp);
tmat[1][1]=cos(temp);
tmat[0][1]=-1*sin(temp);
tmat[1][0]=-1*sin(temp);
printf("Translation matrix is:\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%4.1f\t",tmat[i][j]);
printf("\n");
}
printf("enter no. of vertices:\n"),scanf("%d",&no);
for(i=0;i<no;i++)
printf("enter (x%d,y%d):\n",i+1,i+1),scanf("%f%f",&x[i],&y[i]);
for(i=0;i<no;i++)
coormat[0][i]=x[i];
for(i=0;i<no;i++)
coormat[1][i]=y[i];
for(i=0;i<no;i++)
coormat[2][i]=1;
printf("co ordinate matrix is:\n");
for(i=0;i<3;i++)
{
for(j=0;j<no;j++)
printf("%4.2f\t",coormat[i][j]);
printf("\n");
}
//printing starting line
for(j=0;j<no-1;j++)
line(coormat[0][j],coormat[1][j],coormat[0][j+1],coormat[1][j+1]);
line(coormat[0][0],coormat[1][0],coormat[0][j],coormat[1][j]);
multi(tmat,coormat,no);
printf("answer matrix is:\n");
for(i=0;i<3;i++)
{
for(j=0;j<no;j++)
printf("%4.2f\t",ans[i][j]);
printf("\n");
}

for(j=0;j<no-1;j++)
line(ans[0][j],ans[1][j],ans[0][j+1],ans[1][j+1]);
line(ans[0][0],ans[1][0],ans[0][j],ans[1][j]);

getch();
}
void multi(float tmat[3][3],float coormat[3][10],int no)
{
int i,j,k,sum=0;
for(i=0;i<3;i++)
{
for(j=0;j<no;j++)
{
sum=0;
for(k=0;k<3;k++)
{
sum+=tmat[i][k]*coormat[k][j];
}
ans[i][j]=sum;
}
}
}

2D Modeling: 2D scaling

#include<stdio.h>
#include<conio.h>
#include<graphics.h>
#include<math.h>
float ans[3][10];
void multi(float tmat[3][3],float coormat[3][10],int size);
void main()
{
float coormat[3][10],x[10],y[10];
int gd=DETECT,gm,no,sx,sy,sum=0,i,j,k;
float tmat[3][3]={{1,0,0},{0,1,0},{0,0,1}};
clrscr();
initgraph(&gd,&gm,"..\\bgi");
printf("enter (sx,sy):"),scanf("%d%d",&sx,&sy);
tmat[0][0]=sx;
tmat[1][1]=sy;
printf("Translation matrix is:\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%4.1f\t",tmat[i][j]);
printf("\n");
}
printf("enter no. of vertices:\n"),scanf("%d",&no);
for(i=0;i<no;i++)
printf("enter (x%d,y%d):\n",i+1,i+1),scanf("%f%f",&x[i],&y[i]);
for(i=0;i<no;i++)
coormat[0][i]=x[i];
for(i=0;i<no;i++)
coormat[1][i]=y[i];
for(i=0;i<no;i++)
coormat[2][i]=1;
printf("co ordinate matrix is:\n");
for(i=0;i<3;i++)
{
for(j=0;j<no;j++)
printf("%4.2f\t",coormat[i][j]);
printf("\n");
}
//printing starting line
for(j=0;j<no-1;j++)
line(coormat[0][j],coormat[1][j],coormat[0][j+1],coormat[1][j+1]);
line(coormat[0][0],coormat[1][0],coormat[0][j],coormat[1][j]);
multi(tmat,coormat,no);
printf("answer matrix is:\n");
for(i=0;i<3;i++)
{
for(j=0;j<no;j++)
printf("%4.2f\t",ans[i][j]);
printf("\n");
}

for(j=0;j<no-1;j++)
line(ans[0][j],ans[1][j],ans[0][j+1],ans[1][j+1]);
line(ans[0][0],ans[1][0],ans[0][j],ans[1][j]);

getch();
}
void multi(float tmat[3][3],float coormat[3][10],int no)
{
int i,j,k,sum=0;
for(i=0;i<3;i++)
{
for(j=0;j<no;j++)
{
sum=0;
for(k=0;k<3;k++)
{
sum+=tmat[i][k]*coormat[k][j];
}
ans[i][j]=sum;
}
}
}

2D Modeling: 2D transformation

#include<stdio.h>
#include<conio.h>
#include<graphics.h>
#include<math.h>
float ans[3][10];
void multi(float tmat[3][3],float coormat[3][10],int size);
void main()
{
float coormat[3][10],x[10],y[10];
int gd=DETECT,gm,no,tx,ty,sum=0,i,j,k;
float tmat[3][3]={{1,0,0},{0,1,0},{0,0,1}};
clrscr();
initgraph(&gd,&gm,"..\\bgi");
printf("enter (tx,ty):"),scanf("%d%d",&tx,&ty);
tmat[0][2]=tx;
tmat[1][2]=ty;
printf("Translation matrix is:\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%4.1f\t",tmat[i][j]);
printf("\n");
}
printf("enter no. of vertices:\n"),scanf("%d",&no);
for(i=0;i<no;i++)
printf("enter (x%d,y%d):\n",i+1,i+1),scanf("%f%f",&x[i],&y[i]);
for(i=0;i<no;i++)
coormat[0][i]=x[i];
for(i=0;i<no;i++)
coormat[1][i]=y[i];
for(i=0;i<no;i++)
coormat[2][i]=1;
printf("co ordinate matrix is:\n");
for(i=0;i<3;i++)
{
for(j=0;j<no;j++)
printf("%4.2f\t",coormat[i][j]);
printf("\n");
}
//printing starting line
for(j=0;j<no-1;j++)
line(coormat[0][j],coormat[1][j],coormat[0][j+1],coormat[1][j+1]);
line(coormat[0][0],coormat[1][0],coormat[0][j],coormat[1][j]);
multi(tmat,coormat,no);
printf("answer matrix is:\n");
for(i=0;i<3;i++)
{
for(j=0;j<no;j++)
printf("%4.2f\t",ans[i][j]);
printf("\n");
}

for(j=0;j<no-1;j++)
line(ans[0][j],ans[1][j],ans[0][j+1],ans[1][j+1]);
line(ans[0][0],ans[1][0],ans[0][j],ans[1][j]);

getch();
}
void multi(float tmat[3][3],float coormat[3][10],int no)
{
int i,j,k,sum=0;
for(i=0;i<3;i++)
{
for(j=0;j<no;j++)
{
sum=0;
for(k=0;k<3;k++)
{
sum+=tmat[i][k]*coormat[k][j];
}
ans[i][j]=sum;
}
}
}

Midpoint ellipse algorithm

//This is Midpoint ellipse algorithm developed using C language

#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include<math.h>
void jayuellipse(int x,int y,int rx,int ry);
void print(int,int,int,int);
void main()
{
int xc,yc,p,r,rx,ry,gdriver = DETECT, gmode;
initgraph(&gdriver, &gmode, "..\\bgi");
printf("enter values of (x,y,xrad,yrad)"),scanf("%d%d%d%d",&xc,&yc,&rx,&ry);
jayuellipse(xc,yc,rx,ry);
getch();
}
void jayuellipse(int xc,int yc,int rx,int ry)
{
long int p,p2,x,y,dx,dy,ry2,rx2,rx2ry,hfrx2,_2ry2x,_2rx2y;
float x5;
//initialization of values
x=0;
y=ry;
ry2=ry*ry;
rx2=rx*rx;
rx2ry=rx*rx*ry;
hfrx2=.25*rx*rx;
p=ry2-rx2ry+hfrx2;
_2ry2x=2*ry*ry*x;
_2rx2y=2*rx*rx*y;
dx=_2ry2x;
dy=_2rx2y;
//calculation for region 1
while(dx<dy)
{
print(x,y,xc,yc);
if(p<0)
{
x++;
dx+=2*ry2;
p+=dx+ry2;
}
else if(p>=0)
{
x++;
y--;
dx+=2*ry2;
dy-=2*rx2;
p+=dx+ry2-dy;
}
}
//end of region 1
 x5=x+.5;
p2=(ry2*x5*x5)+(rx2*(y-1)*(y-1))-(rx2*ry2);
//calculation for region 2
while(y>=0)
{
print(x,y,xc,yc);
if(p2>0)
{
y--;
dx+=-(2*rx2);
p2+=rx2-(dx);
}
else
{
x++;y--;
dx+=-(2*rx2);
dy+=2*ry2;
p2+=rx2-(dx)+(dy);
}
}
}
void print(int x,int y,int xc,int yc)
{
putpixel(x+xc,y+yc,7);
putpixel(x+xc,-y+yc,7);
putpixel(-x+xc,y+yc,7);
putpixel(-x+xc,-y+yc,7);
}

Feb 20, 2010

Polygon Drawing

//This program is to draw polygon using C

#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include<iostream.h>
#include<math.h>
void line(float x1,float y1,float x2,float y2);
void main()
{
   int gdriver = DETECT, gmode,i,no;
   float x[100],y[100];
   initgraph(&gdriver, &gmode, "..\\bgi");
   cout<<"how many sides you want";
   cin>>no;
   for(i=0;i<no;i++)
   {
   cout<<"enter x"<<i+1;
   cin>>x[i];
   cout<<"enter y"<<i+1;
   cin>>y[i];
   }
   x[no]=x[0];
   y[no]=y[0];
   for(i=0;i<no;i++)
   {
   line(x[i],y[i],x[i+1],y[i+1]);
   }
   getch();
}
   void line(float x1,float y1,float x2,float y2)
   {
   int i;
   float sign,dx,dy;
   if(abs(x2-x1)>abs(y2-y1))
   sign=abs(x2-x1);
   else
   sign=abs(y2-y1);
   dx=x2-x1;
   dy=y2-y1;
   for(i=0;i<=sign;i++)
   {
   putpixel(x1,y1,15);
   x1+=dx/sign;
   y1+=dy/sign;
   }
   }

DDA Line drawing algorithm

// This is Digital differential analyzer(DDA) line drawing algorithm using C

#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include<math.h>
void jayudda(float,float,float,float);
void main()
{
   int gdriver = DETECT, gmode;
   float x1,y1,x2,y2;
   initgraph(&gdriver, &gmode, "..\\bgi");
   printf("enter starting points(x1,y1):"),scanf("%f%f",&x1,&y1);
   printf("enter ending points(x2,y2):"),scanf("%f%f",&x2,&y2);
   jayudda(x1,y1,x2,y2);
   getch();
}
void jayudda(float x1,float y1,float x2,float y2)
{
int i;
float sign;
if(abs(x2-x1)>abs(y2-y1))
   sign=abs(x2-x1);
   else
   sign=abs(y2-y1);
   for(i=0;i<=sign;i++)
   {
   putpixel(x1,y1,7);
   x1+=(x2-x1)/sign;
   y1+=(y2-y1)/sign;
   }
}