2016-03-28 1 views
1

私はMatlabコードを書いており、ラインポイントのどちら側にあるかを定義することができます。それは多くの場合、正常に動作しますが、私はそれが奇妙に動作する1つの特別なケースを見つけました。ここでラインポイントのどの辺を定義するか。特別なケース

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

赤色が「左」の位置、のためのものである「マゼンタ」色が「黒」色のためのものである、右の位置のためのものですライン上の位置。あなたは、私が見積もろうとしている相対的な位置と青い線を見ることができます。あなたが見ることができるように、結果は別の行のように描かれます。

どういうところが間違っていますか?

ここでは、例えば、私は見てコードを実装:

  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

答えて

1

をあなたの式に誤りがあります。

polylineY(2) - polylineX(1) 

正しい行列式を計算する

polylineY(2) - polylineY(1) 

であるべきです。