找回密码
 欢迎注册
楼主: chyanog

[提问] 求两圆的外公切线方程及切点

[复制链接]
发表于 2014-8-31 17:37:03 | 显示全部楼层
5#给的那个链接的文章结尾说:

直接设 Ax+By+C=0 的方法是不太可行的,需要坚韧不拔的毅力
我只用了不到一节课,完全人工推导,嘻嘻,想知道怎么推出来的吗?……还是自己去想比较有意思哦

提示一下:

一般情况太复杂了,能不能先考虑特殊情况?比如一个圆的圆心就在原点……
一般情况能不能通过某些变换转换为特殊情况,怎么转换
?”

这个提示说的很对,应该先考虑方便计算和表示的特殊位置,再做坐标变换。
但是,考虑一个圆的圆心在原点,不咋的。

觉得把原点移到公切线交点更为有利。说干就干,以后再搜“两圆公切线公式”的网友,就以本坛的这个帖子为标准了。

一、坐标变换

公切线交点是两圆心的以半径之比的定比分点,记交点为`(a,b)`,\[\begin{align}(a,b)=\frac{r_2}{r_1+r_2}(a_1,b_1)+\frac{r_1}{r_1+r_2}(a_2,b_2)\end{align}\]
`r_i`取负数不影响圆的方程,却影响公切线交点,`r_1,r_2`同号时为内公切线交点,异号时为外公切线交点。
我们将`r_i`视为可正可负后,上述公切线交点公式就统一了,不用`\pm`来区分内外交点。以后内外公切线方程也因此是统一的。
原坐标系记为`xoy`, 将原点平移到公切线交点后的坐标系记为`x'o'y'`,坐标变换公式为\[\begin{align}(x',y')=(x,y)-(a,b)\end{align}\]
所以在新坐标系中,圆心坐标变为\[\begin{align}(a_1',b_1')=(a_1,b_1)-(a,b)=\frac{r_1}{r_1+r_2}(a_1-a_2,b_1-b_2)\\(a_2',b_2')=(a_2,b_2)-(a,b)=\frac{-r_2}{r_1+r_2}(a_1-a_2,b_1-b_2)\end{align}\]
我们看到`(a'_1,b'_1)-(a'_2-b'_2)=(a_1-a_2,b_1-b_2)`,因为平移不改变两点之间的距离。
我们将两圆连心线矢量记为\((\Delta a,\Delta b)\): \[\begin{aligned}\Delta a&=a_1-a_2=a_1'-a_2'\\\Delta b&=b_1-b_2=b_1'-b_2'\end{aligned}\]圆的方程相应的变为\[\begin{align}(x'-a'_i)^2+(y'-b'_i)^2=r_i^2,(i=1,2)\end{align}\]

二、新坐标系中的简化公式

设公切线的方程为`y'=kx'`,代入圆的方程得\[\begin{align}(x'_i-a'_i)^2+(kx'_i-b_i')^2&=r_i^2\notag\\(k^2+1)x_i'^2-2(a_i'+kb_i')x_i'+(a_i'^2+b_i'^2-r_i^2)&=0\end{align}\]公切线的判别式为\[\begin{align}(a'_i+kb_i')^2-(k^2+1)(a_i'^2+b_i'^2-r_i^2)&=0\notag\\r_i^2(k^2+1)-(ka_i'-b_i')^2&=0\\(r_1+r_2)^2(k^2+1)-(k\Delta a-\Delta b)^2&=0\end{align}\]将`k=y'/x'`代入得到公切线方程\[\begin{align}(r_1+r_2)^2(x'^2+y'^2)-(\Delta bx'-\Delta ay')^2&=0\end{align}\]再将坐标平移公式代入即可得到原坐标系中的公切线方程。

但是真要写出代入后的显式就南辕北辙了,因为我们已经知道代入后化简的结果也太复杂,不好记。
也没有必要,设置适当的中间变量,打包简化公式才是正确的方向。


评分

参与人数 1威望 +2 经验 +2 鲜花 +2 收起 理由
chyanog + 2 + 2 + 2 很给力!

查看全部评分

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2014-9-1 09:33:43 | 显示全部楼层
将上述(9)式化为\[r_1+r_2=(\Delta a,\Delta b)\cdot(\frac{-y'}{\sqrt{x'^2+y'^2}},\frac{x'}{\sqrt{x'^2+y'^2}})\]几何意义是:连心线矢量在公切线法向的投影长度等于两圆半径的代数和。

点评

or 代数差  发表于 2014-9-1 09:45

评分

参与人数 1威望 +12 金币 +12 贡献 +12 经验 +12 鲜花 +12 收起 理由
wayne + 12 + 12 + 12 + 12 + 12 高,实在是高

查看全部评分

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2014-9-1 19:57:43 | 显示全部楼层
设y=ax+b用点到直线的距离公式解方程不就解出a,b了,而且直接得到4个直线解

点评

4#有你说的过程,10#有你要的结果,11#有一位博主给你的忠告。你若有坚韧不拔的毅力,何不自己一试?  发表于 2014-9-2 16:53
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2014-9-2 10:00:16 | 显示全部楼层
本帖最后由 282842712474 于 2014-9-2 20:03 编辑

设$d=\sqrt{(a_1-a_2)^2+(b_1-b_2)^2}$,将圆1的中点平移到原点,将圆2的中点旋转到$(d,0)$处。设这种情况下的公切线方程为$Ax+By+C=0$,易知此时公切线不会过原点,因此总可以规范化使得$C=1$,因此设公切线方程为$Ax+By+1=0$。

根据距离公式,就有
$$\begin{aligned}\frac{1}{\sqrt{A^2+B^2}}=r_1\\
\frac{|Ad+1|}{\sqrt{A^2+B^2}}=r_2
\end{aligned}$$
从而得到$|Ad+1|=r_2/r_1$,得到有两个不同的A:
$$A=\frac{\pm r_2/r_1-1}{d}$$
代入$\sqrt{A^2+B^2}=1/r_1$,得到
$$B=\pm\sqrt{\frac{1}{r_1^2}-\left(\frac{\pm r_2/r_1-1}{d}\right)^2}$$
这正好对应着内外公切线。代入$Ax+By+1=0$整理得
$$x(\pm r_2-r_1)\pm y\sqrt{d^2-(\pm r_2-r_1)^2}+r_1 d=0$$
其中两个$r_2$前的正负号要相同,取正号时得到两条外切线,取负号时得到两条内切线。

接下来用旋转和平移恢复过来。顺时针旋转$\theta$角的公式是:
$$x'=x \cos\theta+y\sin\theta,\quad y'=y\cos\theta-x\sin\theta$$

这里:
$$\sin\theta=\frac{b_2-b_1}{d},\quad \cos\theta=\frac{a_2-a_1}{d}$$

于是
$$\left(x \frac{a_2-a_1}{d}+y\frac{b_2-b_1}{d}\right)(\pm r_2-r_1)\pm \left(y\frac{a_2-a_1}{d}-x\frac{b_2-b_1}{d}\right)\sqrt{d^2-(\pm r_2-r_1)^2}+r_1 d=0$$

最后加上一个平移:
$$\begin{aligned}\left[(x-a_1)(a_2-a_1)+(y-b_1)(b_2-b_1)\right](\pm r_2-r_1)\\
\pm \left[(y-b_1)(a_2-a_1)-(x-a_1)(b_2-b_1)\right]\sqrt{d^2-(\pm r_2-r_1)^2}+r_1 d^2=0\end{aligned}$$
出于对称性考虑,下面的方程必然也是公切线
$$\begin{aligned}\left[(x-a_2)(a_1-a_2)+(y-b_2)(b_1-b_2)\right](\pm r_1-r_2)\\
\pm \left[(y-b_2)(a_1-a_2)-(x-a_2)(b_1-b_2)\right]\sqrt{d^2-(\pm r_1-r_2)^2}+r_2 d^2=0\end{aligned}$$
考虑外切线,将两式相加得(将第一条正号跟第二条负号相加)
$$\begin{aligned}\left[(x-a_1-a_2)(a_2-a_1)+(y-b_1-b_2)(b_2-b_1)\right](r_2-r_1)\\
\pm \left[(y-b_1-b_2)(a_2-a_1)-(x-a_1-a_2)(b_2-b_1)\right]\sqrt{d^2-(r_2-r_1)^2}+(r_1+r_2) d^2=0\end{aligned}$$

$$\begin{aligned}\left[(2x-a_1-a_2)(a_2-a_1)+(2y-b_1-b_2)(b_2-b_1)\right](r_2-r_1)\\
\pm \left[(2y-b_1-b_2)(a_2-a_1)-(2x-a_1-a_2)(b_2-b_1)\right]\sqrt{d^2-(r_2-r_1)^2}+(r_1+r_2) d^2=0\end{aligned}$$
$$\begin{aligned}\left[2x(a_2-a_1)+2y(b_2-b_1)+d^2\right](r_2-r_1)\\
\pm \left[(2y-b_1-b_2)(a_2-a_1)-(2x-a_1-a_2)(b_2-b_1)\right]\sqrt{d^2-(r_2-r_1)^2}+(r_1+r_2) d^2=0\end{aligned}$$
对于内切线,得到(这时要把第一条正号跟第二条正号相减)
$$\begin{aligned}-\left[(2x-a_1-a_2)(a_2-a_1)+(2y-b_1-b_2)(b_2-b_1)\right](r_2+r_1)\\
\pm \left[(2y-b_1-b_2)(a_2-a_1)-(2x-a_1-a_2)(b_2-b_1)\right]\sqrt{d^2-(r_2+r_1)^2}+(r_1-r_2) d^2=0\end{aligned}$$
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2014-9-2 10:01:43 | 显示全部楼层
本帖最后由 282842712474 于 2014-9-2 20:04 编辑
282842712474 发表于 2014-9-2 10:00
设$d=\sqrt{(a_1-a_2)^2+(b_1-b_2)^2}$,将圆1的中点平移到原点,将圆2的中点旋转到$(d,0)$处。设这种情况 ...


以上过程手算应该可以完成(因为我就是手算出来的...)

验证代码:
  1. r1 = 1
  2. r2 = 2
  3. a1 = 0
  4. a2 = 5
  5. b1 = 0
  6. b2 = 6
  7. d = Sqrt[(a1 - a2)^2 + (b1 - b2)^2]
  8. ContourPlot[{(x - a1)^2 + (y - b1)^2 == r1*r1, (x - a2)^2 + (y - b2)^2 == r2*r2,
  9. ((2*x - a1 - a2)*(a2 - a1) + (2*y - b1 - b2)*(b2 - b1))*(r2 - r1) - ((2*y - b1 - b2)*(a2 - a1) - (2*x - a1 - a2)*(b2 - b1))* Sqrt[d^2 - (r2 - r1)^2] + (r1 + r2)*d^2 == 0,
  10. -((2*x - a1 - a2)*(a2 - a1) + (2*y - b1 - b2)*(b2 - b1))*(r2 + r1) - ((2*y - b1 - b2)*(a2 - a1) - (2*x - a1 - a2)*(b2 - b1))*Sqrt[d^2 - (r2 + r1)^2] + (r1 - r2)*d^2 == 0}, {x, -10,   10}, {y, -10, 10}]
复制代码


Untitled-1.png
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2014-9-2 19:44:11 | 显示全部楼层
设两切点分别是(xm,ym), (xn,yn),
  1. eq = Block[{t1, t2, v1, v2},
  2.    t1 = {xm, ym};
  3.    t2 = {xn, yn};
  4.    v1 = {x1, y1};
  5.    v2 = {x2, y2};
  6.    {(t2 - v2).(t2 - t1) == 0, (t1 - v1).(t2 - t1) ==
  7.      0, (t1 - v1).(t1 - v1) == r1^2, (t2 - v2).(t2 - v2) == r2^2}
  8.    ];
  9. sol = Solve[eq, {xm, ym, xn, yn}];
复制代码

上面这个方程Mathematica很长时间解不出来,但是这样却可以在若干秒内解出来
  1. sol = Solve[Eliminate[eq, {}], {xm, ym, xn, yn}];
复制代码

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2014-9-2 21:43:08 | 显示全部楼层
还有方法,第一个圆的切线族,与第二个圆的切线族,族里面有4个直线是重合的。
还可以第一个圆的切线族,有4根线与第二个圆圆心距离是它的半径
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2020-2-1 23:13:54 | 显示全部楼层
最近在研究切线问题,发现有简便方法,就写一下。
两圆上的点可分别用复数表示
$ Z_1=a_1+b_1 i+\frac{r_1 (1-i u)}{i u+1} $, $Z_2=a_2+b_2 i+\frac{r_2 (1-i v)}{i v+1}$
两切向量平行,知$\text{Im} (\frac{d Z_1}{d u} \frac{d \overset{-}{Z_2}}{d v})=0 $
切向量与两切点的连线平行,知$\text{Im} (\frac{d Z_1}{d u} (\overset{-}{Z_1}-\overset{-}{Z_2}))=0 $
整理下,得到两个方程
$(u-v) (u v+1)=0$
$a_1 u^2 \left(-v^2\right)+a_2 u^2 v^2-a_1 u^2+a_2 u^2+a_1 v^2-a_2 v^2+a_1-a_2-2 b_1 u v^2+2 b_2 u v^2-2 b_1 u+2 b_2 u+r_1 u^2 v^2-r_2 u^2 v^2+r_1 u^2+r_2 u^2-4 r_2 u v+r_1 v^2+r_2 v^2+r_1-r_2=0$
这个方程组容易求解
四组解,为:
$u = v$,$a_1 v^2-a_2 v^2-a_1+a_2+2 b_1 v-2 b_2 v-r_1 v^2+r_2 v^2-r_1+r_2 = 0$

$u=-\frac{1}{v} $, $ a_1 v^2-a_2 v^2-a_1+a_2+2 b_1 v-2 b_2 v+r_1 v^2+r_2 v^2+r_1+r_2=0 $
后面的结论就很显然了

点评

u=v对应的是外公切线  发表于 2020-2-2 00:08
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2020-2-17 21:12:04 | 显示全部楼层

泰博定理能否用内外公切线方程证明?似乎很难。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-4-20 07:21 , Processed in 0.046632 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表