求三角形外接圆圆心。判断点到圆心的距离,即该点是否在圆内或外。
求外接圆圆心
void circle_center(Point center,Point pt[3],double &radiu) //参数是圆心和半径的引用
{
double x1,x2,x3,y1,y2,y3;
double x = 0;
double y = 0;
x1 = pt[0].x;
x2 = pt[1].x;
x3 = pt[2].x;
y1 = pt[0].y;
y2 = pt[1].y;
y3 = pt[2].y;
x=((y2-y1)*(y3*y3-y1*y1+x3*x3-x1*x1)-(y3-y1)*(y2*y2-y1*y1+x2*x2-x1*x1))/(2*(x3-x1)*(y2-y1)-2*((x2-x1)*(y3-y1)));
y=((x2-x1)*(x3*x3-x1*x1+y3*y3-y1*y1)-(x3-x1)*(x2*x2-x1*x1+y2*y2-y1*y1))/(2*(y3-y1)*(x2-x1)-2*((y2-y1)*(x3-x1)));
center.x = x ;
center.y = y ;
radiu = sqrt((pt[0].x - x)*(pt[0].x - x) + (pt[0].y - y)*(pt[0].y - y));
}
求两点间距离
double getDis(Point a, Point b)
{
return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
}
判断是否为钝角
bool judgeDunJiao(Point pt[3], Point center, double &r)
{
double c = getDis(pt[0], pt[1]);
double b = getDis(pt[0], pt[2]);
double a = getDis(pt[1], pt[2]);
if(a * a > b * b + c * c)
{
center.x = (pt[1].x + pt[2].x) / 2.0;
center.y = (pt[1].y + pt[2].y) / 2.0;
r = a / 2.0;
return true;
}
else if(b * b > a * a + c * c)
{
center.x = (pt[0].x + pt[2].x) / 2.0;
center.y = (pt[0].y + pt[2].y) / 2.0;
r = a / 2.0;
return true;
}
else if(c * c > a * a + b * b)
{
center.x = (pt[1].x + pt[0].x) / 2.0;
center.y = (pt[1].y + pt[0].y) / 2.0;
r = a / 2.0;
return true;
}
else
return false;
}