如何在没有三角函数的情况下绘制连接两个圆轮廓的线?
How to draw a line that connects two circle outlines without trig functions?
如何在不使用三角函数的情况下计算连接两个圆的最短线的端点?
下面解释的原理非常直观 - 我们不是分析 two-dimensional 任务,而是将其分为两个 one-dimensional 操作。准确地说,我们将已知圆心的 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' 的值是通过从它们中减去计算的。之所以如此,是因为我们最初假设(x1, y1)更接近中心坐标(0, 0),即x1 < x2
和y1 < y2
,在ΔY = y2 - y1
和ΔX = x2 - x1
.
想象一下,在两个圆的中心之间有一条线。找到该线与圆相交的点。你的线在这两点之间。
调用两个圆的圆心(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) 并且对于另一条蓝线也是如此。
现在你有了红线的两个端点。
现在,在每一端都需要一条线(蓝色部分),其长度等于相关圆的半径。这时候你可以忘掉圆圈了!
如何在不使用三角函数的情况下计算连接两个圆的最短线的端点?
下面解释的原理非常直观 - 我们不是分析 two-dimensional 任务,而是将其分为两个 one-dimensional 操作。准确地说,我们将已知圆心的 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' 的值是通过从它们中减去计算的。之所以如此,是因为我们最初假设(x1, y1)更接近中心坐标(0, 0),即x1 < x2
和y1 < y2
,在ΔY = y2 - y1
和ΔX = x2 - x1
.
想象一下,在两个圆的中心之间有一条线。找到该线与圆相交的点。你的线在这两点之间。
调用两个圆的圆心(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) 并且对于另一条蓝线也是如此。 现在你有了红线的两个端点。
现在,在每一端都需要一条线(蓝色部分),其长度等于相关圆的半径。这时候你可以忘掉圆圈了!