如何画一条连接两个圆形轮廓而没有三角函数的线?

时间:2016-01-21 18:47:17

标签: drawing line geometry

如何在不使用trig函数的情况下计算连接两个圆的最短线的端点?

Two circles and a line

2 个答案:

答案 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')连接两个中心与圆相交。

Circles and projections onto axes

具有两个圆(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轴,另一条是连接圆的中心的线。

First trapezoid

我们知道第一个圆半径是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轴形成另一个梯形,并且类似地重复上面所示的步骤。

Second trapezoid

x1' = x1 + ΔX * r1L 
x2' = x2 - ΔX * r2L 

结果我们得到了新的端点(x1',y1')和(x2',y2')。

必须注意,x1'和y1'值是通过将它们相加来计算的,但x2'和y2'值是通过从它们中减去来计算的。之所以如此,是因为我们最初假设({1,y1)更接近中心坐标(0,0),即x1 < x2y1 < y2ΔY = y2 - y1ΔX = x2 - x1

答案 1 :(得分:1)

想象一下两个圆圈中心之间的一条线。找到该线与圆相交的点。你的界限在这两点之间。

Line between circles

调用两个圆圈(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),对于其他蓝线也是如此。 现在你有了红线的两个端点。

现在,在每一端你需要一条线(蓝色部分),其长度等于相关圆的半径。此时你可以忘记圈子了!