aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ScriptEngine/Shared/Api
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/ScriptEngine/Shared/Api')
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs28
1 files changed, 6 insertions, 22 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index f5d5bc6..c315d03 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -5123,37 +5123,21 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
5123 public LSL_Vector llRot2Axis(LSL_Rotation rot) 5123 public LSL_Vector llRot2Axis(LSL_Rotation rot)
5124 { 5124 {
5125 m_host.AddScriptLPS(1); 5125 m_host.AddScriptLPS(1);
5126 double x,y,z; 5126 double x, y, z;
5127 5127
5128 if (rot.s > 1) // normalization needed 5128 if (Math.Abs(rot.s) > 1) // normalization needed
5129 { 5129 rot.Normalize();
5130 double length = Math.Sqrt(rot.x * rot.x + rot.y * rot.y +
5131 rot.z * rot.z + rot.s * rot.s);
5132
5133 rot.x /= length;
5134 rot.y /= length;
5135 rot.z /= length;
5136 rot.s /= length;
5137
5138 }
5139 5130
5140 // double angle = 2 * Math.Acos(rot.s);
5141 double s = Math.Sqrt(1 - rot.s * rot.s); 5131 double s = Math.Sqrt(1 - rot.s * rot.s);
5142 if (s < 0.001) 5132 if (s < 0.001)
5143 { 5133 {
5144 x = 1; 5134 return new LSL_Vector(1, 0, 0);
5145 y = z = 0;
5146 } 5135 }
5147 else 5136 else
5148 { 5137 {
5149 x = rot.x / s; // normalise axis 5138 double invS = 1.0 / s;
5150 y = rot.y / s; 5139 return new LSL_Vector(rot.x * invS, rot.y * invS, rot.z * invS);
5151 z = rot.z / s;
5152 } 5140 }
5153 if ((double.IsNaN(x)) || double.IsInfinity(x)) x = 0;
5154 if ((double.IsNaN(y)) || double.IsInfinity(y)) y = 0;
5155 if ((double.IsNaN(z)) || double.IsInfinity(z)) z = 0;
5156 return new LSL_Vector(x,y,z);
5157 } 5141 }
5158 5142
5159 5143