算法:两条线段求交点

问题情景:

验证两条线段是否相交时,需求两条线段的交点

算法详解:

已知两个线段分别是(x1,y1)(x2,y2)以及(x3,y3)(x4,y4),假设这两条线段不平行。

设线段所在的直线为ax+by=c

a1=y2-y1, b1=-(x2-x1), c1=a1*x1-b1*y1=x1*y2-x2*y1;

a2=y4-y3, b2=-(x4-x3), c2=a2*x3-b2*y3=x3*y4-x4*y3;

d=a1*b2-a2*b1

这两个线段的交点为:((b2*c1-b1*c2)/d,(a2*c1-a1*c2)/d)

若判断两线段是否相交,则交点是否在这两端点之间。

代码优化:

a1*b2-a2*b1、b2*c1-b1*c2、a2*c1-a1*c2、x1*y2-x2*y1; 这几个表达式都用以下函数来代替

func(a,b,c,d)  return a*d-b*c;

func(a1,a2,b1,b2)、func(c1,c2,b1,b2)、func(c1,c2,a1,a2)、func(x1,x2,,y1,y2)

转载于:https://www.cnblogs.com/fr-ruiyang/p/9506866.html

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值