WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Geraden/Rechteck : Schnittpunkte + Richtung erkennen

 

kismet
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 25.05.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.11.2017, 21:22     Titel: Geraden/Rechteck : Schnittpunkte + Richtung erkennen
  Antworten mit Zitat      
Hallo ,
vorab habe ich mich selbst mit dem Problem beschäftigt und möchte keinen fertigen Code sondern Hinweise , wie ich das Problem angehen bzw. besser lösen kann. Ich bin für jede Hilfe dankbar und hoffe der Text ist nicht zu lang geworden.

Ich möchte folgendes Problem lösen:
ich habe ein definiertes Polygon aus 4 Geraden (=Bildausschnitt). Nun bewegen sich Punkte (=Objekte) durch das Bild und es soll festgestellt werden, wo diese Punkte das Polygon schneiden. (Eintritt & Austritt) Dazu wird jeweils aus 2 aufeinander folgenden Punkten eine Gerade erstellt und dann der Schnittpunkt mit dem Polygon ermittelt.(Die Prüfung ob die Geraden parallel sind, wird noch eingebaut , indem geprüft wird ,ob die Determinante gleich Null ist) Dazu wird geprüft ob die Parameter der Geradengleichungen zwischen 0 und 1 liegen, um zu prüfen, ob der Schnittpunkt auf beiden Geraden (Gerade Objekt + 1 Seite des Polygons) liegt oder der Schnittpunkt erst bei "Verlängerung" der Geraden auftritt. Die Seiten des Polygons werden so "schief" gelegt, dass aus dem Winkel zwischen Gerade Schnittpunkt -Objekt ermittelt werden kann, ob das Objekt sich auf oder vom Schnittpunkt weg ermittelt.

Bisher sieht das Programm so aus. Bisher ist nur eine Seite des Polygons enthalten, aber für die restlichen 3 sollte es ähnlich gehen. Hierzu habe ich erst mal 2 Fragen:

1.Nun möchte ich mit einer if Bedingung prüfen für welche Schnittpunkte die Bedingung 0<a<1 und 0<t<1 erfüllt sind.
Dies sollte ein simpler Befehl sein, ich krieg das gerade aber nicht hin Confused

2. Und kann mir jemand einen Tipp geben, wie ich die Geraden aus X/Y bewegt darstellen kann, so dass immer nur die aktuelle Gerade aus (X(i)/Y(i) und X(i+1)/Y(i+1) zu sehen ist. Die Gerade aus A und B ist fix.


Code:
% Programm zur Ermittlung von Schnittpunkten und Richtungserkennung , um
% Objektbewegungen durch einen Bildausschnitt zu zählen
% Polygon aus 4 fixen Geraden (=Bildausschnitt). Bisher nur 1 Gerade (A,B) umgesetzt.
% X und Y Koordinaten eines bewegten Objektes
X=[1 1.2 1.4 1.6 1.8 2.0 2.2 2.4 2.6 2.8];
Y=[0 1.0 2.0 2.5 2.5 3.0 2.2 3.1 4.0 5.0];
plot(X,Y)
% A und B Koordinaten einer fixen Gerade des Polygons
A=[1.6 1.4];
B=[0.0 3.0];
hold on
plot(A,B);
% for Schleife zur Prüfung von Schnittpunkten. X(i)/(X(i+1) und Y(i)/Y(i+1)
% bilden Gerade. det = Determinante zur Schnittpunktermittlung zwischen Geraden (https://en.wikipedia.org/wiki/Line%E2%80%93line_intersection)
% Prüfung,ob Determinante =0 wird noch eingebaut
for i=1:9,
plot (X(i),Y(i),'*')
det =((X(i) - X(i+1))*(B(1) - B(2)))-(Y(i) - Y(i+1))*(A(1) - A(2));
Ys=(((X(i)*Y(i+1)-Y(i)*X(i+1))*(B(1)-B(2)))-((Y(i)-Y(i+1))*(A(1)*B(2)-B(1)*A(2))))/det;
Xs=(((X(i)*Y(i+1)-Y(i)*X(i+1))*(A(1)-A(2)))-((X(i)-X(i+1))*(A(1)*B(2)-B(1)*A(2))))/det;
plot(Xs,Ys,'s');
% t und a Parameter der vektoriellen Geradengleichung
t=(Ys-Y(i))/(Y(i+1)-Y(i));
a=(Ys-B(1))/(B(2)-B(1));
% Einbau if Bedingung 0<a<1 und gleichzeitig 0<t<1 ???
% Ausgabe der jeweiligen Paramter zur Kontrolle auf Richtigkeit
det;
t;
a;
Xs;
Ys;
end
Private Nachricht senden Benutzer-Profile anzeigen


kismet
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 25.05.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.11.2017, 21:02     Titel:
  Antworten mit Zitat      
Punkt1 wurde erledigt mit der Ergäzung des Befehls
if a>0 && a<1 && t>0 && t<1
end
Private Nachricht senden Benutzer-Profile anzeigen
 
SigiSorglos
Forum-Century

Forum-Century


Beiträge: 147
Anmeldedatum: 24.09.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.11.2017, 09:41     Titel:
  Antworten mit Zitat      
Ich habe verstanden, dass du das Problem selbst gerne lösen würdest, aber falls du eine Kontrolle brauchst oder jemand anderes ein ähnliches Problem hat, kann ich den folgenden Befehl empfehlen:

Code:
[xi,yi] = polyxpoly(x1,y1,x2,y2)


und für jeden der nicht im Besitz der Mapping Toolbox ist, hilft folgender Link weiter:

https://de.mathworks.com/matlabcent.....obust-curve-intersections
Private Nachricht senden Benutzer-Profile anzeigen
 
kismet
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 25.05.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.11.2017, 15:02     Titel:
  Antworten mit Zitat      
@SigiSorglos:
Danke für deine Antwort und den Hinweis auf die Matlab-Funktion. Smile
--------
Ich hatte vergessen dazu zu schreiben, dass der Code prinzipiell auch später in C++ etc. realisierbar sein soll und deshalb Matlab-spezifische Funktionen zwar nett sind, aber hier eher nicht in Frage kommen. Da ich ggf. demnächst weitere Fragen posten möchte, werde ich dieses Thema demnächst schließen, da ich den Eindruck habe, dass der Post etwas langatmig war.

Viele Grüße und ein schönes Wochenende
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.