如果给你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>
struct point
{
double x,y;
};
void Equation(point A,point B,double &a,double &b,double &c)
{//求过点A,B的直线ax+by+c=0
a=B.y-A.y;
b=A.x-B.x;
c=A.y*B.

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

被折叠的 条评论
为什么被折叠?



