在搜索代码以计算3分之内的圆时,将我引向此代码:
Transactions
基于Stackoverflow和Dr.Math。该代码可以完美运行,但是我不明白该代码如何适合Dr.Math给出的解释。
任何人都可以帮助我理解代码为什么起作用以及在变量中实现了哪些子步骤吗?
答案 0 :(得分:1)
您看到的代码是“数学博士”页面中描述的过程的“简化”简明公式。
让我们逐步介绍它。
为简单起见并遵循数学符号,让为三角形上的点。 [b是点1,c是点2,而d是点3]
对于这样的三角形,面积定义为:
函数中的变量det
等于2 *三角形的面积。
if abs(det) < 1.0e-10:
正在检查共线性。如果面积接近零,则给出的点是共线的,即它们是单行上的点。
找到穿过点b,c和c,d的直线L1,L2的斜率
找到线 L3 , L4 的方程,它们是线s L1 和 L2的垂直平分线。
找到线 L3 和 L4 的交点,该线不过是线圈的中心。
进行所有替换,您可以看到全部合并。
答案 1 :(得分:0)
这不是一个真正的答案,我在这里展示了一种替代方法。
让p
,q
,r
为三点。我们对其进行翻译,以使p
成为起源。通常是q-= p
,r-= p
。
现在,一个点的原点方程是
2.xc.x + 2.yc.y = x² + y²
其中xc
,yc
是中心的坐标。
插入p
,q
的坐标,我们得到一个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