求两线段交点

通过坐标计算线段AB与CD的交点,首先确定过点A、B的直线方程ax+by+c=0,接着利用向量AD与AB的叉积为零判断交点。点在直线的左右可以通过点的坐标代入直线方程判断a*q.x+b*q.y+c的正负。文中提供了一段相关代码来解决这个问题。
摘要由CSDN通过智能技术生成

如果给你4个点A,B,C,D的坐标,让你求线段AB与线段CD的交点(必相交),首先求出过点A,B的直线ax+by+c=0,因为y-A.y=(B.y-A.y)/(B.x-A.x)*(x-A.x),所以得到a=B.y-A.y; b=A.x-B.x; c=A.y*B.x-A.x*B.y; 向量AD × AB =(D.x-A.x)*(B.y-A.y)-(B.x-A.X)*(D.y-A.y) =(B.y-A.y)*D.x+(A.x-B.x)*D.y+(A.y*B.x-A.x*B.y)=a*D.x+b*D.y+c; 也就是S△ABD=0.5*fabs(a*D.x+b*D.y+c),其中a,b,c是由过点A,B的直线确定的,且直线方程两边不能同时乘一个数,附上我写的代码。通过前面的分析,还可以知道,如果一个点在直线AB的左边,也就是与向量AB成的角是(0°,180°),那么将那个点的坐标q(q.x,q.y)带入式子ax+by+c中,得出来的a*q.x+b*q.y+c>0,同理如果在直线右边小于零。

# include <stdio.h>
# include <math.h&g
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值