Как проверить, пересекаются ли две прямые?

Как проверить (в 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)


Я нашел ответ (второй последний) Роджера Стаффорда в 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