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