找回密码
 欢迎注册
查看: 74601|回复: 30

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

[复制链接]
发表于 2014-8-27 22:47:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?欢迎注册

×
两圆的方程分别是\[\left(x-a_1\right){}^2+\left(y-b_1\right){}^2=r_1^2\] \[\left(x-a_2\right){}^2+\left(y-b_2\right){}^2=r_2^2\]
尽可能用含`a_1,b_1,r_1, a_2,b_2,r2`的式子表示
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2014-8-27 23:14:25 | 显示全部楼层
1)已知两个圆心$O_1,O_2$的坐标,那么过这两个圆心的距离$r=\sqrt{(a_1-a_2)^2+(b_1-b_2)^2}$,以及直线的方程$C$可以得知。
2)已知两个圆心的半径,那么两个公切点的距离$d$可以求得 $d=\sqrt{r^2+(r_1-r_2)^2}$。
假设$r_1<r_2$,那么公切线的方程相当于 直线$C$绕$O_1$逆时针旋转$\arcsin(\frac{r_2-r_1}{r})$,再沿法向方向(外侧,内侧) 分别平移 $r_1$个单位即可
切点的坐标 同理,可通过旋转求得。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2014-8-27 23:28:11 | 显示全部楼层
在其中一个圆上选一个点为反演中心,反演之后一个圆变成了直线,另外一个圆还是圆,作直线和圆的公切圆,其方程也不难求得,然后再反演回来。
(这大概也是尺规作图的步骤吧,反演尺规作图可以实现)
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2014-8-28 00:20:05 | 显示全部楼层
直接设公切线方程为:
\[y=kx-b\]
与第一个圆 \((x-a_1)^2+(y-b_1)^2=r_1^2\)相切的条件为:
\[k^2r_1^2-k^2a_1^2+2bka_1+2ka_1b_1-b^2-2bb_1+r_1^2-b_1^2=0\]
与第二个圆 \((x-a_2)^2+(y-b_2)^2=r_2^2\)相切的条件为:
\[k^2r_2^2-k^2a_2^2+2bka_2+2ka_2b_2-b^2-2bb_2+r_2^2-b_2^2=0\]
将上面两个相切条件消元得到:

两圆的公内切线:
\[(b_2+r_1-b_1+r_2)(-b_2+r_1+b_1+r_2)+(2(b_1-b_2))(a_1-a_2)k+(a_2+r_1-a_1+r_2)(-a_2+r_1+a_1+r_2)k^2=0\]
\[r_1^2a_2^2+r_1^2b_2^2+2r_1r_2a_1a_2+2r_1r_2b_1b_2+r_2^2a_1^2+r_2^2b_1^2-a_1^2b_2^2+2a_1a_2b_1b_2-a_2^2b_1^2+(2r_1^2b_2+2r_1r_2b_1+2r_1r_2b_2+2r_2^2b_1-2a_1^2b_2+2a_1a_2b_1+2a_1a_2b_2-2a_2^2b_1)b+(a_2+r_1-a_1+r_2)(-a_2+r_1+a_1+r_2)b^2=0\]
两圆的公外切线:
\[(b_2+r_1-b_1-r_2)(-b_2+r_1+b_1-r_2)+(2(b_1-b_2))(a_1-a_2)k+(-a_2+a_1+r_1-r_2)(a_2-a_1+r_1-r_2)k^2=0\]
\[ r_1^2a_2^2+r_1^2b_2^2-2r_1r_2a_1a_2-2r_1r_2b_1b_2+r_2^2a_1^2+r_2^2b_1^2-a_1^2b_2^2+2a_1a_2b_1b_2-a_2^2b_1^2+(2r_1^2b_2-2r_1r_2b_1-2r_1r_2b_2+2r_2^2b_1-2a_1^2b_2+2a_1a_2b_1+2a_1a_2b_2-2a_2^2b_1)b+(-a_2+a_1+r_1-r_2)(a_2-a_1+r_1-r_2)b^2=0\]
注意:由于每个\(k\)和\(b\)均有两个根,分别取同大或者同小取得两组\(\{k,b\}\)即可。

至于切点\(A(x_1,y_1),B(x_2,y_2)\),只需将每组\(\{k,b\}\)代入下式计算:
\[x_1=\frac{a_1+(b+b_1)k}{1+k^2},y_1=kx_1-b\]
\[x_2=\frac{a_2+(b+b_2)k}{1+k^2},y_2=kx_2-b\]


点评

同样的方法,也可以求:两球的公切圆锥面  发表于 2014-9-8 12:52
我指的是切线斜率可能不存在  发表于 2014-8-28 21:50
不需要分类讨论,只需要b,k同取大根和同取小根即可,当然可以直接用求根公式表示出来。  发表于 2014-8-28 19:22
这种设法貌似要分类讨论  发表于 2014-8-28 15:29
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2014-8-28 16:33:28 | 显示全部楼层
搜到一个不错的链接https://donghaoren.org/blog/2009/circle-common-tangents(不过文章中的公式某个符号好像写错了),可以用Mathematica验证:
  1. Manipulate[
  2. Block[{deta, p1, p2, q, a1, b1, a2, b2, line1, line2},
  3.   {{a1, b1}, {a2, b2}} = p;
  4.   deta = (a1 - a2)^2 + (b1 - b2)^2 - (r1 - r2)^2;
  5.   p1 = r1 (a2^2 + b2^2 - a1 a2 - b1 b2);
  6.   p2 = r2 (a1^2 + b1^2 - a1 a2 - b1 b2);
  7.   q = a1 b2 - a2 b1;
  8.   line1 = ((a2 - a1) (r1 - r2)+(b1 - b2) Sqrt[deta]) x + ((b2 - b1) (r1 - r2) + (a2 - a1) Sqrt[deta]) y - p1 - p2 + q Sqrt[deta]==0;
  9.   line2 = ((a2 - a1) (r1 - r2)-(b1 - b2) Sqrt[deta]) x + ((b2 - b1) (r1 - r2) - (a2 - a1) Sqrt[deta]) y - p1 - p2 - q Sqrt[deta]==0;
  10.   Show[Graphics[{Circle[{a1, b1}, r1], Circle[{a2, b2}, r2]},
  11.     PlotRange -> 6, Frame -> 1],
  12.    ContourPlot[Evaluate@{line1, line2}, {x, -9, 9}, {y, -9, 9}]]
  13.   ], {{p, {{-3, 1}, {3, 0}}}, Locator}, {{r1, 1}, 1, 3}, {{r2, 2}, 1,
  14.   3}]
复制代码

已更新,内外公切线都有了
  1. Manipulate[
  2. Block[{deta1, deta2, p1, p2, q, a1, b1, a2, b2, outerLine1,
  3.    outerLine2, innerLine1, innerLine2},
  4.   {{a1, b1}, {a2, b2}} = p;
  5.   deta1 = (a1 - a2)^2 + (b1 - b2)^2 - (r1 + r2)^2;
  6.   deta2 = (a1 - a2)^2 + (b1 - b2)^2 - (r1 - r2)^2;
  7.   p1 = r1 (a2^2 + b2^2 - a1 a2 - b1 b2);
  8.   p2 = r2 (a1^2 + b1^2 - a1 a2 - b1 b2);
  9.   q = a1 b2 - a2 b1;
  10.   innerLine1 = ((a2 - a1) (r1 + r2) + (b1 - b2) Sqrt[
  11.          deta1]) x + ((b2 - b1) (r1 + r2) + (a2 - a1) Sqrt[deta1]) y -
  12.       p1 + p2 + q Sqrt[deta1] == 0;
  13.   innerLine2 = ((a2 - a1) (r1 + r2) - (b1 - b2) Sqrt[
  14.          deta1]) x + ((b2 - b1) (r1 + r2) - (a2 - a1) Sqrt[deta1]) y -
  15.       p1 + p2 - q Sqrt[deta1] == 0;
  16.   outerLine1 = ((a2 - a1) (r1 - r2) + (b1 - b2) Sqrt[
  17.          deta2]) x + ((b2 - b1) (r1 - r2) + (a2 - a1) Sqrt[deta2]) y -
  18.       p1 - p2 + q Sqrt[deta2] == 0;
  19.   outerLine2 = ((a2 - a1) (r1 - r2) - (b1 - b2) Sqrt[
  20.          deta2]) x + ((b2 - b1) (r1 - r2) - (a2 - a1) Sqrt[deta2]) y -
  21.       p1 - p2 - q Sqrt[deta2] == 0;
  22.   Show[Graphics[{Circle[{a1, b1}, r1], Circle[{a2, b2}, r2]},  PlotRange -> 6, Frame -> 1],
  23.    ContourPlot[ Evaluate@{outerLine1, outerLine2, innerLine1, innerLine2}, {x, -5,5}, {y, -5, 5}]]
  24.   ], {{p, {{-3, 1}, {3, 0}}}, Locator}, {{r1, 1}, 1, 3}, {{r2, 2}, 1,
  25.   3}]
复制代码

2014-08-28_220233.png

点评

你这里只求出了外切线方程,内切线方程好像要修改一下,并且切点坐标也没有给出哈。  发表于 2014-8-28 19:25
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2014-8-28 21:01:25 | 显示全部楼层
楼主或许应该讲明白,到底是想要结果,还是想要方法。

点评

还有一点,尽可能使列出的方程适合Mathematica、Maple等求解  发表于 2014-8-28 21:51
都想啊,有点贪心(^o^),主要想找一个计算量不大、不用分类讨论的方法  发表于 2014-8-28 21:41
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2014-8-28 22:22:50 | 显示全部楼层
设公切线与两圆的切点分别是:\((a_1+r_1\cos\theta, b_1+r_1\sin\theta)\)和\((a_2+r_2\cos\theta, b_2+r_2\sin\theta)\), 那么公切线的斜率就是\(-\cot\theta\), 公切线方程就是
\[(x-a_1)\cos\theta+(y-b_1)\sin\theta-r_1=0\]为了消去参数,与\[(a_2-a_1)\cos\theta+(b_2-b_1)\sin\theta+(r_2-r_1)=0\]联立消去 `\theta` 即可得到公切线方程。`r_1, r_2`可正可负,正负4种组合即得4条公切线方程。

评分

参与人数 1威望 +2 金币 +2 贡献 +2 经验 +2 鲜花 +2 收起 理由
chyanog + 2 + 2 + 2 + 2 + 2 赞一个!

查看全部评分

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2014-8-29 04:36:21 | 显示全部楼层
用Mathematica10试了一下楼上的方法,直接带三角函数消元不行,也许另有命令?我用X,Y 代替余弦和正弦,加了一个方程X^2+Y^2=1, 消元成功。
  1. Manipulate[
  2. Block[{a1, b1, a2, b2, CommonTangents}, {{a1, b1}, {a2, b2}} = p;
  3.   CommonTangents[r2_]:=Eliminate[{x X + y Y == a1 X + b1 Y + r1 == a2 X + b2 Y + r2, X^2 + Y^2 == 1}, {X, Y}];
  4.   Show[Graphics[{Circle[{a1, b1}, r1], Circle[{a2, b2}, r2]}, PlotRange -> 6, Frame -> 1],
  5.   ContourPlot[Evaluate@(CommonTangents/@{r2,-r2}), {x, -5, 5}, {y, -5, 5}]]],
  6. {{p, {{-3, 1}, {3, 0}}}, Locator}, {{r1, 1}, 1,3}, {{r2, 2}, 1, 3}]
复制代码

楼上的用来消元的两个等式可以简写为一个连等式: \(x\cos\theta+y\sin\theta=a_1\cos\theta+b_1\sin\theta+r_1=a_2\cos\theta+b_2\sin\theta+r_2\)
从中消元得到的实际上是一条退化的二次曲线,包含两条公切线。 r1,r2同号时为两条外公切线,异号时为两条内公切线。

点评

这个可以三角消元啊,不过Mathematica确实更擅长多项式消元  发表于 2014-8-29 12:09
要注意身体哈!  发表于 2014-8-29 09:08
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2014-8-29 16:08:56 | 显示全部楼层
外公切线倾斜角=圆心连线倾斜角±反正切(半径差/圆心距离)
代入7#公式

内公切线倾斜角=圆心连线倾斜角±反正切(半径和/圆心距离)
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2014-8-29 16:27:32 | 显示全部楼层
设切线方程为\(a x+b y+1=0\),根据点到直线距离公式得
  1. GroebnerBasis[{(a a1 + b b1 + 1)^2 ==  r1^2 (a^2 + b^2), (a a2 + b b2 + 1)^2 == r2^2 (a^2 + b^2),  a x + b y + 1 == 0},
  2. {a, b}][[1]] // Factor // FullSimplify[#, ComplexityFunction -> LeafCount] &
复制代码

结果\(\left(r_1^2 \left(\left(x-a_2\right){}^2+\left(y-b_2\right){}^2\right)-2 r_2 r_1 \left(\left(x-a_1\right) \left(x-a_2\right)+\left(y-b_1\right) \left(y-b_2\right)\right)+r_2^2 \left(\left(x-a_1\right){}^2+\left(y-b_1\right){}^2\right)-\left(a_1 y-a_1 b_2-a_2 y-x b_1+a_2 b_1+x b_2\right){}^2\right) \left(r_2^2 \left(\left(x-a_1\right){}^2+\left(y-b_1\right){}^2\right)+2 r_1 r_2 \left(\left(x-a_1\right) \left(x-a_2\right)+\left(y-b_1\right) \left(y-b_2\right)\right)+\text{r1}^2 \left(\left(x-a_2\right){}^2+\left(y-b_2\right){}^2\right)-\left(a_1 y-a_1 b_2-a_2 y-x b_1+a_2 b_1+x b_2\right){}^2\right)\)
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

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

GMT+8, 2024-11-23 10:23 , Processed in 0.033336 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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