圆与圆的位置关系
两圆的位置关系有五种,判据全在圆心距上。与直线和圆那一节相比,五种关系里多出「内含」与「内切」,它们的存在使得判据要比较两个界而不是一个。
1 · 五种关系与两个界
设两圆半径 、,圆心距 。
| 关系 | 判据 | 公共点 | 公切线 |
|---|---|---|---|
| 外离 | |||
| 外切 | |||
| 相交 | |||
| 内切 | () | ||
| 内含 |
两个界 与 把 的取值分成五段,落在界上的两种是相切。同心圆()是内含的极端情形,半径还相等时两圆重合。
公切线的条数与公共点个数反着来:公共点越多,公切线越少。外离时四条(两条外公切线、两条内公切线),每有一对圆「靠近一步」就消掉一条。
2 · 根轴:两式相减
两圆的一般方程相减,平方项 抵消,剩下一个一次方程:
这条直线称为两圆的根轴。相交时它就是公共弦所在的直线:两个交点同时满足两个圆的方程,自然也满足相减所得的方程。这一步把「求公共弦」从解二元二次方程组化简成了「解一个线性方程,再与任一圆求交」。
根轴垂直于圆心连线,且在两圆相离时依然存在:它由「到两圆的切线长相等」这一性质刻画,几何上仍是一条实实在在的直线,只是与两圆都不相交。同心圆没有根轴,两式相减后一次项也一并抵消,剩下的是一个矛盾式或恒等式。
例 2.1 求圆 与圆 的公共弦所在的直线。两式化为一般式: 与 。相减得 ,即公共弦所在的直线。圆心距 ,介于 与 之间,故两圆确实相交。
3 · 内切与内含的分界
内切与内含都发生在「一个圆在另一个里面」的格局中,分界是 。这个界比外切那个界容易记错,原因是它带绝对值:谁的半径大并不影响判据,但影响切点的位置。
切点总在圆心连线上,且落在较大的那个圆上:若
,切点在从
出发经过
的方向上,距
恰
;反过来则从
一侧量出。circleCircle 的内切分支据此按半径大小选方向,写成
两种取法,两个圆谁在里面这件事不能只靠
判定。
4 · 分类的容差
浮点计算里「」几乎永远不会精确成立,故五种关系的判定要带容差。相切是一个测度为零的情形:在连续拖动圆心的交互里,若不给容差,屏幕上明明相切的一刻会被判成相交或相离,分类结果在两种之间跳。
circleCircle 的容差取相对量——与
、、
的量级挂钩,而不是一个固定的
。理由与直线那边相同:坐标放大一千倍后,同样的「相切」判定不该突然变严。相交分支里的
还额外与零取大,防止
略微超出
时开出 NaN——这与弦长公式那处的处理是同一个模式(见 直线与圆的位置关系 §2)。
5 · 参考文献
- Circle–circle intersection. Wolfram MathWorld. 两圆交点的坐标公式与分类。https://mathworld.wolfram.com/Circle-CircleIntersection.html
- Radical axis. Wikipedia. 根轴的定义、与圆心连线垂直,以及三圆的根心。https://en.wikipedia.org/wiki/Radical_axis
- Tangent lines to circles. Wikipedia. 两圆公切线的条数与位置关系的对应。https://en.wikipedia.org/wiki/Tangent_lines_to_circles