Winkel zwischen zwei Punkten
-
Hi nochmal,
habe jetzt versucht, die Formeln in Code zu konvertieren. Rausbekommen habe ich das hier:
// (x1, y1) und (x2, y2) sind die zweidimensionalen ortsvektoren int cos = (x1 * x2 + y1 * y2) / (sqrtf(x1 * x1 + y1 * y1) * sqrtf(x2 * x2 + y2 * y2)); int sin = sqrtf(1.0f - (cos * cos));
Was rauskommt, stimmt aber nicht (oder ich kapier's nicht). Wie kann der Winkel von einem zum anderen Vektor genauso sein wie umgekehrt?
Das ganze ist übrigens für 2D-Auto-Aiming gedacht.
thx
-
Ups, sin und cos sind natürlich auch float.
-
*push*
-
Öppaken schrieb:
Was rauskommt, stimmt aber nicht (oder ich kapier's nicht). Wie kann der Winkel von einem zum anderen Vektor genauso sein wie umgekehrt?
Wie kann er denn verschieden sein?
Generell wäre es hilfreich, wenn Du ein bißchen ausführlicher erklärst was Du machen willst. Ich werde aus dem was Du schreibst jedenfalls nicht schlau.
-
Wie gesagt, ich brauche den Winkel (oder auch nur Sinus/Kosinus) von einem Ortsvektor (a) zum anderen (b). Benutzen möchte ich das ganze, um den Vektor (a) in die Richtung des Vektors (b) zu schiessen.
Hier mal eine Grafik: Grafik
-
Öppaken schrieb:
Hier mal eine Grafik: Grafik
sieht so aus als bräuchtest du 'nen 'verbindungsvektor' http://de.wikipedia.org/wiki/Vektor#Addition_und_Subtraktion
-
net schrieb:
Öppaken schrieb:
Hier mal eine Grafik: Grafik
sieht so aus als bräuchtest du 'nen 'verbindungsvektor' http://de.wikipedia.org/wiki/Vektor#Addition_und_Subtraktion
Aber was hat das denn mit der Richtung zu tun?
-
Wenn du einfach (a)-(b) rechnest, dann hast du einen Richtungsvektor der von b aus nach a geht. Wenn du also von b aus nach a "wandern willst", dann nimmst du einfach eine einfache Geradengleichung mit b als Ortsvektor und dem Vektor (a)-(b) als Richtungsvektor und schon kannst du die Punkt die auf der Geraden von a nach b liegen entlangwandern bzw. dein Geschoss entlangwandern lassen.
-
lolz schrieb:
Wenn du einfach (a)-(b) rechnest, dann hast du einen Richtungsvektor der von b aus nach a geht. Wenn du also von b aus nach a "wandern willst", dann nimmst du einfach eine einfache Geradengleichung mit b als Ortsvektor und dem Vektor (a)-(b) als Richtungsvektor und schon kannst du die Punkt die auf der Geraden von a nach b liegen entlangwandern bzw. dein Geschoss entlangwandern lassen.
Jo, aber ich brauche den Sinus oder Kosinus. Das Ganze soll in einem bereits bestehenden System laufen, welches ich nicht umändern kann.
-
Kannst Du in der Zeichnung mal noch den Winkel markieren, den Du messen möchtest? Mir ist generell unklar, wo zwischen 2 Punkten ein Winkel sein soll.
-
Jester schrieb:
Kannst Du in der Zeichnung mal noch den Winkel markieren, den Du messen möchtest? Mir ist generell unklar, wo zwischen 2 Punkten ein Winkel sein soll.
Vielleicht rede ich auch totalen Schwachsinn, was die ganzen Bezeichnungen angeht. Aber meinen tue ich das hier.
-
Ich könnte doch (a) von (b) subtrahieren, dann normalisieren und aus dem normalisierten Richtungsvektor den Sinus und Kosinus berechnen, oder?
-
Mal dir doch einfach mal nen Einheitskreis auf.
-
Aha, also den Winkel zur X-Achse... nun wird schon klarer was Du willst.
a-b ist der Verbindungsvektor. Dann brauchste den Winkel zwischen a-b und dem Vektor (1,0). Das geht dann zum Beispiel mit der Formel.
Es ist cos(alpha) = erste Komponenten von (a-b) / Länge von (a-b).
Allerdings mißt das wohl noch den kleineren Winkel, kann also sein, daß Du noch ein Minus spendieren mußt.MfG Jester