Я написал код Matlab, который позволяет определить, какая сторона точки линии. Он отлично работает во многих случаях, но я нашел один особый случай, когда он работает странно. Вот код:
clear all
close all
clc
polylineX = [9 15];
polylineY = [7 6];
hold on
for i = 1:27
for j = 1:32
point(1) = j-10;
point(2) = i-101;
pos = sign((polylineX(2) - polylineX(1)) * (point(2) - polylineY(1)) -...
(polylineY(2) - polylineX(1)) * (point(1) - polylineX(1)));
if pos == 1
plot(point(1),point(2),'r.','MarkerSize',5)
elseif pos == -1
plot(point(1),point(2),'m.','MarkerSize',5)
elseif pos == 0
plot(point(1),point(2),'k.','MarkerSize',5)
end;
pause(0.00000001);
end;
end;
plot(polylineX,polylineY)
Вот результат:
Красный цвет соответствует «левому» положению, «пурпурный» — правому положению, «черный» — положению на линии. Вы также можете видеть синюю линию относительного положения, относительно которого я пытаюсь оценить. Как видите, результат отрисовывается так же, как и для другой линии.
Что не так?
При реализации кода смотрел, например, сюда: