计算几何学习笔记 [基础 VI]
反演
给定反演中心 \(O\),反演半径 \(R\)。若点 \(P\) 和 \(P'\) 满足:
- \(P'\) 在射线 \(\overrightarrow{OP}\) 上;
- \(|\overrightarrow{OP}| \cdot |\overrightarrow{OP'}| = R^2\)
那么 \(P\) 和 \(P'\) 互为反演点。
以 \(O\) 为圆心,\(R\) 为半径的圆叫反演圆。
性质
-
首先,你对 \(A\) 反演可以得到 \(A'\),对于 \(A'\) 反演就能得回 \(A\)。
-
圆 \(O\) 外的点的反演点在圆 \(O\) 内,反之亦然;圆 \(O\) 上的点的反演点为其自身。
-
不过点 \(O\) 的圆 \(A\),其反演图形也是不过点 \(O\) 的圆。
上图:
- 过反演中心的圆,反演图形为不过反演中心的直线。
上图:
- 反演前相切的图形,反演后还相切。
上图:
- 过反演中心的直线反演后就是自身。
之后考虑一些定量计算的东西。
计算
考虑这个图。设 \(O(x_0,y_0),A(x_1,y_1),B(x_2,y_2)\),\(A\) 半径 \(r_1\),\(B\) 半径 \(r_2\),反演圆 \(O\) 半径 \(R\)。
想求一下反演圆相关的信息!
首先根据反演变换定义直接列方程:
\[\begin{cases} |OC| \cdot |OC'| = (|OA| + r_1)(|OB| - r_2) = R^2 \\ |OD| \cdot |OD'| = (|OA| - r_1)(|OB| + r_2) = R^2 \end{cases} \]之后联立一下:
\[\begin{aligned} (|OA| + r_1)(|OB| - r_2) & = (|OA| - r_1)(|OB| + r_2) \\ |OA| \cdot |OB| - r_2 \cdot |OA| + r_1 \cdot |OB| - r_1 \cdot r_2 & = |OA| \cdot |OB| + r_2 \cdot |OA| - r_1 \cdot |OB| - r_1 \cdot r_2 \\ r_2 \cdot |OA| & = r_1 \cdot |OB| \\ |OB| & = \dfrac{r_2}{r_1}|OA| \end{aligned} \]把 \(|OB| = \dfrac{r_2}{r_1}|OA|\) 代回去:
\[\begin{aligned} (|OA| + r_1)(\dfrac{r_2}{r_1}|OA| - r_2) & = R^2 \\ \dfrac{r_2}{r_1}|OA|^2 - r_1 \cdot r_2 & = R^2 \\ r_2(|OA|^2 - r_1^2) & = r_1 \cdot R^2 \\ r_2 & = \dfrac{r_1 \cdot R^2}{|OA|^2 - r_1^2} \\ r_2 & = \dfrac{1}{2} \left( \dfrac{1}{|OA| - r_1} - \dfrac{1}{|OA| + r_1} \right) R^2 \end{aligned} \]就把半径求出来了。
然后还记得 \(|OB|\) 吗?我们的中间步骤有一个 \(|OB| = \dfrac{r_2}{r_1}|OA|\)。这个时候把 \(r_2\) 代回去,\(|OB|\) 也就知道了。
考虑求一下坐标?很简单!拿 \(|OB|\) 和 \(|OA|\) 比例搞一下就行。
\[\begin{cases} x_2 & = x_0 + \dfrac{|OB|}{|OA|} (x_1 - x_0) \\ y_2 & = y_0 + \dfrac{|OB|}{|OA|} (y_1 - y_0) \end{cases} \]这样就可以计算一个圆关于反演之后的圆了。
例题
给定平面内两圆和圆外一点,求过这一点且相切于这两个圆的所有圆。
反演一下!
以要经过的点为圆心,任意半径进行反演。
反演后的图形是什么?对于原来的圆,反演后还是圆;对于要求的圆,因为它过反演中心,所以会被变成直线。由于反演前后,相切的性质不变,所以反演之后要求的所有圆变成了反演后两圆的所有公切线。
直接求出反演后的两个圆的所有公切线,反演回去即可。
图示: