如何计算线段和圆的交点
一个程序里用到了计算线段和圆相交情况的算法,在这里记下来备忘

设线段的两个端点分别是
其中,
由于P也在圆上,所以
联立上面的公式,可以得到
其中
解一元二次方程,可以得到
根据
- 如果小于0,表示没有交点
- 如果等于0,表示相切,只有一个交点
- 如果大于0,表示有两个交点
针对
- 如果线段和圆没有交点,而且都在圆的外面的话,则
的两个解都是小于0或者大于1的 - 如果线段和圆没有交点,而且都在圆的里面的话,
的两个解符号相反,一个小于0,一个大于1 - 如果线段和圆只有一个交点,则
值中有一个是在0和1之间,另一个不是 - 如果线段和圆有两个交点,则
值得两个解都在0和1之间 - 如果线段和圆相切,则
值只有1个解,且在0和1之间