文章

计算圆外一点与圆的切线

在已知圆外一点坐标、圆心坐标和半径的情况下,如何计算切线坐标是一个会经常用到的技巧。可以很容易推导出计算切线长度的公式和两条切线的夹角,切线向量的坐标,想必也会存在一个计算公式,可以直接算出切线向量。

下面就推导切线向量的计算公式。假设圆外一点P(x_0,y_0),圆心为C(x_c,y_c),半径为r.

首先,计算圆心相对于圆外一点的相对偏移量。

\vec{\omega}=C-P=(\omega_x,\omega_y)

由勾股定理,可以计算切线的长度。

l^2 = |\vec{\omega}|^2-r^2

圆外一点可以向圆作两条切线。假设切点为P_t(x,y),则\vec{PP_t}是切线向量。

\vec{PP_t}=P_t-P=(x-x_0,y-y_0)

\vec{PP_t}的坐标记为(x_t,y_t)

由斯密特正交化可得,与切线垂直的向量\vec{P_c}

\vec{P_c}=(-y_t,x_t)

最后,建立方程并求解。

\vec{P_c}\cdot\vec{\omega}=|\vec{\omega}||\vec{P_c}|cos(\alpha)=|\vec{\omega}||l|cos(\alpha)\\ \vec{PP_t}\cdot\vec{\omega}=|\vec{\omega}||l|cos(\theta)

\alpha\theta,如下图所示。且两个角的余弦如下

cos(\alpha)=\frac{r}{|\vec{\omega}|}\\ cos(\theta)=\frac{l}{|\vec{\omega}|}

代入上面的方程并展开,则有

-y_t\omega_x+x_t\omega_y=|l|\cdot|r|\\ x_t\omega_t+y_t\omega_y=|l|^2

求解后可得

x_t=\frac{|l|\cdot(|l|\omega_x + |r|\omega_y)}{|\vec{\omega}|^2}\\ y_t=\frac{|l|\cdot(-r\omega_x+|l|\omega_y)}{|\vec{\omega}|^2}

由此可以算出切点的坐标。

另一条切线

上述方式只能算出其中一条切线。而另一条切线的计算,在斯密特证交化这一步有出入。

\vec{P_c}=(y_t,-x_t)

但是建立方程和后续的步骤一致。可得

x_t=\frac{|l|\cdot(|l|\omega_x - |r|\omega_y)}{|\vec{\omega}|^2}\\ y_t=\frac{|l|\cdot(r\omega_x+|l|\omega_y)}{|\vec{\omega}|^2}


许可协议:  CC BY 4.0