จะตรวจสอบได้อย่างไรว่าเส้นสองเส้นตัดกันหรือไม่?

ฉันจะตรวจสอบได้อย่างไร (ใน MATLAB) ว่าส่วนของเส้นจำกัดสองส่วน L1 (วาดระหว่างจุด (x1,y1) และ (x2,y2)) และ L2 (วาดระหว่างจุด (x3,y3) และ (x4,y4)) ตัดกัน? โปรดทราบว่าไม่จำเป็นต้องใช้จุดตัด เฉพาะคำตอบแบบบูลีนเท่านั้น (ใช่หรือไม่ใช่)


person erbal    schedule 13.01.2015    source แหล่งที่มา
comment
คะแนนจะถูกนำเสนออย่างไร? พวกมันถูกกำหนดเป็น x,y หรือไม่?   -  person David.Jones    schedule 13.01.2015
comment
@rayryeng: คำถามข้างต้น (ตอบแล้ว) คือการหาจุดตัด (x,y) ของสองบรรทัด แต่คำถามของฉันคือการตรวจสอบว่าเส้นสองเส้นตัดกันหรือไม่ (แค่คำตอบแบบบูลีนใช่หรือไม่ใช่) ฉันพยายามอย่างดีที่สุดกับ S.O. แต่ไม่พบรายการที่ซ้ำกันใช่ไหม โปรดลบแท็กที่ซ้ำกัน หากคุณเห็นด้วย   -  person erbal    schedule 14.01.2015
comment
@DavidJones: เพิ่งแก้ไขคำถาม   -  person erbal    schedule 14.01.2015
comment
@ user11659 - ฉันก็เห็นด้วยเช่นกัน ฉันตีความคำถามของคุณผิด เปิดให้บริการอีกครั้งแล้ว!   -  person rayryeng    schedule 15.01.2015
comment
@ user11659 - ตรวจสอบโพสต์นี้: blogs.mathworks.com/loren/2011/08/29/intersecting-lines/   -  person rayryeng    schedule 15.01.2015
comment
@rayryeng: นี่เป็นสิ่งที่ดี แต่กลับพบคำตอบที่อื่น   -  person erbal    schedule 16.01.2015


คำตอบ (1)


ฉันพบคำตอบ (อันดับที่ 2) โดย Roger Stafford ที่ MatlabCentral นี่คือ:

ส่วนของเส้นตรงทั้งสอง 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
person erbal    schedule 16.01.2015