diff options
-rw-r--r-- | OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs index 0c17a90..e9ee937 100644 --- a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs +++ b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs | |||
@@ -392,8 +392,8 @@ namespace OpenSim.Region.ScriptEngine.Shared | |||
392 | #region Methods | 392 | #region Methods |
393 | public Quaternion Normalize() | 393 | public Quaternion Normalize() |
394 | { | 394 | { |
395 | double length = Math.Sqrt(x * x + y * y + z * z + s * s); | 395 | double lengthsq = x * x + y * y + z * z + s * s; |
396 | if (length < float.Epsilon) | 396 | if (lengthsq < float.Epsilon) |
397 | { | 397 | { |
398 | x = 0; | 398 | x = 0; |
399 | y = 0; | 399 | y = 0; |
@@ -403,7 +403,7 @@ namespace OpenSim.Region.ScriptEngine.Shared | |||
403 | else | 403 | else |
404 | { | 404 | { |
405 | 405 | ||
406 | double invLength = 1.0 / length; | 406 | double invLength = 1.0 / Math.Sqrt(lengthsq); |
407 | x *= invLength; | 407 | x *= invLength; |
408 | y *= invLength; | 408 | y *= invLength; |
409 | z *= invLength; | 409 | z *= invLength; |
@@ -474,7 +474,8 @@ namespace OpenSim.Region.ScriptEngine.Shared | |||
474 | { | 474 | { |
475 | // LSL quaternions can normalize to 0, normal Quaternions can't. | 475 | // LSL quaternions can normalize to 0, normal Quaternions can't. |
476 | if (rot.s == 0 && rot.x == 0 && rot.y == 0 && rot.z == 0) | 476 | if (rot.s == 0 && rot.x == 0 && rot.y == 0 && rot.z == 0) |
477 | rot.z = 1; // ZERO_ROTATION = 0,0,0,1 | 477 | return OMV_Quaternion.Identity; // ZERO_ROTATION = 0,0,0,1 |
478 | |||
478 | OMV_Quaternion omvrot = new OMV_Quaternion((float)rot.x, (float)rot.y, (float)rot.z, (float)rot.s); | 479 | OMV_Quaternion omvrot = new OMV_Quaternion((float)rot.x, (float)rot.y, (float)rot.z, (float)rot.s); |
479 | omvrot.Normalize(); | 480 | omvrot.Normalize(); |
480 | return omvrot; | 481 | return omvrot; |
@@ -510,6 +511,7 @@ namespace OpenSim.Region.ScriptEngine.Shared | |||
510 | 511 | ||
511 | public static Quaternion operator /(Quaternion a, Quaternion b) | 512 | public static Quaternion operator /(Quaternion a, Quaternion b) |
512 | { | 513 | { |
514 | // assuming normalized | ||
513 | b.s = -b.s; | 515 | b.s = -b.s; |
514 | return a * b; | 516 | return a * b; |
515 | } | 517 | } |