计算几何学习笔记 [基础 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} \]

这样就可以计算一个圆关于反演之后的圆了。

例题

给定平面内两圆和圆外一点,求过这一点且相切于这两个圆的所有圆。

反演一下!

以要经过的点为圆心,任意半径进行反演。

反演后的图形是什么?对于原来的圆,反演后还是圆;对于要求的圆,因为它过反演中心,所以会被变成直线。由于反演前后,相切的性质不变,所以反演之后要求的所有圆变成了反演后两圆的所有公切线。

直接求出反演后的两个圆的所有公切线,反演回去即可。

图示: