两个圆的公切线
两个圆的公切线 圆上任意一点拥有唯一的圆心角 struct circle{ Point p; double r; // 通过圆心角求圆上某一点 Point point(double a){ return Point(p.x + cos(a) * r, c.y + sin(a) * r); } } 根据两个圆的位置关系来确定情况 两个圆内含,没有公共点,没有公切线 两圆内切,有一个条公切线 两圆完全重合,有无数条公切线 两圆相交。有2条公切线 两圆外切,有3条公切线 两圆相离,有4条公切线 1 与 3 什么都不求,情况 2 可以直接求出直线AB的极角进而转换为圆心角来求切点,连接切点和圆心,旋转90度即可得到切线。 情况 4 有两条外公切线,求出圆心距 \(d\) 以及 \(|AG|\) 即可求出 \(\alpha\) 的大小,根据 \(\vec{AB}\) 的极角进行旋转即可求出切点,进而得到切线 情况 5 的内切线类似情况2 情况 6 的外公切线与情况4完全一样 情况 6 的内切线也是先求出圆心角 \(\alpha\) ,如何求? \(\cos \alpha = \frac{A_r+B_r}{|AB|}\) // a[i] 存放第 i 条公切线与 圆A 的交点 int getTangents(circle A, circle B, Point*a, Point *b){ int