ich wollte eine Vektoren- und Winkelberechnung machen, um die Eingabe
eines stufenlosen Joystick schöner zu gestalten. Mein Objekt bewegt sich
derzeit mit den gleichen x- und y-Werten wie der Joystick. Die Strecke, die
das Objekt sich bewegt, ist dann aber leider unterschiedlich lang.
- nur Rechts => x = 5
- Rechts und Oben => x = 5 und y= 5
Ich habe es folgendermassen versucht:
- Ich habe einen festen Vektor1 der gerade auf X liegt
- diesen Vergleiche ich mit Vektor2 um den Winkel zwischen beiden heraus zu bekommen (alpha) (Skalarprodukt)
- dann nehme ich den Winkel und schau wie lang einen Einheit nach x und y ist
- nun multipliziere ich den wert des Joysticksausschlages mit der Einheit
Code: Alles auswählen
# |
# |
#-------------------x
# |
# | y
# Winkel zwischen zwei Vektoren:
# Vektor 1 = 10 0 -------------
x1 = 10
y1 = 0
print ' '
print 'x 5 y 5 ---'
# Vektor 2 = User Eingabe = x 5 y 5
x2 = 5
y2 = 5
import math
if (math.sqrt(x1*x1+y1*y1) * math.sqrt(x2*x2+y2*y2)) == 0:
x = 0
y = 0
else:
cosAlpha = (x1*x2 + y1*y2) / (math.sqrt(x1*x1+y1*y1) * math.sqrt(x2*x2+y2*y2))
print 'cosAlpha'
print cosAlpha
alpha = math.cos(cosAlpha)
print 'alpha'
print alpha
x = math.cos(alpha) * x2
y = math.sin(alpha) * y2
print 'x = cos von alpha und y = sin von alpha'
print x
print y
x 5 y 5
cosAlpha
0.707106781187
alpha
0.760244597076
x = cos von alpha und y = sin von alpha
3.62333740445
3.44549358635
hmm x und y sollten eigentlich gleich sein.
x 10 y 0
cosAlpha
1.0
alpha
0.540302305868
x = cos von alpha und y = sin von alpha
8.57553215846
0.0
hmm x sollte 10 sein.
Kann mir jemand n tipp geben?
- Ich denke es liegt am cos von Alpha, wenn der 1 ist sollte Alpha = 0.9999 sein.
-> alpha = math.cos(math.radians(cosAlpha)) wieder in Grad gedacht
aber leider immer noch nicht richtig...