给定3点计算圆(代码说明)

时间:2018-10-25 13:09:19

标签: python math 2d geometry

在搜索代码以计算3分之内的圆时,将我引向此代码:

Transactions

基于StackoverflowDr.Math。该代码可以完美运行,但是我不明白该代码如何适合Dr.Math给出的解释。

任何人都可以帮助我理解代码为什么起作用以及在变量中实现了哪些子步骤吗?

2 个答案:

答案 0 :(得分:1)

您看到的代码是“数学博士”页面中描述的过程的“简化”简明公式。

让我们逐步介绍它。

  1. 为简单起见并遵循数学符号,让points为三角形上的点。 [b是点1,c是点2,而d是点3]

  2. 对于这样的三角形,面积定义为:

    area

    函数中的变量det等于2 *三角形的面积。

    if abs(det) < 1.0e-10:正在检查共线性。如果面积接近零,则给出的点是共线的,即它们是单行上的点。

  3. 找到穿过点b,c和c,d的直线L1,L2的斜率

    slope

  4. 找到线 L3 L4 的方程,它们是线s L1 L2的垂直平分线bisectors1 bisectors2

  5. 找到线 L3 L4 的交点,该线不过是线圈的中心。

    intersection

进行所有替换,您可以看到全部合并。

  1. 通过找到中心与三个点之一之间的欧式距离来计算圆的半径。

答案 1 :(得分:0)

这不是一个真正的答案,我在这里展示了一种替代方法。

pqr为三点。我们对其进行翻译,以使p成为起源。通常是q-= pr-= p

现在,一个点的原点方程是

2.xc.x + 2.yc.y = x² + y²

其中xcyc是中心的坐标。

插入pq的坐标,我们得到一个2x2系统

xc.xp + yc.yp = xp² + yp²
xc.xq + yc.yq = xq² + yq²

实现此目标的代码如下

# Translate to the origin
xq-= xp
yq-= yp
q2= xp * xp + yp * yp
xr-= xq
yr-= yq
r2= xr * xr + yr * yr

# Solve for the center coordinates
d= 2 * (xp * yq - xq * yp)
xc= (p2 * yq - q2 * yp) / d
yc= (p2 * xp - q2 * xq) / d

# Radius
r= math.sqrt(xc * xc + yc * yc)

# Untranslate
xc+= xp
yc+= yp