2017-03-16 3 views

Répondre

1

La rotation en quatre dimensions dont vous parlez est probablement appelée quaternion. Quand on parle de tourner autour de chaque axe dans un espace 3D, on appelle les angles d'Euler. Wikipedia has page sur ces conversions, qui comprend cette source python:

class Quaternion_toEulerianAngle(): 
    def __init__(self, x, y, z, w): 
     self.x = x 
     self.y = y 
     self.z = z 
     self.w = w 

    def X(self): 
     ysqr = self.y*self.y 

     t0 = +2.0 * (self.w * self.x + self.y*self.z) 
     t1 = +1.0 - 2.0 * (self.x*self.x + ysqr) 
     X = math.degrees(math.atan2(t0, t1)) 

     return X 

    def Y(self): 
     ysqr = self.y*self.y 

     t2 = +2.0 * (self.w*self.y - self.z*self.x) 
     t2 = 1 if t2 > 1 else t2 
     t2 = -1 if t2 < -1 else t2 
     Y = math.degrees(math.asin(t2)) 

     return Y 

    def Z(self): 
     ysqr = self.y*self.y 

     t3 = +2.0 * (self.w * self.z + self.x*self.y) 
     t4 = +1.0 - 2.0 * (ysqr + self.z*self.z) 
     Z = math.degrees(math.atan2(t3, t4)) 

     return Z