View Single Post
  #14  
Old 02-16-2007, 05:41 PM
farshizzo farshizzo is offline
WorldViz Team Member
 
Join Date: Mar 2003
Posts: 2,849
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)
Reply With Quote