Vektor auf einen zweiten projizieren? [GELÖST]

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

ComNik

Betreff: Vektor auf einen zweiten projizieren? [GELÖST]

BeitragFr, Feb 26, 2010 17:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Huhu,

Ich hänge gerade bei dem Versuch, einen Punkt orthogonal auf eine Strecke zu projizieren.

Ich hatte folgenden Ansatz:

Die Funktion soll mir den Ursprung (also einfach (0|0)) auf eine beliebige Strecke projizieren.
Die Strecke wird in der Funktion durch a) axisO = Startvektor der Strecke und b) Vektor der Strecke.
Zurückgegeben werden soll der Punkt auf der Strecke der am nächsten (also einfach Lotrecht) zum Ursprung ist.

Intern wird a auf b projiziert.

Nach einigem googeln und lesen:
BlitzMax: [AUSKLAPPEN]

Function ProjectOnAxis:TVector2D(axisO:TVector2D,axis:TVector2D)
Local b:TVector2D = CreateVector(axis.x,axis.y)
b.Normalize()

Local a:TVector2D = CreateVector(-(axisO.x+axis.x),-(axisO.y+axis.y))
Local proj:TVector2D = New TVector2D

Local tmp:Float = a.ScalarProduct(axis)/axis.Length()

proj.Init(tmp*b.x,tmp*b.y)

proj.x:+ axis0.x+axis.x
proj.y:+ axis0.y+axis.y

Return proj
End Function


Ich habe aber inzwischen den Überblick verloren (weil ich zuviele verschiedene Quellen gelesen habe...)
und es kommen komplett falsche Punkte raus. Skizzieren und ausrechnen auf dem Papier haben mich der
Lösung auch nicht näher gebracht.

Muss kein Code sein, lediglich die Vorgehensweise (damit ich das endlich mal verstehe...).

Vielen Dank Smile
ComNik
WIP: Vorx.Engine
  • Zuletzt bearbeitet von ComNik am Sa, Feb 27, 2010 0:30, insgesamt einmal bearbeitet

mpmxyz

BeitragFr, Feb 26, 2010 23:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Seltsam, dass keiner hier schon etwas geantwortet hat...
Zu hohe Mathematik? Wink
Code: [AUSKLAPPEN]
s0=Startvektor der Strecke
s=Streckenvektor

StreckenRichtung=Normalize(Streckenvektor)
Projektionslänge=ScalarProduct(StreckenRichtung,-s0)
'Ein normalisierter Vektor mal ein anderer Vektor ergibt die Länge der Projektion des anderen Vektors auf den normalisierten Vektor.
'-s0 wird gebraucht, da der Vektor vom Startpunkt zum Ursprung - und nicht umgekehrt - gebraucht wird.
'Wenn der Punkt auf alle Fälle auf der Strecke liegen soll musst du das Ergebnis der Projektionslänge einschränken.
Punkt=s0+StreckenRichtung*Projektionslänge

mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer

ComNik

BeitragSa, Feb 27, 2010 0:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke sehr,

hatte es inzwischen so halb raus, nur das mit dem Normalisieren hatte ich nicht verstanden.
Insofern doppelten Dank für die Erklärung (:

Funktioniert perfekt,
lg
ComNik
WIP: Vorx.Engine

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group