Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function rotateAboutY (vec, length, theta)
- local initialTheta = math.atan(vec.z/vec.x)
- local initialPhi = math.atan((math.sqrt((vec.x)^2 + (vec.z)^2))/vec.y)
- r = vec:magnitude()
- --Calculate new values
- local newLength = r + length
- local newTheta = initialTheta + theta
- local newPhi = initialPhi
- --Convert to Cartesian
- local newX = newLength * math.sin(newPhi) * math.cos(newTheta)
- local newY = newLength * math.cos(newPhi)
- local newZ = newLength * math.sin(newPhi) * math.sin(newTheta)
- --set vector
- local resultant = vector():set(newX, newY, newZ)
- return resultant
- end
- function rotateAboutX (vec, length, theta)
- local initialTheta = math.atan(vec.z/vec.y)
- local initialPhi = math.atan((math.sqrt((vec.y)^2 + (vec.z)^2))/vec.x)
- r = vec:magnitude()
- --Calculate new values
- local newLength = r + length
- local newTheta = initialTheta + theta
- local newPhi = initialPhi
- --Convert to Cartesian
- local newX = newLength * math.cos(newPhi)
- local newY = newLength * math.sin(newPhi) * math.sin(newTheta)
- local newZ = newLength * math.sin(newPhi) * math.cos(newTheta)
- --set vector
- local resultant = vector():set(newX, newY, newZ)
- return resultant
- end
- function rotateAboutZ (vec, length, theta)
- local initialTheta = math.atan(vec.y/vec.x)
- local initialPhi = math.atan((math.sqrt((vec.x)^2 + (vec.y)^2))/vec.z)
- r = vec:magnitude()
- --Calculate new values
- local newLength = r + length
- local newTheta = initialTheta + theta
- local newPhi = initialPhi
- --Convert to Cartesian
- local newX = newLength * math.sin(newPhi) * math.cos(newTheta)
- local newY = newLength * math.sin(newPhi) * math.sin(newTheta)
- local newZ = newLength * math.cos(newPhi)
- --set vector
- local resultant = vector():set(newX, newY, newZ)
- return resultant
- end
Advertisement
Add Comment
Please, Sign In to add comment