如何在不使用trig函数的情况下计算连接两个圆的最短线的端点?
答案 0 :(得分:1)
下面解释的原理非常直观 - 我们不是分析二维任务,而是将它分成两个一维操作。确切地说,我们将已知圆心的x和y坐标值分开并分别计算值。我们计算新的x'和y'只知道圆心之间的距离和所述圆的半径与中心之间距离的比例。
(x1 , y1 ), (x2 , y2 ), r1, r2 - known values
(x1', y1'), (x2', y2') - values we are looking for
您需要计算我们正在寻找的值的所有操作如下:
ΔY = y2 - y1
ΔX = x2 - x1
L = √(ΔX² + ΔY²)
r1L = r1 / L
r2L = r2 / L
y1' = y1 + ΔY * r1L
y2' = y2 - ΔY * r2L
x1' = x1 + ΔX * r1L
x2' = x2 - ΔX * r2L
你得到(x1',y1')和(x2',y2')
此计算背后的理论如下......
有两个半径为r1和r2以及中心坐标(x1,y1)和(x2,y2)的圆,我们需要找到该线的点(x1',y1')和(x2',y2')连接两个中心与圆相交。
具有两个圆(x1,y1)和(x2,y2)的中心,我们计算ΔX和ΔY,稍后将使用两次。
ΔY = y2 - y1 It is worth noting here that Δ can
ΔX = x2 - x1 be negative if x1 > x2 or y1 > y2
首先使用毕达哥拉斯定理计算中心之间的距离:
L = √(ΔX² + ΔY²)
第二次使用半径与L的比率(整条线的长度)计算偏移量。
现在看下面的图,我们看到我们有一个梯形,其中一条边是y轴,另一条是连接圆的中心的线。
我们知道第一个圆半径是r1,中心之间的长度是L. 我们还知道,基线分裂梯形的线路并列以相同的比率分割其边。 因为我们知道距离L和半径r1,所以我们可以计算比率。
r1L = r1 / L
现在我们可以使用这个比率得到点(0,y2')。
y1' = y1 + ΔY * r1L
所以现在我们得到了(x1',y1')坐标的y分量。我们与y2'类似。
r2L = r2 / L
y2' = y2 - ΔY * r2L
为了获得x1'和x2',我们使用x轴形成另一个梯形,并且类似地重复上面所示的步骤。
x1' = x1 + ΔX * r1L
x2' = x2 - ΔX * r2L
结果我们得到了新的端点(x1',y1')和(x2',y2')。
必须注意,x1'和y1'值是通过将它们相加来计算的,但x2'和y2'值是通过从它们中减去来计算的。之所以如此,是因为我们最初假设({1,y1)更接近中心坐标(0,0),即x1 < x2
和y1 < y2
,ΔY = y2 - y1
和ΔX = x2 - x1
答案 1 :(得分:1)
想象一下两个圆圈中心之间的一条线。找到该线与圆相交的点。你的界限在这两点之间。
调用两个圆圈(x1,y1)和(x2,y2)的中心。
ΔY = y2-y1 \___ for the whole line (blue-red-blue)
ΔX = x2-x1 /
圆心之间的直线长度为:
L = √(ΔX² + ΔY²)
使用每个圆的半径r,您可以计算从蓝线的中心到另一端的Δy和Δx:
Δx = r/L ΔX
Δy = r/L ΔY
所以这些点是(x1 +Δx,y1 +Δy),对于其他蓝线也是如此。 现在你有了红线的两个端点。
现在,在每一端你需要一条线(蓝色部分),其长度等于相关圆的半径。此时你可以忘记圈子了!