Ich würde gerne den Schnittpunkt von Geraden berechnen. Ich weiß natürlich dass das alleine einfach geht indem man die Geradengleichungen gleichsetzt.
Mein Problem ist aber, dass ich sehr sehr viele Geraden habe (>30000) und ich eigentlich nur den nähesten Schnittpunkt meiner Referenzgeraden (rot im Beispiel) mit einer anderen Geraden brauche.
Diese Geradenberechnung ist bei mir ein Teil in einer großen Schleife und wird auch noch sehr oft gerechnet, also will ich nicht jedes Mal den Schnitpunkt meiner Gerade mit allen Geraden berechnen und den nähesten suchen, da das ziemlich viel Rechenzeit kostet.
Ich habe die Koordinaten meiner Anfangs- und Endpunkte sowie die Winkel aller Geraden. Da muss es doch etwas geben dass ich nur bestimmte Geraden auswähle und nur zu denen die Schnittpunktsberechnung mache?? Das würde mir einiges an Rechenzeit ersparen!
Ich weiß, dass ich nicht nach einem Schnittpunkt mit den Geraden ganz rechts aussen suchen muss (siehe Beispiel) da ich weiß, dass meine Gerade sicher eine näher gelegene vorher schneiden wird.
Ich wäre sehr dankbar wenn mir das jemand zeigen könnte!
Mein Code ist über 1000 Zeilen lang und Teil eines grossen Projektes.
Ok, etwas genauer vielleicht. Ich hab meine Skizze etwas geändert: Meine Rote Linie wächst im laufe der Zeit und ich will prüfen ob sich in dem Bereich vor der Linie schon eine andere befindet, also ob diese Linie wo anstößt.
Das würde ich brauchen, so effizient wie möglich...
ich wage zu behaupten, dass der relevante Code keine 1000 Zeilen sind und dass die Berechnung an einer bestimmten, zusammengefassten Stelle auftritt.
Habe mit einem Mathe-Abi-Buch ein Programm zur Überprüfung der Abstände von zwei Geometrien geschrieben. Es ist, wie Du schon sagst, recht simple Mathematik. Und wenn ich jedes Dreieck mit jedem anderen vergleiche, dann bräuchte ich zwei Schleifen und 5 Jahre.
Aber Vektorisierung reduziert es in jedem Fall auf 1 Schleife. Und bei 70.000 Dreiecken zu 50.000 Dreiecken rechnet er trotzdem nur < 30 Minuten.
Ich würde um den Endpunkt einen Kreis definieren und schauen, ob da was drin ist. Wenn ja, dann prüfe auf echten Schnittpunkt. Wenn nein, dann ignorieren. Wenn Du noch einen Halbkreis draus machen kannst, dann umso besser, dann werden Strecken, die hinter dem aktuellen Punkt aber im Umkreis liegen, nicht mehr betrachtet.
Gruß,
yankemen
_________________
Gibt es ein Ist und ein Wunsch-Soll? Gibt es Beispiele zum Durchprobieren? Wenn selbstgeschriebene Funktionen aufgerufen werden: können sie bitte angehangen werden? Gab es Fehlermeldungen?
Stimmen die Werte, wenn der Debugger mit Haltepunkten etc. eingesetzt wird?
Danke
Ok, dieser Teil der Berechnung ist in einer function ausgegliedert. Ich habe eine Matrix M die alle Daten der Geraden enthält. Jede Zeile in M ist eine Gerade.
Jetzt bin ich z.B. bei Linie 5 (also Zeile 5 in M) und will am ende der Linie (x_ende, y_ende) prüfen ob innerhalb eines Bereichs mit dem Radius R ein anderes Liniensegment drinnenliegt.
Den Schnittpunkt zweier Geraden zu berechnen ist leicht, aber wie bekomme ich den minimalen Abstand von einem Punkt zu einem Liniensegment?
Ich hoffe ich konnte es jetzt deutlicher erklären.
Ich würde um den Endpunkt einen Kreis definieren und schauen, ob da was drin ist...
So denke ich mir das auch, aber wenn ich nur die Anfangs und Endpunkte meiner Linien hab weis ich ja nicht ob ein Teil der Linie in diesem Kreis liegt...
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
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.