关于两圆的公切线计算我们首先需要搞清楚的是两个圆之间有哪些位置关系,两个圆的位置包括内含、内切、外切、外离几种方式,可以看出位置关系可以根据“两圆心之间的距离”与“两圆半径和”以及“两圆半径差”之间的关系判断。
假设大圆半径为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
最后,知道斜率以及直线上的任意一个点就可以求出直线方程了;
以上就是我求相离位置关系的两圆公切线的基本思路,因为不是很方便表示,可能有的地方不是很清楚,敬请见谅,仅供参考。