Here is the vector/rotation code:
Code:
import viz
viz.go()
euler1 = [0,0,30]
euler2 = [0,5,-30]
def ComputeAngleDifference(euler1, euler2):
m = viz.Transform()
#Extract forward/up/side vector from euler1
m.setRot( vizmat.EulerToAxisAngle(euler1) )
d = m.get()
forward1 = d[8:11]
up1 = vizmat.Vector(d[4:7])
#Extract up vector from euler1 without roll
m.setRot( vizmat.EulerToAxisAngle(euler1[0],euler1[1],0.0) )
d = m.get()
up1_no_roll = vizmat.Vector(d[4:7])
#Compute rotation around forward vector of euler1
roll1 = vizmat.AngleBetweenVector(up1,up1_no_roll)
if (up1_no_roll.cross(up1) * forward1) < 0.0:
roll1 *= -1.0
#Extract forward/up/side vector from euler2
m.setRot( vizmat.EulerToAxisAngle(euler2) )
d = m.get()
forward2 = d[8:11]
up2 = vizmat.Vector(d[4:7])
#Extract up vector from euler2 without roll
m.setRot( vizmat.EulerToAxisAngle(euler2[0],euler2[1],0.0) )
d = m.get()
up2_no_roll = vizmat.Vector(d[4:7])
#Compute rotation around forward vector of euler2
roll2 = vizmat.AngleBetweenVector(up2,up2_no_roll)
if (up2_no_roll.cross(up2) * forward2) < 0.0:
roll2 *= -1.0
#Compute angle difference between forward/up/side vectors
forward_diff = vizmat.AngleBetweenVector(forward1,forward2)
rotation_diff = abs(vizmat.AngleDiff(roll1,roll2))
return forward_diff,rotation_diff
print ComputeAngleDifference(euler1,euler2)