Einzelnen Beitrag anzeigen

Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#15

AW: 2 Vektoren und 1 Punkt, wo näher drann?

  Alt 6. Apr 2012, 01:09
also gehts dir um den senkrechten Abstand zum Vektor (der im übrigend nicht der kürzeste Abstand sein muss)
Doch, muss er. Bei Strecken (im Gegensatz zu Geraden) kommt allerdings noch hinzu, dass man ggf. gar keinen orthogonalen Abstand zu einem Punkt bilden kann - in dem Fall ist der Abstand zu einem der beiden streckenbegrenzenden Punkten der gesuchte. Glaub mir, darauf basierte ein größerer Teil meiner Bachelorarbeit (Die übrigens nichts mit Spielen zu tun hatte. Man kann das ganze auch total "seriös" anwenden )
Bei Kurven gilt das übrigens nicht mehr, was auch bei mir der Grund war meine Splines in eine Serie von Strecken aufzulösen bevor ich die Abstände berechnet habe. (So ähnlich schaut das beim TE auch aus.) Das ging flotter als Schnitte mit Funktionen 3. Grades (plus Normalenberechnung auf einer kontinuierlichen Funktion), selbst bei Subpixelauflösung. Fazit: So lange alles linear bleibt, ist der orthogonale Abstand auch der kleinste (bzw. kleinst-mögliche).

\\Edit: Lösung:
Berechne die Normale zu deinen "Vektoren" (aka Strecken, aka begrenzten Geraden) nach der von NamenLozer genannten Weise. Bilde mit diesen Normalen eine Gerade, die auf deinem "grünen Punkt" fußt, und berechne die Schnittpunkte zwischen diesen und den von deinen "Vektoren" gebildeten Geraden. Dabei bekommst du jeweils zwei skalare Parameter, einer, der sagt um wie viel der Länge deiner "Vektoren" verschoben der Schnittpunkt liegt (so lange du diese nicht vorher noch umherskalierst). Ist dieser innerhalb (0, 1), dann ist der Abstand zwischen dem Schnittpunkt und deinem grünen Punkt einer der beiden Kandidaten. Dann einfach den Abstand zwischen den 2 Schnittpunkten und deinem grünen berechnen, und der kleinere ist es. (Mit etwas Geschick kann dafür auch der 2. Parameter verwendet werden, aber da in der Regel eh skaliert/normalisiert werden müsste, ist es in der Praxis nahezu gleich schnell einfach die Abstände "naiv" zu berechnen).
Sollte einer/beide der Parameter ausserhalb (0, 1) liegen, musst du den Abstand vom grünen Punkt zu den zwei Randpunkten der betroffenen Strecke(n) bilden, und der kleinere ist dann der Abstand zu der jeweiligen Strecke. Der abschließende Vergleich bleibt natürlich gleich.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)

Geändert von Medium ( 6. Apr 2012 um 02:01 Uhr)
  Mit Zitat antworten Zitat