如何检查两条线是否相交?
How to check whether two lines intersect or not?
我如何检查(在 MATLAB 中)是否有两条有限线段 L1(绘制在点 (x1,y1) 和 (x2,y2) 之间)和 L2(绘制在点 (x3,y3) 和 (x4) 之间,y4)), 相互交叉?请注意,交点不是必需的,只有布尔值答案(是或否)。
我在 MatlabCentral 找到了 Roger Stafford 的答案(倒数第二个)。这是:
两条线段L1和L2相交当且仅当
det([1,1,1;x1,x2,x3;y1,y2,y3])*det([1,1,1;x1,x2,x4;y1,y2,y4]) <= 0 和
det([1,1,1;x1,x3,x4;y1,y3,y4])*det([1,1,1;x2,x3,x4;y2,y3,y4]) <= 0,
MATLAB 编码为:
x=[x1 x2 x3 x4];
y=[y1 y2 y3 y4];
dt1=det([1,1,1;x(1),x(2),x(3);y(1),y(2),y(3)])*det([1,1,1;x(1),x(2),x(4);y(1),y(2),y(4)]);
dt2=det([1,1,1;x(1),x(3),x(4);y(1),y(3),y(4)])*det([1,1,1;x(2),x(3),x(4);y(2),y(3),y(4)]);
if(dt1<=0 & dt2<=0)
intrsct=1 %If lines intesect
else
intrsct=0
end
我如何检查(在 MATLAB 中)是否有两条有限线段 L1(绘制在点 (x1,y1) 和 (x2,y2) 之间)和 L2(绘制在点 (x3,y3) 和 (x4) 之间,y4)), 相互交叉?请注意,交点不是必需的,只有布尔值答案(是或否)。
我在 MatlabCentral 找到了 Roger Stafford 的答案(倒数第二个)。这是:
两条线段L1和L2相交当且仅当 det([1,1,1;x1,x2,x3;y1,y2,y3])*det([1,1,1;x1,x2,x4;y1,y2,y4]) <= 0 和 det([1,1,1;x1,x3,x4;y1,y3,y4])*det([1,1,1;x2,x3,x4;y2,y3,y4]) <= 0, MATLAB 编码为:
x=[x1 x2 x3 x4];
y=[y1 y2 y3 y4];
dt1=det([1,1,1;x(1),x(2),x(3);y(1),y(2),y(3)])*det([1,1,1;x(1),x(2),x(4);y(1),y(2),y(4)]);
dt2=det([1,1,1;x(1),x(3),x(4);y(1),y(3),y(4)])*det([1,1,1;x(2),x(3),x(4);y(2),y(3),y(4)]);
if(dt1<=0 & dt2<=0)
intrsct=1 %If lines intesect
else
intrsct=0
end