三角形外接圆求法::
Point circumcircleofTriangle(PointSet[])
{
double a,b,c,xa,xb,xc,ya,yb,yc,c1,c2;
Point tem;
a = Distance(PointSet[0],PointSet[1]);
b = Distance(PointSet[0],PointSet[2]);
c = Distance(PointSet[2],PointSet[1]);
r = a *b *c/triangleArea(PointSet[])/4;//triangleArea(PointSet[])为三角形面积
xa = PointSet[0].x; ya = PointSet[0].y;
xb = PointSet[1].x; yb = PointSet[1].y;
xc = PointSet[2].x; yc = PointSet[2].y;
c1 = (xa*xa+ya*ya-xb*xb-yb*yb)/2;
c2 = (xa*xa+ya*ya-xc*xc-yc*yc)/2;
tem.x = (c1 * (ya-yc) - c2 *(ya-yb))/((xa-xb)*(ya-yc)-(xa-xc)*(ya-yb));
tem.y = (c1*(xa - xc)-c2 * (xa - xb))/((ya-yb)*(xa-xc)-(ya-yc)*(xa-xb));
return tem;
//tem为圆心。。
}
三角形内切圆::
Point incircleofTriangle(PointSet[])
{
double a,b,c,xa,xb,xc,ya,yb,yc,c1,c2;
Point tem;
a = Distance(PointSet[0],PointSet[1]);
b = Distance(PointSet[0],PointSet[2]);
c = Distance(PointSet[2],PointSet[1]);
r = 2 * triangeArea(PointSet[])/(a+b+c);
angleA = arccos((b*b+c*c-a*a)/(2*b*c));
angleB = arccos((a*a+c*c-b*b)/(2*a*c));
angleC = arccos((b*b+a*a-c*c)/(2*b*a));
p = sin(angleA/2);
p2 = sin(angleB/2);
P3 = sin(angleC/2);
xa = PointSet[0].x; ya = PointSet[0].y;
xb = PointSet[1].x; yb = PointSet[1].y;
xc = PointSet[2].x; yc = PointSet[2].y;
f1 = ((r/p2)*(r/p2)-(r/p)*(r/p)+xa*xa-xb*xb+ya*ya-yb*yb)/2;
f2 = ((r/p3)*(r/p3)-(r/p)*(r/p)+xa*xa-xc*xc+ya*ya-yc*yc)/2;
tem.x = (f1 * (ya-yc)-f2*(ya-yb))/((xa-xb)*(ya-yc)-(xa-xc)*(ya-yb));
tem.y = (f1*(xa-xc)-f2*(xa-xb))/((ya-yb)*(xa-xc)-(ya-yc)*(xa-xb));
return tem;
}