Projektion von Vektoren bei orthogonaler Ansicht



  • Hallo!

    Ich habe nicht viel Ahnung von Vektoren, aber ich probiere momentan etwas rum. Also haut am besten gleich feste drauf, wenn ich Mist rede 🙂
    Folgendes Problem:

    Ich habe ein 2D Display, welches die Draufsicht auf einen Kartenausschnitt darstellt. Die Strassen sind vereinfacht als gerade Linien (Vektoren) dargestellt. Über die Strassen kann man "Fahren". Der Betrachter sitzt so zu sagen im Auto, dieses Auto ist immer in der Bildmitte dargestellt. Das heisst, das Auto "steht" immer in der Bildmitte, während der Kartenausschnitt entsprechend der Position des Autos mitwandert. (Wie auf einem Navigerät)

    Mein Ziel ist es, die Strassen so zu beschriften, dass der Autofahrer immer den Namen der Strasse auf der er sich gerade befindet und die danebenliegenden angezeigt bekommt. Das Label, die Beschriftung soll mitwandern. Es darf nie passieren, dass die Beschriftung ausserhalb des Blickwinkels liegt.

    Meine Idee:
    Die Position und Richtung des Fahrzeuges möchte ich auf die Strasse projezieren.
    Also für die Strasse habe ich ein (x1/y1) als Start und ein (x2/y2) als Endpunkt. Daraus kann ich mir den Vektor errechnen (V1).
    Für das auto habe ich (x/y) als aktuelle Position und die Rotation (Richtung). Das ist doch dann ein Nullvektor, weil ich nur einen Punkt habe, oder?
    Falls Nullvektor (V2), möchte ich diesen auf den ersten Vektor (V1) projeziern. Und dort wo sich V1 und V2 treffen, soll das Label angezeigt werden.

    Bin ich völlig falsch, hat jemand einen anderen Ansatz?
    Kann mir jemand mit einer Formeln zur Projektion, Richtungsvektor helfen?

    schon mal vielen, vielen Dank!!!



  • <---> schrieb:

    Also für die Strasse habe ich ein (x1/y1) als Start und ein (x2/y2) als Endpunkt. Daraus kann ich mir den Vektor errechnen (V1).
    Für das auto habe ich (x/y) als aktuelle Position und die Rotation (Richtung). Das ist doch dann ein Nullvektor, weil ich nur einen Punkt habe, oder?

    Du befindest dich in einem orthogonalen Koordinatensystem, nehme ich an, der Nullpunkt ist(0/0).
    Dann ist (x1/y1) ein Punkt im Koordinatensystem, oder du kannst dir mit diesem Punkt einen Vektor definieren, mit der Richtung (x1/y1) und dem Betrag
    sqr(x1^2 + y1^2). Das gleiche gilt auch für(x2/y2).
    Dein Vector V1 kannst du also auch darstellen als die Subtraktion der Vektoren(x2/y2) und (x1/y1).

    Dann sollte dir jetzt auch klar sein das dein auto auch ein Vektor ist, und kein Nullvektor.

    Für Nullvektoren gilt: vector a + nullvector = vector a

    Am besten nochmal nachlesen.



  • vielen Dank fürs Antworten!

    Hab nun eine einfachere Idee. Ich möchte gern die orthogonale Projektion eines Punktes (x1/y1) zu einer Geraden ausrechnen.

    Kann mir jemand die Formel oder ein Tutorial zum nachlesen nennen?

    Grüsse,



  • Um einen Vektor b auf einen Vektor a zu projezieren gibt es folgende Formel:
    (ab)a(a)2\frac{(\vec a \cdot \vec b) \cdot \vec a}{(\vec a)^2}

    Edit: Der erste Punkt ist übrigens das Skalarprodukt, der zweite eine Skalarmultiplikation. Das Quadrat ist das Skalarprodukt von a mit sich selbst bzw. das Quadrat des Betrags von a.



  • ich möchte einen Punkt auf einen Vektor projezieren.
    Das müsste doch einfacher (Pytagoras) sein?



  • Die Formel ist allgemeingültig. Du kannst einen Punkt durch seinen Ortsvektor beschreiben. Eine Gerade kannst du durch einen Ortsvektor und einen Richtungsvektor beschreiben. Mit diesem Wissen kannst du die Formel anwenden. Wenn du schon dein ganzes Straßennetz als Vektoren vorliegen hast, wieso dann nicht so?



  • Danke, habs nun endlich verstanden..



  • leider habe ich nun doch Probleme beim rechnen.

    Skalarprodukt und Skalarmultiplikation habe ich verstanden, also das reine ausrechnen.

    Aber ich übergebe das Ergebnis an eine GrafikBib und hier ist es falsch. Also wenn ich Vektor a auf Vektor b abbilde, brauche ich die x, y Werte von a'

    trans->translation.setValue(xWert,yWert,0.0f);
    

    kann mit jemand ein Rechnenbeispiel geben? Bei mir kommt nur Müll raus.

    Ich habe folgende Werte:
    der Vektor, den ich projezieren möchte, hat den x-Wert 42490 und y -11307
    der Vektor, auf den projeziert wird, hat den Startpunkt p1 (-2599/1152) und Ende p2(-641/750)

    Bin für jede Antwort dankbar, stehe total auf dem Schlauch...



  • Ein Vektor hat keinen Startpunkt. Aber du kannst das so machen:
    Wir nennen den Ortsvektor des zu projezierenden Punktes mal p\vec p und die Ortsvektoren der Endpunkte der Strecke mal sb\vec s_b und se\vec s_e. Als erstes tun wir so, als ob die Strecke im Ursprung beginnen würde, d.h. wir verschieben unser ganzes Koordinatensystem um sb\vec s_b. Also:
    p_t=ps_b\vec p\_t =\vec p - \vec s\_b
    Jetzt können wir den transformierten Ortsvektor auf den Vektor zwischen Anfangs- und Endpunkt projezieren. Am Ende müssen wir den Vektor, den wir daraus erhalten noch zurückverschieben.
    x=x_t+s_b\vec x = \vec x\_t + \vec s\_b (xt ist das Ergebnis der Projektion)
    x ist der Ortsvektor des projezierten Punkts.

    Hab nicht rausgefunden, wie ich ' mit Latex so hinkriege, dass es nicht schrottig aussieht, also habe ich p' einfach x genannt.



  • geloescht schrieb:

    Um einen Vektor b auf einen Vektor a zu projezieren gibt es folgende Formel:
    (ab)a(a)2\frac{(\vec a \cdot \vec b) \cdot \vec a}{(\vec a)^2}

    Mal eine Randfrage: Wie kann man diese Formel auf 3D erweitern? (sprich: Ich habe einen Vektor (OP) und möchte ihn senkrecht auf die Ebene projizieren, die von (OA) und (OB) aufgespannt wird)



  • @cstoll:
    angenommen du willst (0C) auf die Ebene <(0A),(0B)> projizieren. (alle lin. unabhängig)
    du projizierst ihn dann erst auf (0A) nach der angegebenen formel und dann auf (0B).
    diese beiden vektoren addierst du zusammen und dann bekommst du den auf die ebene projizierten vektor.
    auf diese weise kannst du das auf beliebige dimensionen ausweiten.



  • Seht ihr den Fehler? Habe ich es immer noch grundsätzlich flasch verstanden?
    Ich bin mir sicher, dass meine Rechnung falsch ist. Denn der projezierte Ortsvektor liegt nicht auf dem, auf den er projeziert wurde.

    Werte:
    der Ortsvektor, den ich projezieren möchte, hat den x-Wert 42490 und y -11307
    der Vektor, auf den projeziert wird, hat sb (-2599/1152) und se(-641/750)
    Ich hoffe ihr könnt es so lesen, habe leider kein latex.

    1. Verschiebung des ganzes Koordinatensystems. pt:

    pt = 42490  -  -2599  = 45089
         -1137     1152     -2289
    

    2. den transformierten Ortsvektor auf den Vektor zwischen Anfangs- und Endpunkt projezieren

    habe zuerst se-sb gerechnet. ergebnis sm:

    1958
    -402
    

    dann skalarprodukt
    sm * pt

    89204440
    

    Skalarmultiplikation:

    89204440 * sm =
    174662293520
    -35860184880
    

    Skalarprodukt sm mit sich selbst:

    3995368

    dann:

    174662293520 *  1/3995368 = 43716,20
    -35860184880                0,04044
    

    3. Zurückverschieben

    43716,20 + -2599 = 41117,2
    0,04044    1152    1152,04
    

    habe es mehrfach durchgerechnet, finde nicht was falsch ist. Kann mir jemand helfen?



  • <---> schrieb:

    der Ortsvektor, den ich projezieren möchte, hat den x-Wert 42490 und y -11307

    pt = 42490  -  -2599  = 45089
         [b]-1137[/b]     1152     -2289
    

    Sieht jemand den Unterschied?



  • oh, danke!!

    Der Rechenweg ansich ist aber richtig, oder?


Anmelden zum Antworten