同圆心圆中从内圆点延伸的水平、垂直线与外圆最近交点求解
同圆心圆中从内圆点延伸的水平、垂直线与外圆最近交点求解
嘿,我来帮你把这个同心圆的交点计算问题拆解清楚~
首先先统一一下前提,避免混淆:
- 我们把外圆半径记为 $R = \max(r_1, r_2)$,内圆半径记为 $r = \min(r_1, r_2)$,这样不管你给的 $r_1$ 和 $r_2$ 谁大谁小,都能统一处理;如果 $r_1=r_2$,那两圆完全重合,交点就是点 $(x_0,y_0)$ 本身,这个情况先记下来。
- 已知 $(x_0,y_0)$ 在内圆上,所以它必然满足内圆方程:$x_0^2 + y_0^2 = r^2$。
一、垂直线($x=x_0$)与外圆的最近交点 $(x_1,y_1)$
外圆的方程是 $x^2 + y^2 = R^2$,把 $x=x_0$ 代入进去,就能解出垂直线与外圆的交点纵坐标:
$$y^2 = R^2 - x_0^2$$
所以 $y = \pm\sqrt{R^2 - x_0^2}$,现在要找离 $(x_0,y_0)$ 最近的那个点:
- 如果 $y_0 \geq 0$,那最近的交点纵坐标就是正的那个:$y_1 = \sqrt{R^2 - x_0^2}$,对应点 $(x_0, \sqrt{R^2 - x_0^2})$
- 如果 $y_0 < 0$,那最近的交点纵坐标就是负的那个:$y_1 = -\sqrt{R^2 - x_0^2}$,对应点 $(x_0, -\sqrt{R^2 - x_0^2})$
你也可以用内圆方程简化这个表达式,因为 $x_0^2 = r^2 - y_0^2$,代入后 $y_1 = \pm\sqrt{R^2 - (r^2 - y_0^2)} = \pm\sqrt{(R^2 - r^2) + y_0^2}$,不过直接用原始形式计算也很直观。
二、水平线($y=y_0$)与外圆的最近交点 $(x_2,y_2)$
和垂直方向的逻辑完全一致,把 $y=y_0$ 代入外圆方程:
$$x^2 = R^2 - y_0^2$$
得到 $x = \pm\sqrt{R^2 - y_0^2}$,找最近的交点:
- 如果 $x_0 \geq 0$,最近的交点横坐标是正的那个:$x_2 = \sqrt{R^2 - y_0^2}$,对应点 $(\sqrt{R^2 - y_0^2}, y_0)$
- 如果 $x_0 < 0$,最近的交点横坐标是负的那个:$x_2 = -\sqrt{R^2 - y_0^2}$,对应点 $(-\sqrt{R^2 - y_0^2}, y_0)$
举个实际例子验证一下
假设内圆半径 $r=2$,外圆半径 $R=5$,内圆上的点 $(x_0,y_0)=(\sqrt{3},1)$(满足 $(\sqrt{3})^2 + 1^2 = 4 = 2^2$):
- 垂直线交点:代入 $x=\sqrt{3}$,$y^2=25-3=22$,因为 $y_0=1>0$,所以 $y_1=\sqrt{22}\approx4.69$,交点是 $(\sqrt{3}, \sqrt{22})$
- 水平线交点:代入 $y=1$,$x^2=25-1=24$,因为 $x_0=\sqrt{3}>0$,所以 $x_2=2\sqrt{6}\approx4.90$,交点是 $(2\sqrt{6},1)$
计算一下距离就能发现,垂直线上我们选的点距离原点点更近,完全符合问题要求~
备注:内容来源于stack exchange,提问作者Overjoyed
相关产品推荐
相关产品推荐

