public void FitCircleFromThreePoints(double Points1X, double Points1Y, double Points2X, double Points2Y, double Points3X, double Points3Y, out double Col, out double Row, out double Rad)
{
try
{
//先判断一下这三个点是否共线,如果共线就不求了。
if ((Points1X - Points2X) / (Points1Y - Points2Y) == (Points2X - Points3X) / (Points2Y - Points3Y))
{
Col = 0;
Row = 0;
Rad = 0;
return ;
}
//求圆形
double x1, y1, x2, y2, x3, y3;
double a, b, c, g, h, f;
x1 = Points1X;
y1 = Points1Y;
x2 = Points2X;
y2 = Points2Y;
x3 = Points3X;
y3 = Points3Y;
h = 2 * (x2 - x1);
f = 2 * (y2 - y1);
g = x2 * x2 - x1 * x1 + y2 * y2 - y1 * y1;
a = 2 * (x3 - x2);
b = 2 * (y3 - y2);
c = x3 * x3 - x2 * x2 + y3 * y3 - y2 * y2;
Col = (g * b - c * f) / (h * b - a * f);
Row = (a * g - c * h) / (a * f - b * h);
Rad = Math.Sqrt((Col - x1) * (Col - x1) + (Row - y1) * (Row - y1));
}
catch
{
Col = 0;
Row = 0;
Rad = 0;
}
}
C#已知三个点,求圆心和半径
最新推荐文章于 2023-06-10 09:50:15 发布