如果给你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