aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ScriptEngine/Shared/Api/Implementation
diff options
context:
space:
mode:
authorJustin Clark-Casey (justincc)2012-01-06 21:12:22 +0000
committerJustin Clark-Casey (justincc)2012-01-06 21:12:22 +0000
commit8c445dac6778aa2fcfc42736a563e8de101bd817 (patch)
tree12062f27d6cd4181a68a95be5da03d13db15767e /OpenSim/Region/ScriptEngine/Shared/Api/Implementation
parentReplaced llRot2Euler function. (diff)
downloadopensim-SC_OLD-8c445dac6778aa2fcfc42736a563e8de101bd817.zip
opensim-SC_OLD-8c445dac6778aa2fcfc42736a563e8de101bd817.tar.gz
opensim-SC_OLD-8c445dac6778aa2fcfc42736a563e8de101bd817.tar.bz2
opensim-SC_OLD-8c445dac6778aa2fcfc42736a563e8de101bd817.tar.xz
Add script instruction count back to llRot2Euler. Other minor formatting/doc changes.
Diffstat (limited to 'OpenSim/Region/ScriptEngine/Shared/Api/Implementation')
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs14
1 files changed, 12 insertions, 2 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index d6316b2..a35e75f 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -468,10 +468,19 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
468 468
469 //Now we start getting into quaternions which means sin/cos, matrices and vectors. ckrinke 469 //Now we start getting into quaternions which means sin/cos, matrices and vectors. ckrinke
470 470
471 // Using algorithm based off http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToEuler/quat_2_euler_paper_ver2-1.pdf 471 /// <summary>
472 // to avoid issues with singularity and rounding with Y rotation of +/- PI/2 472 /// Convert an LSL rotation to a Euler vector.
473 /// </summary>
474 /// <remarks>
475 /// Using algorithm based off http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToEuler/quat_2_euler_paper_ver2-1.pdf
476 /// to avoid issues with singularity and rounding with Y rotation of +/- PI/2
477 /// </remarks>
478 /// <param name="r"></param>
479 /// <returns></returns>
473 public LSL_Vector llRot2Euler(LSL_Rotation r) 480 public LSL_Vector llRot2Euler(LSL_Rotation r)
474 { 481 {
482 m_host.AddScriptLPS(1);
483
475 LSL_Vector v = new LSL_Vector(0.0, 0.0, 1.0) * r; // Z axis unit vector unaffected by Z rotation component of r. 484 LSL_Vector v = new LSL_Vector(0.0, 0.0, 1.0) * r; // Z axis unit vector unaffected by Z rotation component of r.
476 double m = LSL_Vector.Mag(v); // Just in case v isn't normalized, need magnitude for Asin() operation later. 485 double m = LSL_Vector.Mag(v); // Just in case v isn't normalized, need magnitude for Asin() operation later.
477 if (m == 0.0) return new LSL_Vector(); 486 if (m == 0.0) return new LSL_Vector();
@@ -482,6 +491,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
482 // Rotate X axis unit vector by r and unwind the X and Y rotations leaving only the Z rotation 491 // Rotate X axis unit vector by r and unwind the X and Y rotations leaving only the Z rotation
483 v = new LSL_Vector(1.0, 0.0, 0.0) * ((r * new LSL_Rotation(Math.Sin(-x / 2.0), 0.0, 0.0, Math.Cos(-x / 2.0))) * new LSL_Rotation(0.0, Math.Sin(-y / 2.0), 0.0, Math.Cos(-y / 2.0))); 492 v = new LSL_Vector(1.0, 0.0, 0.0) * ((r * new LSL_Rotation(Math.Sin(-x / 2.0), 0.0, 0.0, Math.Cos(-x / 2.0))) * new LSL_Rotation(0.0, Math.Sin(-y / 2.0), 0.0, Math.Cos(-y / 2.0)));
484 double z = Math.Atan2(v.y, v.x); 493 double z = Math.Atan2(v.y, v.x);
494
485 return new LSL_Vector(x, y, z); 495 return new LSL_Vector(x, y, z);
486 } 496 }
487 497