|
|
Indizierung für bestimmtes Problem (Geradenschnittpunkt) |
|
Matlab88 |
Forum-Newbie
|
|
Beiträge: 2
|
|
|
|
Anmeldedatum: 22.10.21
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 22.10.2021, 14:22
Titel: Indizierung für bestimmtes Problem (Geradenschnittpunkt)
|
|
|
|
|
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:
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:
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
|
|
|
|
|
aemon |
Forum-Anfänger
|
|
Beiträge: 21
|
|
|
|
Anmeldedatum: 26.10.17
|
|
|
|
Wohnort: Niedersachsen
|
|
|
|
Version: R2019a / R2021a
|
|
|
|
|
|
Verfasst am: 23.10.2021, 13:07
Titel:
|
|
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)
|
|
|
Matlab88 |
Themenstarter
Forum-Newbie
|
|
Beiträge: 2
|
|
|
|
Anmeldedatum: 22.10.21
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 25.10.2021, 08:12
Titel:
|
|
|
|
|
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!
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 25.10.2021, 09:22
Titel:
|
|
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 ;)
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|