定义线点的哪一侧。特殊情况

Defining which side of a line point is. Special case

我写了一个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)

结果如下:

Result of the program

红色代表'left'位置,'magenta'颜色代表右边位置,'black'颜色代表线上位置。您可以看到蓝线以及我试图估计的相对位置。如您所见,绘制的结果与另一条线的绘制结果相同。

怎么了?

在实现我查看的代码时,例如,这里:

  1. Calculate on which side of a line a point is

  2. How to tell whether a point is to the right or left side of a line

你的公式有误:

polylineY(2) - polylineX(1)

应该是

polylineY(2) - polylineY(1)

计算正确的行列式。