定义线点的哪一侧。特殊情况
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'颜色代表线上位置。您可以看到蓝线以及我试图估计的相对位置。如您所见,绘制的结果与另一条线的绘制结果相同。
怎么了?
在实现我查看的代码时,例如,这里:
Calculate on which side of a line a point is
How to tell whether a point is to the right or left side of a line
你的公式有误:
polylineY(2) - polylineX(1)
应该是
polylineY(2) - polylineY(1)
计算正确的行列式。
我写了一个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'颜色代表线上位置。您可以看到蓝线以及我试图估计的相对位置。如您所见,绘制的结果与另一条线的绘制结果相同。
怎么了?
在实现我查看的代码时,例如,这里:
Calculate on which side of a line a point is
How to tell whether a point is to the right or left side of a line
你的公式有误:
polylineY(2) - polylineX(1)
应该是
polylineY(2) - polylineY(1)
计算正确的行列式。