2016-04-12 7 views
0

Ich möchte ein 2D-Spiel in Pygame machen, und dazu möchte ich mathematische Matrizen verwenden. Ich dachte, ich denke richtig, aber ich habe ein Problem. Hier ist es: Also mache ich einen zufälligen Punkt und ich zähle die Länge seines Vektors (von 0,0), dann möchte ich mit Hilfe der Gleichung der Matrix-Verschiebung (2D) diesen Punkt verschieben, sagen wir mal +1 Grad. Und ich habe ein Ergebnis, aber warte, warum ist die Länge des übertragenen Vektors anders als die andere? Alle Antworten zu erkennen ist, thx :)Matrix-Rotation in numpy Python, verschiedene Länge des Vektors

Hier ist mein Code:

import numpy 
import math 
import random 

#length of wector  
def R(w0): 
    #start point coordinates 
    x0 = y0 = 0 
    #new point coordinates  
    x1 = w0[0][0] 
    y1 = w0[1][0] 
    r = math.sqrt((x1 - x0)**2 + (y1-y0)**2) 
    return r 

#matrix rotation by 1 deg 
rad = math.pi/180 
Tm = numpy.matrix([[math.acos(rad),-math.asin(rad)], [math.asin(rad), math.acos(rad)]]) 

#w0 
x0 = random.randint(1, 5) 
y0 = random.randint(1, 5) 

w0 = numpy.matrix([[x0],[y0]]) 
r0 = R(w0) 

print "x0: ",w0[0][0], "y0: ",w0[1][0], "r0: ", r0 
#w0' 

w1 = Tm * w0 
r1 = R(w1) 
print "x1: ",w1[0][0], "y1: ",w1[1][0], "r1: ", r1 

Da u sehen können, die r0 und r1 sind diffrent:/

Antwort

1

Sie verwenden die arccos und arcsin statt der cos und sin in Ihrer Rotationsmatrix. Fix das und die beiden Vektoren haben die gleiche Länge, wie sie sollten.

Sie können auch np.linalg.norm für die Vektorlänge verwenden.

+0

thx! es funktioniert jetzt gut: D –