C++ 实现求两圆外公切线
时间: 2023-08-12 21:10:19 浏览: 266
两圆外切线
假设两个圆的圆心分别为 $(x_1,y_1)$ 和 $(x_2,y_2)$,半径分别为 $r_1$ 和 $r_2$。我们可以根据两个圆心之间的距离和半径之和、差的关系,分类讨论两个圆的位置关系:
1. 两个圆不相交,即 $d > r_1+r_2$ 或 $d < |r_1-r_2|$(其中 $d=\sqrt{(x_2-x_1)^2+(y_2-y_1)^2}$ 表示两个圆心之间的距离)。此时不存在公切线。
2. 两个圆相交,即 $d < r_1+r_2$ 且 $d > |r_1-r_2|$。此时存在两条内公切线和两条外公切线。内公切线的两个切点均在两个圆的连线上,外公切线的两个切点均在两个圆的连线的延长线上。如果两个圆的圆心重合,则存在无数条公切线。
3. 一个圆包含另一个圆,即 $d < r_1-r_2$ 或 $d < r_2-r_1$。此时存在一条内公切线和一条外公切线。内公切线的两个切点均在小圆上,外公切线的两个切点均在大圆上。如果两个圆的圆心重合,则存在无数条公切线。
我们只需要考虑外公切线的情况。两个圆的连线的中垂线与两个圆的半径分别构成一个直角三角形,我们可以利用三角函数求出中垂线与连线的夹角 $\theta$,然后根据 $\theta$ 算出公切线与中垂线的夹角 $\alpha$,最后旋转 $\alpha$ 即可求出公切线的方向向量。具体实现代码如下:
阅读全文