题意:给出 4 个点,问第4个点是否在前三个点形成的外接圆外。
tags: 会有精度问题,上 java 。。
1】公式
已知三点坐标,求外接圆圆心坐标与半径。
//已知三点坐标,求外接圆圆心坐标与半径。 x=((y2-y1)*(y3*y3-y1*y1+x3*x3-x1*x1)-(y3-y1)*(y2*y2-y1*y1+x2*x2-x1*x1))/(2.0*((x3-x1)*(y2-y1)-(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.0*((y3-y1)*(x2-x1)-(y2-y1)*(x3-x1))); r^2=(x1-a)*(x1-a)+(y1-b)*(y1-b);
2】函数
//三点找一圆 Circle findCircle2(P p1, P p2, P p3) { double A1, A2, B1, B2, C1, C2, temp; A1 = p1.x - p2.x; B1 = p1.y - p2.y; C1 = (p1.x*p1.x - p2.x*p2.x + p1.y*p1.y - p2.y*p2.y) / 2; A2 = p3.x - p2.x; B2 = p3.y - p2.y; C2 = (p3.x*p3.x - p2.x*p2.x + p3.y*p3.y - p2.y*p2.y) / 2; temp = A1*B2 - A2*B1; Circle CD; CD.center.x = (C1*B2 - C2*B1) / temp; CD.center.y = (A1*C2 - A2*C1) / temp; CD.radius = sqrtf((CD.center.x - p1.x)*(CD.center.x - p1.x) + (CD.center.y - p1.y)*(CD.center.y - p1.y)); return CD; }