给定初始触摸点,如何计算在其周围包含这些点的圆的半径?

时间:2015-03-12 19:57:22

标签: objective-c core-graphics geometry computational-geometry

我实现了绘制弧线的UIView。我让它使用一个设置框架,但我想拥有它,所以当用户开始绘制弧时,我可以快速计算给定最初触摸点的弧的半径。

假设我收集5个初始点,如何计算该线开始创建的弧的半径?

2 个答案:

答案 0 :(得分:2)

您可以通过三个非共线点构建一个圆。计算三个决定因素的值:

D = |x1  y1  1|
    |x2  y2  1|
    |x3  y3  1|

Dx = |x1^2 + y1^2  y1  1|
     |x2^2 + y2^2  y2  1|
     |x3^2 + y3^2  y3  1|

Dy = |x1^2 + y1^2  x1  1|
     |x2^2 + y2^2  x2  1|
     |x3^2 + y3^2  x3  1|

wiki page处的即用型公式。

例如,D = x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2)和D = 0表示共线点的额外情况(当圆圈不存在时)
圆(圆弧)中心坐标是

Cx = - Dx / (2*D)
Cy =   Dy / (2*D)

圆半径

  R = Sqrt((Cx-x1)^2 + (Cy-y1)^2) 

如果你想使用四个或更多点,这些点可能不在同一个圆弧上,你需要某种圆拟合(example

答案 1 :(得分:0)

对我来说,MBo的答案非常接近,但我不得不扭转Cx和Cy的迹象。 (我的坐标系是OpenGL的坐标系,原点位于左下角)。

Here在那里你可以找到找到圆的中心和半径的方程,给出3个点,以及伪代码。