Определение, на какой стороне линии находится точка. Особый случай [закрыт]

Я написал код 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)

Вот результат:

Результат работы программы

Красный цвет соответствует «левому» положению, «пурпурный» — правому положению, «черный» — положению на линии. Вы также можете видеть синюю линию относительного положения, относительно которого я пытаюсь оценить. Как видите, результат отрисовывается так же, как и для другой линии.

Что не так?

При реализации кода смотрел, например, сюда:

  1. Вычислить, на какой стороне линии находится точка

  2. Как определить, находится ли точка справа или слева от линии


person Capo Pavel Mestre    schedule 28.03.2016    source источник


Ответы (1)


У вас ошибка в формуле:

polylineY(2) - polylineX(1)

должно быть

polylineY(2) - polylineY(1)

вычислить правильный определитель.

person gariepy    schedule 28.03.2016