0 Daumen
801 Aufrufe


also ich hab folgendes Problem:

Ich möchte etwas programmieren, wobei ich einen Punkt (Spieler) vorgegeben habe und ich möchte 5 Meter rechts vom Punkt landen.

Der Punkt hat die Koordinaten x und y(diese werden vom Programm ermittelt, sind also bekannt) und einen Winkel Wz . Der Winkel reicht (selbstverständlich) von 0-360° und gibt die Blickrichtung an. Das Koordinatensystem ist fest, richtet sich also nicht nach der Blickrichtung des Spielers. Meine Frage ist nun, wie kann ich rechts vom Spieler landen ?

Meiner Meinung nach fehlt noch eine Bekannte, denn ich habe jetzt r = 5 (ich möchte 5 Meter rechts vom Spieler landen), den Winkel und die beiden Koordinaten x + y, welche eben verändert werden müssen, sodass ein Punkt 5 Meter rechts vom Spieler entsteht.

Irgendwelche Ideen ? Ich häng jetzt seit gut 5 Stunden da dran und hab es nicht hinbekommen.

r² = x² + y²  ist alles was ich bis jetzt habe, jedoch wird der Winkel hierbei nicht berücksichtigt und ich kann x und y natürlich nicht ermitteln (also genau genommen, die Werte die hinterher auf die Koordinaten von x und y drauf gerechnet werden)
Avatar von

1 Antwort

0 Daumen

Also, ich fasse das mal zusammen, ja? (Ich bediene mich dabei bei ein paar Grundbegriffen der Vektorrechnung.)
Du hast ein 2-dimensionales Koordinatensystem und zwei Vektoren:
Den Ortsvektor (x, y) eines Punktes P und einen Richtungsvektor w=(u,v), der die Blickrichtung angibt.

Da für die Blickrichtung der Betrag des Vektors irrelevant ist, kann man seinen Betrag auf 1 normieren. Außerdem möchtest du ihn gerne in Polarkoordinaten angeben, das heißt in einer Darstellung, in der Winkel und Länge des Vektors gegeben sind.

Ich nehme mal an, dass der Winkel in Bezug auf die x-Achse gegeben ist, in mathematisch positiver Zählweise also gegen den Uhrzeigersinn. Das ist nämlich das Standardbezugssystem.

Der Vektor w hat dann die Darstellung

w = r*(cos φ, sin φ)

Bzw. mit der Normierung auf die Länge r=1:

w = (cos φ, sin φ)

P = (x, y)

sind also die gegebenen Größen.

Gesucht ist nun ein Punkt P' für den gilt:
|P'-P|=5

P'-P ⊥ w

Und dazu die mathematisch etwas schwer zu formulierende Forderung, dass P' "rechts" von der Blickrichtung liegt. Man könnte das so formulieren:
PP'* x w* = (0,0,1)

wobei unter w* und PP'* die Erweiterung auf eine dritte Dimension durch hinzufügen einer beliebigen aber identischen z-Komponente der beiden Vektoren ist.

 

Soviel zur Ausgangssituation, die Lösung ist eigentlich relativ leicht und bedient sich wieder dem Konzept der Polarkoordinaten:

Damit P'-P (also der Verbindungsvektor zwischen den beiden Punkten) senkrecht auf w steht, muss offenbar |ψ-φ|=90° gelten, wobei ψ der Winkel des Verbindungsvektors ist. Seine Länge ist außerdem r=5.

Damit ergibt sich für den Verschiebungsvektor eine von zwei Möglichkeiten:

P'-P = 5*(cos(φ±90°), sin(φ±90°))

Zeichnet man sich die beiden Möglichkeiten auf, so erkennt man, dass die mit dem Minus der entspricht, für die der Punkt P' rechts neben der Blickrichtung liegt.

Verwendet man jetzt noch

cos(φ-90°) = sin(φ)

sin(φ-90°) = -cos(φ)
was man z.B. aus den Additionstheoremen oder durch Zeichnen und nach rechts verschieben der beiden Funktionen beweisen kann, so erhält man:
P' - P = 5*(sin(φ), -cos(φ))
P' = P + 5*(sin φ, -cos φ)

P' = (x+5*sin φ, y-5*cos φ)

als Endergebnis.

 

Kleiner Nachtrag:
Falls in deiner Programmiersprache Sinus und Cosinus nicht implementiert sind, kannst du sie durch eine Reihenentwicklung approximieren.

sin x ≈ x - x3/3! + x5/5! - x7/7! + ...

cos x ≈ 1 - x2/2! + x4/4! - x6/6! + ...

Je mehr Summanden man verwendet, desto genauer wird der Ausdruck. Bei unendlich vielen konvergiert die Reihe gegen den exakten Wert.

Allerdings ist wichtig, dass diese Reihenentwicklung nur für Winkel im Bogenmaß richtig ist. Falls du weiterhin das Gradmaß verwenden willst, musst du den Winkel mit dem Dreisatz umrechnen.

x = 2π/360° * φ

wobei φ der Winkel im Gradmaß und x der Winkel im Bogenmaß ist.

Avatar von 10 k
Erstmal vielen dank für den komplexen Lösungsweg, ich hätte nicht gedacht dass ich mir da so eine Bombe gelegt habe.

Die Programmiersprache ist lua und hat Sinus und Cosinus standardmäßíg implementiert, aber auch danke dafür ;)

Ich habe lediglich noch ein Problem hiermit: φ

Also so wie ich es verstanden habe beträgt der Polarwinkel zB 359°, wenn der Spieler in Richtung 1° guckt. (weil man von 0 Grad aus eben 359° gegen den Uhrzeigersinn bis 1° wandern muss)

Habe ich das richtig verstanden ?

Und nochmal vielen dank !

 

p.s.: Habe mir für den Kommentar schnell nen Account gemacht
Also, die Frage ist nur, in welche Richtung du die Winkel zählst:
Ich zähle mal ein paar Blickrichtungen in "meinem" System auf:

Wenn man von oben auf Koordinatensystem guckt nach rechts, also in Richtung der positiven x-Achse: 0°

In Richtung der positiven y-Achse: 90°

In Richtung der negativen x-Achse: 180°

In Richtung der negativen y-Achse: 270°

 

Und der Rest dann eben entsprechend dazwischen.

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Mathelounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community