线段交、点积、叉积

线段交

给几条线段的两点坐标,输出两条线段交点的个数。
条件1:第一条线段完全在第二条线段之上(之下),则可以判断无交点。
条件2:假如AB与CD相交,那么A和B一定在CD的两侧,所以(CD×CA)(CD×CB) < 0。
C和D一定在AB的两侧,所以(AC×AB)(AD×AB) < 0。
假设A(x1,y1),B(x2,y2),C(x3,y3),D(x4,y4)。
CA = (x1 - x3, y1 - y3),CB = (x2 - x3, y2 - y3)。
CD = (x4 - x3, y4 - y3)。
AC = (x3 - x1, y3 - y1),AD = (x4 - x1, y4 - y1)。
AB = (x2 - x1, y2 - y1)。
所以,(CD×CA)(CD×CB) = ((x4 - x3)(y1 - y3) - (x1 - x3)(y4 - y3))((x4 - x3)(y2 - y3) - (x2 - x3)(y4 - y3)) > 0成立,
或者,(AC×AB)(AD×AB) = ((x3 - x1)(y2 - y1) - (x2 - x1)(y3 - y1))((x4 - x1)(y2 - y1) - (x2 - x1)(y4 - y1)) > 0成立,
则无交点。
其他情况均有交点。

点乘:

x=(a1,a2,…,an),y=(b1,b2,…,bn)
x·y=a1b1+……+anbn .

叉乘:

设两个向量的坐标为u (u1, u2, u3),v(v1, v2, v3)。
则u×v = (u2v3 - u3v2) - (u1v3 - u3v1) + (u1v2 - u2v1)。
二维向量叉乘公式:x1y2 - x2y1。
得到两个向量之间的顺逆关系:
若l1 × l2 >0,则l1在l2的顺时针方向;
若l1 × l2 <0, 则l1在l2的逆时针方向;
若l1 × l2 = 0, 则l1和l2共线(可能同向,也可能反向);

猜你喜欢

转载自blog.csdn.net/qq_47783181/article/details/112908676