Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Bücher:


Fachkräfte:
weitere Angebote

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Indizierung für bestimmtes Problem (Geradenschnittpunkt)

 

Matlab88
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 22.10.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.10.2021, 14:22     Titel: Indizierung für bestimmtes Problem (Geradenschnittpunkt)
  Antworten mit Zitat      
Hallo,

ich brauche bitte Eure Hilfe.

Ich habe sehr viele 2D-Geraden welche sich kreuzen (wie Mikado Stäbchen) und ich möchte prüfen welche Gerade sich mit welcher schneidet. Das hab ich soweit geschafft und ich habe nun die Koordinaten aller Schnittpunkte aller Geraden in einer Matrix S=[x,y].

Da jede Gerade auch einen "Zeitstempel" hat kommt jede Gerade zu einem anderen Zeitpunkt in den diversen Schnittpunkten an.

Ich habe nun eine Matrix wie folgt:
Code:

M = [L1 L2 t1 t2
     L2 L3 t2 t3
     L3 L6 t3 t4
     ...]
 


In jeder Zeile habe ich die Nummer der ersten Geraden L1, dann die Nummer der Zweiten Geraden L2, dann die Ankunftszeit der ersten Geraden am Schnittpunkt t1 und die Ankunftszeit der zweiten Geraden am Schnittpunkt t2.

In echt sieht das dann so aus:
Code:

M = [1 2 0,4 0,9
     2 3 1,1 1,3
     3 6 0,1 0,6
     ...]
 


Ich möchte nun in jedem Schnittpunkt prüfen, welche der zwei Geraden später dort angekommen ist (t2>t1) und die Schnittpunktkoordinaten als Endkoordinaten für diese Gerade übernehmen (diese Gerade wird von der andern Gerade gestoppt).

In obigem Beispiel ist es nun so, dass in der ersten Zeile von M die Linie 2 von Linie 1 gestoppt wird (t2>t1). Somit wäre das Ende der Linie 2 der Schnittpunkt mit 1. In der zweiten Zeile von M wird die Linie 3 von Linie 2 gestoppt (t3>t2). Dies darf aber nicht mehr geschehen weil Linie 2 ja schon von Linie 1 gestoppt wurde und die Linie 3 nicht mehr stoppen kann.

Ich würde dieses Problem gerne ohne Schleife lösen und wenn möglich über eine schnellst mögliche Indizierung.


Ich wäre Euch über Eure Hilfe sehr dankbar und hoffe mein Problem ist verständlich.

Liebe Grüße
Private Nachricht senden Benutzer-Profile anzeigen


aemon
Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 26.10.17
Wohnort: Niedersachsen
Version: R2019a / R2021a
     Beitrag Verfasst am: 23.10.2021, 13:07     Titel:
  Antworten mit Zitat      
Hallo,

ich habe es noch nicht ganz verstanden:
Wenn L1 zum Zeitpunkt t1 am Schnittpunkt angelangt, L2 jedoch erst zu t2, dann könnte L1 doch den Schnittpunkt bereits verlassen haben?

Und es wird ja noch komplizierter, wenn es einen weiteren Eintrag gäbe, der Gerade 1 zu einem Zeitpunkt kleiner als 0.9 (max(t1,t2) aus Zeile 1) blockiert. Denn dann wird L2 nicht mehr durch L1 blockiert und L2 könnte L3 blockieren...

Ich würde das persönlich erstmal als Schleife realisieren um die Reihenfolge der Ereignisse sicher zu berücksichtigen.
Danach kann man sich noch mal an eine optimierte Variante machen (Und dann sogar mit der Möglichkeit die Ergebnisse durch die Schleifenvariante prüfen zu lassen)
Private Nachricht senden Benutzer-Profile anzeigen
 
Matlab88
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 22.10.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.10.2021, 08:12     Titel:
  Antworten mit Zitat      
aemon hat Folgendes geschrieben:
Hallo,

ich habe es noch nicht ganz verstanden:
Wenn L1 zum Zeitpunkt t1 am Schnittpunkt angelangt, L2 jedoch erst zu t2, dann könnte L1 doch den Schnittpunkt bereits verlassen haben?

Und es wird ja noch komplizierter, wenn es einen weiteren Eintrag gäbe, der Gerade 1 zu einem Zeitpunkt kleiner als 0.9 (max(t1,t2) aus Zeile 1) blockiert. Denn dann wird L2 nicht mehr durch L1 blockiert und L2 könnte L3 blockieren...

Ich würde das persönlich erstmal als Schleife realisieren um die Reihenfolge der Ereignisse sicher zu berücksichtigen.
Danach kann man sich noch mal an eine optimierte Variante machen (Und dann sogar mit der Möglichkeit die Ergebnisse durch die Schleifenvariante prüfen zu lassen)


Hi,

vielen Dank für Deinen Eintrag. Eine Gerade ist wie eine Mauer, selbst wenn sie den Schnittpunkt schon wieder verlassen hat stoppt die zweite Gerade weil sie mit Linie 1 kollidiert.

Mit einer Schleife hab ich das schon geschafft, das dauert aber recht lange und ich will dieses Problem so effizient wie möglich lösen.


Danke!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 23.520
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 25.10.2021, 09:22     Titel:
  Antworten mit Zitat      
Hallo,

dann poste doch den Ansatz mit der Schleife? Etwas bestehendes verbessern ist oft leichter als es neu zu schreiben. Ich würde übrigens folgende Vorverarbeitungsschritte erwägen:
1. Wenn in einer Zeile die zweite Zeit kleiner ist als die erste, dann vertausche die Zeiten und die Geradennummern.
2. Sortiere M nach der ersten Zeit. (sortrows)

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
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
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2021 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.