我编写了一个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)
结果如下:
红色用于“左”'位置,'洋红色'颜色适合正确的位置,黑色'颜色是在线上的位置。您可以看到蓝线以及我想要估算的相对位置。正如您所看到的,结果被绘制为另一条线。
出了什么问题?
实现我看过的代码时,例如:
答案 0 :(得分:1)
你的公式有误:
polylineY(2) - polylineX(1)
应该是
polylineY(2) - polylineY(1)
计算正确的行列式。