datsexyanon

Untitled

May 3rd, 2014
296
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.88 KB | None | 0 0
  1. function rotateAboutY (vec, length, theta)
  2.     local initialTheta = math.atan(vec.z/vec.x)
  3.     local initialPhi = math.atan((math.sqrt((vec.x)^2 + (vec.z)^2))/vec.y)
  4.     r = vec:magnitude()
  5.     --Calculate new values
  6.     local newLength = r + length
  7.     local newTheta = initialTheta + theta
  8.     local newPhi = initialPhi
  9.     --Convert to Cartesian
  10.     local newX = newLength * math.sin(newPhi) * math.cos(newTheta)
  11.     local newY = newLength * math.cos(newPhi)
  12.     local newZ = newLength * math.sin(newPhi) * math.sin(newTheta)
  13.     --set vector
  14.     local resultant = vector():set(newX, newY, newZ)
  15.  
  16.     return resultant
  17. end
  18.  
  19. function rotateAboutX (vec, length, theta)
  20.     local initialTheta = math.atan(vec.z/vec.y)
  21.     local initialPhi = math.atan((math.sqrt((vec.y)^2 + (vec.z)^2))/vec.x)
  22.     r = vec:magnitude()
  23.     --Calculate new values
  24.     local newLength = r + length
  25.     local newTheta = initialTheta + theta
  26.     local newPhi = initialPhi
  27.     --Convert to Cartesian
  28.     local newX = newLength * math.cos(newPhi)
  29.     local newY = newLength * math.sin(newPhi) * math.sin(newTheta)
  30.     local newZ = newLength * math.sin(newPhi) * math.cos(newTheta)
  31.     --set vector
  32.     local resultant = vector():set(newX, newY, newZ)
  33.  
  34.     return resultant
  35. end
  36.  
  37. function rotateAboutZ (vec, length, theta)
  38.     local initialTheta = math.atan(vec.y/vec.x)
  39.     local initialPhi = math.atan((math.sqrt((vec.x)^2 + (vec.y)^2))/vec.z)
  40.     r = vec:magnitude()
  41.     --Calculate new values
  42.     local newLength = r + length
  43.     local newTheta = initialTheta + theta
  44.     local newPhi = initialPhi
  45.     --Convert to Cartesian
  46.     local newX = newLength * math.sin(newPhi) * math.cos(newTheta)
  47.     local newY = newLength * math.sin(newPhi) * math.sin(newTheta)
  48.     local newZ = newLength * math.cos(newPhi)
  49.     --set vector
  50.     local resultant = vector():set(newX, newY, newZ)
  51.  
  52.     return resultant
  53. end
Advertisement
Add Comment
Please, Sign In to add comment