關於兩圓的公切線計算我們首先需要搞清楚的是兩個圓之間有哪些位置關係,兩個圓的位置包括內含、內切、外切、外離幾種方式,可以看出位置關係可以根據「兩圓心之間的距離」與「兩圓半徑和」以及「兩圓半徑差」之間的關係判斷。
假設大圓半徑為r,小圓半徑為 r, 把「兩圓心之間的距離」表示為d, 「兩圓半徑和」表示為s, 「兩圓半徑差」表示為x,那麼:
d = |r + r|;
x = |r - r|;
可以得出各位置關係必須滿足以下相應條件:
內含: d > 0 && d < x
內切: d > 0 && d = x
外切: d = s
外離: d > s
從圖中我們也可以看出不同位置關係的公切線分布情況
內切位置的公切線比較容易求解,而外切、外離位置情況下公切線求解是相對複雜的,這次主要分析如何求出處於外離位置關係的兩圓之間的公切線。
首先,我們先分析如何求解外公切線;
如圖所示(1.以下角度均是用弧度值表示;2. 為了方便,假設有p、q兩點, 則兩點之間的朝向暫用hpq表示 ):
cosα =|pa| / |pq| = (|pb| - |ab|) / |pq| = (|r-r|) / d -> α = acos ( (|r-r|) / d )
hpq = atan( (y1-y0)/(x1-x0) )
hpb = hpq + α 同理 hpc = hpq - α
hbe = hpb - pi/2
hcd = hpc + pi/2
若兩條切線的斜率分別用k1、k2表示, 那麼
k1 = tan(hbe); k2 = tan(hcd)
通過距離和朝向我們可以計算出距離直線某點的另乙個點, 從而求出切點,比如b(x3, y3)和e(x4, y4)這兩個點,
x3 = x0 + r * cos(hpb)
y3 = y0 + r * sin(hpb)
x4 = x1 + r * cos(hpb)
y4 = y1 + r * sin(hpb)
同理我們可以去求點c和d
最後,知道斜率以及直線上的任意乙個點就可以求出直線方程了;
下邊再來分析如何求解兩條交叉公切線:
如圖,求解交叉公切線主要利用對角三角形對應邊成比例的思想求出邊l,然後就和上邊求外公切線一樣,求出α的值就可以順利求出切線方程
假設|pq|長度為d, 那麼 l / (d-l) = r / r -> l = dr / (r +r)
cosα = |pa| / l = r / l =(r + r) / d -> α = acos( (r+r) / d )
hpq = atan( (y1-y0)/(x1-x0) )
hpa = hpq + α 同理 hpb = hpq - α
had = hpa - pi/2
hbc = hpb + pi/2
若兩條切線的斜率分別用k1、k2表示, 那麼
k1 = tan(had); k2 = tan(hbc)
通過距離和朝向我們可以計算出距離直線某點的另乙個點, 從而求出切點,比如a(x2, y2)和d(x3, y3)這兩個點,
x2 = x0 + r * cos(hpa)
y2 = y0 + r * sin(hpa)
x3 = x1 + r * cos(hpa + pi)
y3 = y1 + r * sin(hpa + pi)
同理我們可以去求點b和c
最後,知道斜率以及直線上的任意乙個點就可以求出直線方程了;
以上就是我求相離位置關係的兩圓公切線的基本思路,因為不是很方便表示,可能有的地方不是很清楚,敬請見諒,僅供參考。
兩個圓公切線求法 兩個圓的公切線
兩個圓的公切線 圓上任意一點擁有唯一的圓心角 struct circle 的極角進行旋轉即可求出切點,進而得到切線 情況 5 的內切線類似情況2 情況 6 的外公切線與情況4完全一樣 情況 6 的內切線也是先求出圓心角 alpha 如何求?cos alpha frac a i 存放第 i 條公切線與...
tzc3109 兩圓外公切線之交
方法 計算幾何 思想 當兩個圓的半徑相同或者兩圓關係為內含時不存在外公切線交點。當存在外公切線交點時,由於知道兩半徑,而外公切線與兩圓心夠成的直線 及圓心與切點的連線所夠成的圖形中,得到交點到兩圓圓心的向量之比 等於半徑之比,從而 x o1.x,y o1.y k x o2.x,y o2.y 可惜這向...
求兩個圓公切線的模板
a i 和 b i 存放第 i 條公切線與 圓a 和 園b 的交點 返回值為切線的條數 如果沒有切線返回值為 1 intgettangents circle a,circle b,point a,point b 求外公切線 db ang acos a.r b.r sqrt d2 求阿爾法 兩條外公切...