diff options
author | Justin Clark-Casey (justincc) | 2012-01-06 21:12:22 +0000 |
---|---|---|
committer | Justin Clark-Casey (justincc) | 2012-01-06 21:12:22 +0000 |
commit | 8c445dac6778aa2fcfc42736a563e8de101bd817 (patch) | |
tree | 12062f27d6cd4181a68a95be5da03d13db15767e /OpenSim/Region/ScriptEngine/Shared/Api | |
parent | Replaced llRot2Euler function. (diff) | |
download | opensim-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')
-rw-r--r-- | OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | 14 |
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 | ||