2016-03-28 6 views
1

Ich habe einen Matlab-Code geschrieben, der es erlaubt zu definieren, welche Seite eines Linienpunktes ist. Es funktioniert in vielen Fällen gut, aber ich habe einen Spezialfall gefunden, wenn es komisch funktioniert. Hier ist der Code:Definieren der Seite eines Linienpunkts. Sonderfall

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) 

Hier ist das Ergebnis:

Result of the program

Rote Farbe ist für 'linke' Position 'Magenta' Farbe ist für die rechte Position, 'schwarz' Farbe ist für die Position auf der Linie. Sie können die blaue Linie sowie die relative Position sehen, die ich zu schätzen versuche. Wie Sie sehen können, wird das Ergebnis wie für eine andere Linie gezeichnet.

Was ist los?

Wenn Sie den Code Implementierung Ich sah zum Beispiel hier:

  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

Antwort

1

Sie haben einen Fehler in Ihrer Formel:

polylineY(2) - polylineX(1) 

sollte

sein
polylineY(2) - polylineY(1) 

die richtige Determinante zu berechnen.