Friday, December 4, 2009

Clip And Rotate A Star*

#include
#include
#include
#include
#include
#define round(a)((int)(a+0.5))
#define pi 3.1428
int xclip=100,x[20],y[20],n,color=0;float a[3][3];b[3],c[3];
void ddaline(int x1,int y1,int x2,int y2,int col)
{ int dx,dy,steps,k;
float x,y,xinc,yinc;
dx=x2-x1;
dy=y2-y1;
if(abs(dx)>abs(dy))
steps=abs(dx);
else
steps=abs(dy);
xinc=(float) dx/steps;
yinc=(float) dy/steps;
x=x1;y=y1;
for(k=0;k { putpixel(round(x),round(y),col);
x+=xinc;
y+=yinc;
}
}
//==================
void mulmat()
{ int k,j;


for (j=0;j<3;j++)
{ c[j]=0;
for(k=0;k<3;k++)
{ c[j]+=a[j][k]*b[k];
}
}
}

// **************************
void rotate()
{ float ang=-90;int i,j;
for(i=0;i<3;i++)
{ for(j=0;j<3;j++)
{ a[i][j]=0;
}
}
ang=(ang*pi/180);
a[0][0]=cos(ang);
a[0][1]=-sin(ang);
a[0][2]=100*(1-cos(ang))+150*sin(ang);
a[1][0]=sin(ang);
a[1][1]=cos(ang);
a[1][2]=150*(1-cos(ang))-100*sin(ang);
for(i=0;i { b[0]=x[i];b[1]=y[i];b[2]=1;
mulmat();
x[i]=c[0];y[i]=c[1];
}
x[i]=x[0];y[i]=y[0];
cleardevice();

for(i=0,color=1;i { ddaline(round(x[i]),round(y[i]),
round(x[i+1]),round(y[i+1]),i+1);
}
}


void clip()
{
int u[20],v[20],i=0,j=0;
float m,c;
for(i=0;i
{ //printf("\n left clip");
if(x[i] else if(x[i]>=xclip && x[i+1]>=xclip)
{ u[j]=x[i];v[j++]=y[i];
}
else
{ m=(float)(y[i+1]-y[i])/(x[i+1]-x[i]);
c=(float)(y[i]-m*x[i]);
if(x[i]>xclip)
{ u[j]=x[i];
v[j++]=y[i];
}
u[j]=xclip;
v[j++]=(int)(m*xclip+c);

}//end of else
}//end of for
ddaline(xclip,0,xclip,400,WHITE);
for(i=0;i { x[i]=u[i];
y[i]=v[i];
}
x[j]=x[0];
y[j]=y[0];
cleardevice();
ddaline(xclip,0,xclip,400,WHITE);
color+=2;
for(i=0,color=1;i {
ddaline(x[i],y[i],x[i+1],y[i+1],color);
}
getch();
}
void main()
{ int gd,gm;
detectgraph(&gd,&gm);
int i=0;
initgraph(&gd,&gm,"..\\bgi");
n=8;
x[0]=50;
x[1]=100;
x[2]= 125;
x[3]=150;
x[4]=200;
x[5]=150;
x[6]=125;
x[7]=100 ;
x[8]=50;
y[0]=175;
y[1]=200;
y[2]= 250;
y[3]=200;
y[4]=175;
y[5]=150;
y[6]=100;
y[7]=150;
y[8]=175;
for(i=0,color=1;i {
ddaline(x[i],y[i],x[i+1],y[i+1],color);
}
ddaline(xclip,0,xclip,400,WHITE);
printf("\n press enter to clip");
getch();
clip();
printf("\n press enter to rotate");
getch();
rotate();
ddaline(xclip,0,xclip,400,WHITE);
printf("\n press enter to clip");
getch();
clip();
getch();
cleardevice();
printf("\n final figure");
for(i=0,color=1;i {
ddaline(x[i],y[i],x[i+1],y[i+1],color);
}
getch();
}

No comments:

Post a Comment