我正在尝试借助此链接找到 Circle 的相交点。
以下注释描述了如何在平面上找到两个圆之间的交点,使用以下符号。目的是找到两个点 P3 = (x3, y3)(如果存在)。
首先计算圆心之间的距离d。d = ||P1 - P0||。
如果 d > r0 + r1 则没有解,圆圈是分开的。如果 d < |r0 - r1| 那么没有解决方案,因为一个圆圈包含在另一个圆圈中。如果 d = 0 且 r0 = r1 则圆是重合的,并且有无数个解。考虑两个三角形 P0P2P3 和 P1P2P3 我们可以写
a2 + h2 = r02 和 b2 + h2 = r12
使用 d = a + b 我们可以求解 a,
a = (r02 - r12 + d2 ) / (2 d)
可以很容易地证明,当两个圆在一个点接触时,这会减少到 r0,即: d = r0 + r1 通过将 a 代入第一个方程来求解 h,h2 = r02 - a2 所以
P2 = P0 + a ( P1 - P0 ) / d
最后,根据 P0 = (x0,y0)、P1 = (x1,y1) 和 P2 = (x2,y2),P3 = (x3,y3) 是
x3 = x2 +- h ( y1 - y0 ) / d
y3 = y2 -+ h ( x1 - x0 ) / d http://paulbourke.net/geometry/2circle/
b:=CircleMorph new.
b center: 60@60.
b openInWorld.
b1:=CircleMorph new.
b center: 100@100.
b1 openInWorld.
d:= b1 center - b center. // distance between 2 circles
r1:= (((b center x abs)squared +(b center y abs)squared)sqrt).
r2:= (((b1 center x abs)squared +(b1 center y abs)squared)sqrt).
r3:= r1+ r2.
(d) > (r3) ifTrue:[Transcript show:'Circles are seprate';cr]
当我将距离与 2 个圆的半径之和进行比较时,得到的距离小于两个圆的半径,我知道这是不正确的,当圆是分开的时,我是否正确地计算了半径,我知道这个帮助有一些问题。