2015-01-13 3 views
0

Как проверить (в MATLAB) два отдельных сегмента линии L1 (между точками (x1, y1) и (x2, y2)) и L2 (между точками (x3, y3) и (x4, y4)), пересекаются друг с другом? Обратите внимание, что точка пересечения не требуется, только логический ответ (да или нет).Как проверить, пересекаются ли две линии или нет?

+0

Как представлены точки? Даны ли они как x, y? –

+0

@rayryeng: Вышеупомянутый вопрос (уже ответил) - найти точку пересечения (x, y) двух линий. Но мой вопрос состоит в том, чтобы проверить, пересекаются ли две строки или нет (только логический ответ «да» или «нет»). Я старался изо всех сил на S.O., но не нашел дубликата? Если вы согласны, удалите повторяющийся тег. – erbal

+0

@DavidJones: Только что отредактировал вопрос. – erbal

ответ

0

Я нашел ответ (второй последний) Роджера Стаффорда по телефону 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; у2, у3, у4]) < = 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 
Смежные вопросы