From 6ac02854aa1c47ac4053c22632d2ebd65c30357a Mon Sep 17 00:00:00 2001 From: Sei Lisa Date: Mon, 23 Jan 2017 16:39:58 +0100 Subject: [PATCH] Fix llRot2Euler's return types. It didn't return Vector in the singularity case. Also, it neglected to truncate the result to single precision. --- lslopt/lslbasefuncs.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lslopt/lslbasefuncs.py b/lslopt/lslbasefuncs.py index a910567..1b0cab1 100644 --- a/lslopt/lslbasefuncs.py +++ b/lslopt/lslbasefuncs.py @@ -1584,15 +1584,15 @@ def llRot2Euler(r): # Check gimbal lock conditions if abs(y) > 0.99999: - return (0., math.asin(y), math.atan2(2.*(r[2]*r[3]+r[0]*r[1]), - 1.-2.*(r[0]*r[0]+r[2]*r[2]))) + return Vector(F32((0., math.asin(y), math.atan2(2.*(r[2]*r[3]+r[0]*r[1]), + 1.-2.*(r[0]*r[0]+r[2]*r[2]))))) qy2 = r[1]*r[1] - return Vector(( + return Vector(F32(( math.atan2(2.*(r[0]*r[3]-r[1]*r[2]), 1.-2.*(r[0]*r[0]+qy2)), math.asin(y), math.atan2(2.*(r[2]*r[3]-r[0]*r[1]), 1.-2.*(r[2]*r[2]+qy2)) - )) + ))) def llRot2Fwd(r): assert isrotation(r)