线段属性
线段
三个问题
1、给定的向量p0p1和p0p2,以p0为公共点,p0p1到p0p2是否构成右手螺旋(逆时针)?
2、给定两条线段p0p1和p1p2,如果我们遍历p0p1和P1P2,能否判断p2在p0p1的左边?
3、线段p0p1和p3p4相交吗?
叉积
定义. 矩阵的行列式:
p1Xp2 >0:p1以(0,0)为起点,在p2的顺时针方向
p1Xp2 <0: p1以(0,0)为起点,在p2的逆时针方向
p1Xp2 =0:共线
1判断p0p1到p0p2是否构成右手螺旋
以P0为公共点。 p0(x0,y0),p1(x1,y1),p2(x2,y2) 以p0为公共点 计算叉积
(p1-p0)x(p2-p0)=(x1-x0)(y1-y0)-(x2-x0)(y2-y0)
>0:左手螺旋(顺时针)
<0:右手螺旋(逆时针)
=0:共线
2判断一个点在一条线段的左边还是右边(p1点在线段p0p2)
用叉积(p1-p0)x(p2-p0) >0:右边 P1P2向左转 <0:左边 P1P2向右转 =0:线上
只要不是左转 :(p1-p0)x(p2-p0) <=0 注意 p1 p2 顺序
3判断两线段是否相交
两线段相交有下面两个情况 如图一两线交叉 如图二一线段的端点在另一条线段上
判断AB和CD两线段是否有交点: 同时满足两个条件:('x'表示叉积)
1.C点D点分别在AB的两侧.(向量(ABxAC)*(ABxAD)<=0)
2.A点和B点分别在CD两侧.(向量(CDxCA)*(CDxCB)<=0)
3. 向量(ABxAC)*(ABxAD)<0代表在直线两侧, =0代表在直线上。