Friday, December 4, 2009

Circumcircle of a triangle

#include
#include
#include
#include
#include
# define pi 3.142857
# define round(a)((int)(a+0.5))
float xc,yc;
//))))))))))))))))
void ddaline(int x1,int y1,int x2,int y2,int col)
{ int dx,dy,k,steps;
float xinc,yinc,x,y;
dx=x2-x1;dy=y2-y1;
if(abs(dx)>abs(dy))
steps=abs(dx);
else
steps=abs(dy);
xinc=(float)dx/(float)steps;
yinc=(float)dy/(float)steps;
x=x1;y=y1;
for(k=0;k { putpixel(round(x),round(y),col);
x+=xinc;
y+=yinc;
}
}
//)))))))))))))))
void parcir(int xc,int yc,float r,int sang,int eang,int col)
{ int k;
float x,y;

for(k=sang;k { x=xc+r*cos(pi*k/180);
y=yc+r*sin(pi*k/180);
putpixel(round(x),round(y),col);
}
}

void drawcir(int x,int y,float r,int sang)
{ int k=0;
int eang;
eang=sang+120;
while(k!=3)
{
parcir(x,y,r,sang,eang,(k+1));
sang=eang;
eang+=120;
k++;
}
}
//)))))))))))))))))

//888888888888888888888888
void pcircum(int x1,int y1,int x2,int y2,int x3,int y3,int flag)
{ float r;int i=0;
if(flag==1)
{if(y1 { r=sqrt((x3-x1)*(x3-x1)+(y3-y1)*(y3-y1));
r=r/2;
xc=(x1+x3)/2;
yc=(y1+y3)/2;
}
else
{ r=sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2));
r=r/2;
xc=(x2+x3)/2;
yc=(y2+y3)/2;
}
}
if(flag==2)
{if(y1 { r=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
r=r/2;
xc=(x1+x2)/2;
yc=(y1+y2)/2;
}
else
{ r=sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2));
r=r/2;
xc=(x2+x3)/2;
yc=(y2+y3)/2;
}
}
if(flag==3)
{if(y2 { r=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
r=r/2;
xc=(x1+x2)/2;
yc=(y1+y2)/2;
}
else
{ r=sqrt((x3-x1)*(x3-x1)+(y3-y1)*(y3-y1));
r=r/2;
xc=(x1+x3)/2;
yc=(y1+y3)/2;
}
}
while(!kbhit())
{ drawcir(round(xc),round(yc),r,i);
i++;
delay(1);
}
}
//;;;;;;;;;;;;;;;;
float findy(int x1,int y1,int x2,int y2,int xf)
{ float y,m1,c1,midx,midy;
m1=(float)(y1-y2)/(float)(x1-x2);
m1=(float)(-1/m1);
midx=(x1+x2)/2;
midy=(y1+y2)/2;
c1=(float)(midy-m1*midx);
y=(float)(m1*xf+c1);
return y;
}
//000000000000000000000000000
void main()
{ int gd,gm;
detectgraph(&gd,&gm);
int x1,y1,x2,y2,x3,y3,i,flag=0;float r,xf,yf;
int mx1,my1,mx2,my2;
float m1,m2,c1,c2;
initgraph(&gd,&gm,"..\\bgi");
printf("\n enter the co ordinates of the triangle");
scanf("%d",&x1);
scanf("%d",&y1);

printf("\n enter the co ordinates of the triangle");
scanf("%d",&x2);
scanf("%d",&y2);
printf("\n enter the co ordinates of the triangle");
scanf("%d",&x3);
scanf("%d",&y3);
cleardevice();
ddaline(x1,y1,x2,y2,YELLOW);
ddaline(x2,y2,x3,y3,YELLOW);
ddaline(x3,y3,x1,y1,YELLOW);
if(x1==x2)
{pcircum(x1,y1,x2,y2,x3,y3,1);
exit(0);
}
if(x1==x3)
{pcircum(x1,y1,x2,y2,x3,y3,2);
exit(0);
}
if(x2==x3)
{pcircum(x1,y1,x2,y2,x3,y3,3);
exit(0);
}
m1=(float)(y1-y2)/(float)(x1-x2);
m2=(float)(y2-y3)/(float)(x2-x3);
if(m1!=0) m1=(float)(-1/m1);
else
{ xf=(x1+x2)/2;
flag=1;
yf= findy(x1,y1,x3,y3,xf);
r=sqrt((xf-x3)*(xf-x3)+(yf-y3)*(yf-y3));
}
if(m2!=0) m2=(float)(-1/m2);
else
{ xf=(x2+x3)/2;
flag=1;
yf= findy(x1,y1,x2,y2,xf);
r=sqrt((xf-x3)*(xf-x3)+(yf-y3)*(yf-y3));
}
if(!flag)
{
mx1=(x1+x2)/2;
my1=(y1+y2)/2;
c1=(float)(my1-m1*mx1);
mx2=(x2+x3)/2;
my2=(y2+y3)/2;
c2=(float)(my2-m2*mx2);
xc=(float)(c2-c1)/(float)(m1-m2);
yc=(float)(m1*xc+c1);

r=sqrt((xc-x3)*(xc-x3)+(yc-y3)*(yc-y3));
}
i=0;


while(!kbhit())
{ if(flag)
drawcir(round(xf),round(yf),r,i);
else
drawcir(round(xc),round(yc),r,i);
i++;
delay(1);
}
getch();
}

No comments:

Post a Comment