View Single Post
#6
05-23-2013, 03:20 AM
 4711 Member Join Date: Jan 2010 Posts: 15
I wrote some code myself to solve the problem:

Code:
```import math
import viz

# --- REQUIRED FUNCTIONS --- #

def Angle2Euler( angle ):

euler = 0

# Not defined for negative values
if angle < 0:
return 0

# Calculate 'euler' depending on quadrant
else:
if angle <= 90:
# Q1
euler = 90 - angle
elif angle <= 270:
# Q2 & Q3
euler = -( angle-90 )
else:
# Q4
euler = 360 - angle + 90

return euler

def Cart2Pol( x, y, unit='rad' ):

r = math.sqrt( math.pow(x,2) + math.pow(y,2) )

# Angle in [rad]
t = math.atan2( y ,x )

# Angle in [deg]
if unit.lower() == 'deg':
t = math.degrees( math.atan(float(y)/float(x)) )
if x < 0:
t += 180 # Q2 & Q3
elif x > 0 and y < 0:
t += 360 # Q4

return r, t

def LookAt( Target ):

# Get current position and orientation
Pos = viz.MainView.getPosition()
Ori = viz.MainView.getEuler()

# Define position as 2D point 'P'
P = [Pos[0], Pos[2]]

# Define target as 2D point 'T'
T = [Target[0], Target[2]]

# Shift 'P' into origin (= 'P0') and
# move 'T' accordingly (= 'T0')
T0 = [T[0]-P[0], T[1]-P[1]]

# Get location of 'T0' as polar angle
angle = Cart2Pol( T0[0], T0[1], 'deg' )[1]

# Convert angle to Vizard's Euler style
euler = Angle2Euler( angle )

# Create rotation action towards target
rotation = vizact.spinTo( euler=[euler,0,0], time=2 )

# Apply rotation to MainView
viz.MainView.runAction( rotation )

# --- AN EXAMPLE --- #

# Go!