问题情景:
验证两条线段是否相交时,需求两条线段的交点
算法详解:
已知两个线段分别是(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)