因为一个程序里用到了这个算法,吐血记下~
计算线段和圆的交点
    设线段的两个端点分别是P1(x1,y1)和P2(x2,y2),圆的圆心在P3(x3,y3),半径为r,那么如果有交点P(x,y)的话

计算线段和圆的交点
    其中,u在0到1之间,转换成各个坐标
计算线段和圆的交点
    由于P也在圆上,所以
计算线段和圆的交点
    联立上面的公式,可以得到
计算线段和圆的交点
    其中
计算线段和圆的交点
    解一元二次方程,可以得到
计算线段和圆的交点
    根据计算线段和圆的交点的结果,可以判断线段所在直线和圆的相交情况

  • 如果小于0,表示没有交点
  • 如果等于0,表示相切,只有一个交点
  • 如果大于0,表示有两个交点

    针对P1和P2之间的线段,根据计算出的u值,有5种结果

  • 如果线段和圆没有交点,而且都在圆的外面的话,则u的两个解都是小于0或者大于1的
  • 如果线段和圆没有交点,而且都在圆的里面的话,u的两个解符号相反,一个小于0,一个大于1
  • 如果线段和圆只有一个交点,则u值中有一个是在0和1之间,另一个不是
  • 如果线段和圆有两个交点,则u值得两个解都在0和1之间
  • 如果线段和圆相切,则u值只有1个解,且在0和1之间

相关文章:

  • 2021-07-15
  • 2022-01-14
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-05
  • 2021-06-06
猜你喜欢
  • 2021-12-27
  • 2022-12-23
  • 2021-05-20
  • 2021-07-18
  • 2022-12-23
  • 2021-09-22
  • 2022-12-23
相关资源
相似解决方案