加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

计算线段和圆的交点

(2012-03-22 19:15:11)
标签:

交点

线段

一元二次方程

圆上

端点

it

分类: Algorithm
因为一个程序里用到了这个算法,在这里记下来备忘

http://www.thecodeway.com/blog/wp-content/uploads/2011/04/csi.gif


    设线段的两个端点分别是P1(x1,y1)和P2(x2,y2),圆的圆心在P3(x3,y3),半径为r,那么如果有交点P(x,y)的话

http://www.thecodeway.com/blog/wp-content/uploads/2011/04/csi_2.gif


    其中,u在0到1之间,转换成各个坐标

http://www.thecodeway.com/blog/wp-content/uploads/2011/04/csi_3.gif


    由于P也在圆上,所以

http://www.thecodeway.com/blog/wp-content/uploads/2011/04/csi_4.gif


    联立上面的公式,可以得到

http://www.thecodeway.com/blog/wp-content/uploads/2011/04/csi_5.gif


    其中

http://www.thecodeway.com/blog/wp-content/uploads/2011/04/csi_6.gif


    解一元二次方程,可以得到

http://www.thecodeway.com/blog/wp-content/uploads/2011/04/csi_7.gif


    根据http://www.thecodeway.com/blog/wp-content/uploads/2011/04/csi_8.gif的结果,可以判断线段所在直线和圆的相交情况

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

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

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

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有