remove non-static Normalize + return identity on zero vector
							parent
							
								
									80f3711f4c
								
							
						
					
					
						commit
						8209051a3c
					
				|  | @ -996,8 +996,8 @@ namespace MoonWorks.Math.Fixed | ||||||
| 			z = Vector3.Normalize(forward); | 			z = Vector3.Normalize(forward); | ||||||
| 			Vector3.Cross(ref forward, ref up, out x); | 			Vector3.Cross(ref forward, ref up, out x); | ||||||
| 			Vector3.Cross(ref x, ref forward, out y); | 			Vector3.Cross(ref x, ref forward, out y); | ||||||
| 			x.Normalize(); | 			x = Vector3.Normalize(x); | ||||||
| 			y.Normalize(); | 			y = Vector3.Normalize(y); | ||||||
| 
 | 
 | ||||||
| 			result = new Matrix4x4(); | 			result = new Matrix4x4(); | ||||||
| 			result.Right = x; | 			result.Right = x; | ||||||
|  |  | ||||||
|  | @ -214,23 +214,6 @@ namespace MoonWorks.Math.Fixed | ||||||
| 			); | 			); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		/// <summary> |  | ||||||
| 		/// Scales the quaternion magnitude to unit length. |  | ||||||
| 		/// </summary> |  | ||||||
| 		public void Normalize() |  | ||||||
| 		{ |  | ||||||
| 			Fix64 num = Fix64.One / (Fix64.Sqrt( |  | ||||||
| 				(X * X) + |  | ||||||
| 				(Y * Y) + |  | ||||||
| 				(Z * Z) + |  | ||||||
| 				(W * W) |  | ||||||
| 			)); |  | ||||||
| 			this.X *= num; |  | ||||||
| 			this.Y *= num; |  | ||||||
| 			this.Z *= num; |  | ||||||
| 			this.W *= num; |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		/// <summary> | 		/// <summary> | ||||||
| 		/// Returns a <see cref="String"/> representation of this <see cref="Quaternion"/> in the format: | 		/// Returns a <see cref="String"/> representation of this <see cref="Quaternion"/> in the format: | ||||||
| 		/// {X:[<see cref="X"/>] Y:[<see cref="Y"/>] Z:[<see cref="Z"/>] W:[<see cref="W"/>]} | 		/// {X:[<see cref="X"/>] Y:[<see cref="Y"/>] Z:[<see cref="Z"/>] W:[<see cref="W"/>]} | ||||||
|  | @ -759,12 +742,16 @@ namespace MoonWorks.Math.Fixed | ||||||
| 		/// <param name="result">The unit length quaternion an output parameter.</param> | 		/// <param name="result">The unit length quaternion an output parameter.</param> | ||||||
| 		public static void Normalize(ref Quaternion quaternion, out Quaternion result) | 		public static void Normalize(ref Quaternion quaternion, out Quaternion result) | ||||||
| 		{ | 		{ | ||||||
| 			Fix64 num = Fix64.One / (Fix64.Sqrt( | 			Fix64 lengthSquared = (quaternion.X * quaternion.X) + (quaternion.Y * quaternion.Y) + | ||||||
| 				(quaternion.X * quaternion.X) + | 			                      (quaternion.Z * quaternion.Z) + (quaternion.W * quaternion.W); | ||||||
| 				(quaternion.Y * quaternion.Y) + | 
 | ||||||
| 				(quaternion.Z * quaternion.Z) + | 			if (lengthSquared == Fix64.Zero) | ||||||
| 				(quaternion.W * quaternion.W) | 			{ | ||||||
| 			)); | 				result = Identity; | ||||||
|  | 				return; | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			Fix64 num = Fix64.One / Fix64.Sqrt(lengthSquared); | ||||||
| 			result.X = quaternion.X * num; | 			result.X = quaternion.X * num; | ||||||
| 			result.Y = quaternion.Y * num; | 			result.Y = quaternion.Y * num; | ||||||
| 			result.Z = quaternion.Z * num; | 			result.Z = quaternion.Z * num; | ||||||
|  |  | ||||||
|  | @ -1,105 +0,0 @@ | ||||||
| namespace MoonWorks.Math.Fixed |  | ||||||
| { |  | ||||||
| 	public struct Transform2D : System.IEquatable<Transform2D> |  | ||||||
| 	{ |  | ||||||
| 		public Vector2 Position { get; } |  | ||||||
| 		public Fix64 Rotation { get; } |  | ||||||
| 		public Vector2 Scale { get; } |  | ||||||
| 
 |  | ||||||
| 		private bool transformMatrixCalculated; |  | ||||||
| 		private Matrix3x2 transformMatrix; |  | ||||||
| 
 |  | ||||||
| 		public Matrix3x2 TransformMatrix |  | ||||||
| 		{ |  | ||||||
| 			get |  | ||||||
| 			{ |  | ||||||
| 				if (!transformMatrixCalculated) |  | ||||||
| 				{ |  | ||||||
| 					transformMatrix = CreateTransformMatrix(Position, Rotation, Scale); |  | ||||||
| 					transformMatrixCalculated = true; |  | ||||||
| 				} |  | ||||||
| 
 |  | ||||||
| 				return transformMatrix; |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		public bool IsAxisAligned => Rotation % Fix64.PiOver2 == Fix64.Zero; |  | ||||||
| 		public bool IsUniformScale => Scale.X == Scale.Y || Scale.X == -Scale.Y; |  | ||||||
| 
 |  | ||||||
| 		public static readonly Transform2D Identity = new Transform2D(Vector2.Zero, Fix64.Zero, Vector2.One); |  | ||||||
| 
 |  | ||||||
| 		public Transform2D(Vector2 position) |  | ||||||
| 		{ |  | ||||||
| 			Position = position; |  | ||||||
| 			Rotation = Fix64.Zero; |  | ||||||
| 			Scale = Vector2.One; |  | ||||||
| 			transformMatrixCalculated = false; |  | ||||||
| 			transformMatrix = Matrix3x2.Identity; |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		public Transform2D(Vector2 position, Fix64 rotation) |  | ||||||
| 		{ |  | ||||||
| 			Position = position; |  | ||||||
| 			Rotation = rotation; |  | ||||||
| 			Scale = Vector2.One; |  | ||||||
| 			transformMatrixCalculated = false; |  | ||||||
| 			transformMatrix = Matrix3x2.Identity; |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		public Transform2D(Vector2 position, Fix64 rotation, Vector2 scale) |  | ||||||
| 		{ |  | ||||||
| 			Position = position; |  | ||||||
| 			Rotation = rotation; |  | ||||||
| 			Scale = scale; |  | ||||||
| 			transformMatrixCalculated = false; |  | ||||||
| 			transformMatrix = Matrix3x2.Identity; |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		public Transform2D Compose(Transform2D other) |  | ||||||
| 		{ |  | ||||||
| 			return new Transform2D(Position + other.Position, Rotation + other.Rotation, Scale * other.Scale); |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		private static Matrix3x2 CreateTransformMatrix(Vector2 position, Fix64 rotation, Vector2 scale) |  | ||||||
| 		{ |  | ||||||
| 			return |  | ||||||
| 				Matrix3x2.CreateScale(scale) * |  | ||||||
| 				Matrix3x2.CreateRotation(rotation) * |  | ||||||
| 				Matrix3x2.CreateTranslation(position); |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		public bool Equals(Transform2D other) |  | ||||||
| 		{ |  | ||||||
| 			return |  | ||||||
| 				Position == other.Position && |  | ||||||
| 				Rotation == other.Rotation && |  | ||||||
| 				Scale == other.Scale; |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|         public override bool Equals(System.Object other) |  | ||||||
|         { |  | ||||||
|             if (other is Transform2D otherTransform) |  | ||||||
|             { |  | ||||||
|                 return Equals(otherTransform); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             return false; |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
| 		public override int GetHashCode() |  | ||||||
| 		{ |  | ||||||
| 			return System.HashCode.Combine(Position, Rotation, Scale); |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		public static bool operator ==(Transform2D a, Transform2D b) |  | ||||||
| 		{ |  | ||||||
| 			return a.Equals(b); |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		public static bool operator !=(Transform2D a, Transform2D b) |  | ||||||
| 		{ |  | ||||||
| 			return !a.Equals(b); |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  | @ -200,16 +200,6 @@ namespace MoonWorks.Math.Fixed | ||||||
| 			return (X * X) + (Y * Y); | 			return (X * X) + (Y * Y); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		/// <summary> |  | ||||||
| 		/// Turns this <see cref="Vector2"/> to a unit vector with the same direction. |  | ||||||
| 		/// </summary> |  | ||||||
| 		public void Normalize() |  | ||||||
| 		{ |  | ||||||
| 			Fix64 val = Fix64.One / Fix64.Sqrt((X * X) + (Y * Y)); |  | ||||||
| 			X *= val; |  | ||||||
| 			Y *= val; |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		/// <summary> | 		/// <summary> | ||||||
| 		/// Turns this <see cref="Vector2"/> to an angle in radians. | 		/// Turns this <see cref="Vector2"/> to an angle in radians. | ||||||
| 		/// </summary> | 		/// </summary> | ||||||
|  | @ -423,7 +413,14 @@ namespace MoonWorks.Math.Fixed | ||||||
| 		/// <returns>Unit vector.</returns> | 		/// <returns>Unit vector.</returns> | ||||||
| 		public static Vector2 Normalize(Vector2 value) | 		public static Vector2 Normalize(Vector2 value) | ||||||
| 		{ | 		{ | ||||||
| 			Fix64 val = Fix64.One / Fix64.Sqrt((value.X * value.X) + (value.Y * value.Y)); | 			Fix64 lengthSquared = (value.X * value.X) + (value.Y * value.Y); | ||||||
|  | 
 | ||||||
|  | 			if (lengthSquared == Fix64.Zero) | ||||||
|  | 			{ | ||||||
|  | 				return Zero; | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			Fix64 val = Fix64.One / Fix64.Sqrt(lengthSquared); | ||||||
| 			value.X *= val; | 			value.X *= val; | ||||||
| 			value.Y *= val; | 			value.Y *= val; | ||||||
| 			return value; | 			return value; | ||||||
|  |  | ||||||
|  | @ -309,21 +309,6 @@ namespace MoonWorks.Math.Fixed | ||||||
| 			return (X * X) + (Y * Y) + (Z * Z); | 			return (X * X) + (Y * Y) + (Z * Z); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		/// <summary> |  | ||||||
| 		/// Turns this <see cref="Vector3"/> to a unit vector with the same direction. |  | ||||||
| 		/// </summary> |  | ||||||
| 		public void Normalize() |  | ||||||
| 		{ |  | ||||||
| 			Fix64 factor = Fix64.One / Fix64.Sqrt( |  | ||||||
| 				(X * X) + |  | ||||||
| 				(Y * Y) + |  | ||||||
| 				(Z * Z) |  | ||||||
| 			); |  | ||||||
| 			X *= factor; |  | ||||||
| 			Y *= factor; |  | ||||||
| 			Z *= factor; |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		/// <summary> | 		/// <summary> | ||||||
| 		/// Returns a <see cref="String"/> representation of this <see cref="Vector3"/> in the format: | 		/// Returns a <see cref="String"/> representation of this <see cref="Vector3"/> in the format: | ||||||
| 		/// {X:[<see cref="X"/>] Y:[<see cref="Y"/>] Z:[<see cref="Z"/>]} | 		/// {X:[<see cref="X"/>] Y:[<see cref="Y"/>] Z:[<see cref="Z"/>]} | ||||||
|  | @ -733,11 +718,14 @@ namespace MoonWorks.Math.Fixed | ||||||
| 		/// <returns>Unit vector.</returns> | 		/// <returns>Unit vector.</returns> | ||||||
| 		public static Vector3 Normalize(Vector3 value) | 		public static Vector3 Normalize(Vector3 value) | ||||||
| 		{ | 		{ | ||||||
| 			Fix64 factor = Fix64.One / Fix64.Sqrt( | 			Fix64 lengthSquared = (value.X * value.X) + (value.Y * value.Y) + (value.Z * value.Z); | ||||||
| 				(value.X * value.X) + | 
 | ||||||
| 				(value.Y * value.Y) + | 			if (lengthSquared == Fix64.Zero) | ||||||
| 				(value.Z * value.Z) | 			{ | ||||||
| 			); | 				return Zero; | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			Fix64 factor = Fix64.One / Fix64.Sqrt(lengthSquared); | ||||||
| 			return new Vector3( | 			return new Vector3( | ||||||
| 				value.X * factor, | 				value.X * factor, | ||||||
| 				value.Y * factor, | 				value.Y * factor, | ||||||
|  |  | ||||||
|  | @ -611,7 +611,7 @@ namespace MoonWorks.Math.Float | ||||||
| 				); | 				); | ||||||
| 			} | 			} | ||||||
| 			Vector3.Cross(ref cameraUpVector, ref vector, out vector3); | 			Vector3.Cross(ref cameraUpVector, ref vector, out vector3); | ||||||
| 			vector3.Normalize(); | 			vector3 = Vector3.Normalize(vector3); | ||||||
| 			Vector3.Cross(ref vector, ref vector3, out vector2); | 			Vector3.Cross(ref vector, ref vector3, out vector2); | ||||||
| 			result.M11 = vector3.X; | 			result.M11 = vector3.X; | ||||||
| 			result.M12 = vector3.Y; | 			result.M12 = vector3.Y; | ||||||
|  | @ -730,16 +730,16 @@ namespace MoonWorks.Math.Float | ||||||
| 						Vector3.Forward; | 						Vector3.Forward; | ||||||
| 				} | 				} | ||||||
| 				Vector3.Cross(ref rotateAxis, ref vector, out vector3); | 				Vector3.Cross(ref rotateAxis, ref vector, out vector3); | ||||||
| 				vector3.Normalize(); | 				vector3 = Vector3.Normalize(vector3); | ||||||
| 				Vector3.Cross(ref vector3, ref rotateAxis, out vector); | 				Vector3.Cross(ref vector3, ref rotateAxis, out vector); | ||||||
| 				vector.Normalize(); | 				vector = Vector3.Normalize(vector); | ||||||
| 			} | 			} | ||||||
| 			else | 			else | ||||||
| 			{ | 			{ | ||||||
| 				Vector3.Cross(ref rotateAxis, ref vector2, out vector3); | 				Vector3.Cross(ref rotateAxis, ref vector2, out vector3); | ||||||
| 				vector3.Normalize(); | 				vector3 = Vector3.Normalize(vector3); | ||||||
| 				Vector3.Cross(ref vector3, ref vector4, out vector); | 				Vector3.Cross(ref vector3, ref vector4, out vector); | ||||||
| 				vector.Normalize(); | 				vector = Vector3.Normalize(vector); | ||||||
| 			} | 			} | ||||||
| 
 | 
 | ||||||
| 			result.M11 = vector3.X; | 			result.M11 = vector3.X; | ||||||
|  | @ -1701,8 +1701,8 @@ namespace MoonWorks.Math.Float | ||||||
| 			Vector3.Normalize(ref forward, out z); | 			Vector3.Normalize(ref forward, out z); | ||||||
| 			Vector3.Cross(ref forward, ref up, out x); | 			Vector3.Cross(ref forward, ref up, out x); | ||||||
| 			Vector3.Cross(ref x, ref forward, out y); | 			Vector3.Cross(ref x, ref forward, out y); | ||||||
| 			x.Normalize(); | 			x = Vector3.Normalize(x); | ||||||
| 			y.Normalize(); | 			y = Vector3.Normalize(y); | ||||||
| 
 | 
 | ||||||
| 			result = new Matrix4x4(); | 			result = new Matrix4x4(); | ||||||
| 			result.Right = x; | 			result.Right = x; | ||||||
|  |  | ||||||
|  | @ -1,105 +0,0 @@ | ||||||
| namespace MoonWorks.Math.Float |  | ||||||
| { |  | ||||||
| 	public struct Transform2D : System.IEquatable<Transform2D> |  | ||||||
| 	{ |  | ||||||
| 		public Vector2 Position { get; } |  | ||||||
| 		public float Rotation { get; } |  | ||||||
| 		public Vector2 Scale { get; } |  | ||||||
| 
 |  | ||||||
| 		private bool transformMatrixCalculated; |  | ||||||
| 		private Matrix3x2 transformMatrix; |  | ||||||
| 
 |  | ||||||
| 		public Matrix3x2 TransformMatrix |  | ||||||
| 		{ |  | ||||||
| 			get |  | ||||||
| 			{ |  | ||||||
| 				if (!transformMatrixCalculated) |  | ||||||
| 				{ |  | ||||||
| 					transformMatrix = CreateTransformMatrix(Position, Rotation, Scale); |  | ||||||
| 					transformMatrixCalculated = true; |  | ||||||
| 				} |  | ||||||
| 
 |  | ||||||
| 				return transformMatrix; |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		public bool IsAxisAligned => Rotation % MathHelper.PiOver2 == 0; |  | ||||||
| 		public bool IsUniformScale => Scale.X == Scale.Y; |  | ||||||
| 
 |  | ||||||
| 		public static readonly Transform2D Identity = new Transform2D(Vector2.Zero, 0, Vector2.One); |  | ||||||
| 
 |  | ||||||
| 		public Transform2D(Vector2 position) |  | ||||||
| 		{ |  | ||||||
| 			Position = position; |  | ||||||
| 			Rotation = 0; |  | ||||||
| 			Scale = Vector2.One; |  | ||||||
| 			transformMatrixCalculated = false; |  | ||||||
| 			transformMatrix = Matrix3x2.Identity; |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		public Transform2D(Vector2 position, float rotation) |  | ||||||
| 		{ |  | ||||||
| 			Position = position; |  | ||||||
| 			Rotation = rotation; |  | ||||||
| 			Scale = Vector2.One; |  | ||||||
| 			transformMatrixCalculated = false; |  | ||||||
| 			transformMatrix = Matrix3x2.Identity; |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		public Transform2D(Vector2 position, float rotation, Vector2 scale) |  | ||||||
| 		{ |  | ||||||
| 			Position = position; |  | ||||||
| 			Rotation = rotation; |  | ||||||
| 			Scale = scale; |  | ||||||
| 			transformMatrixCalculated = false; |  | ||||||
| 			transformMatrix = Matrix3x2.Identity; |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		public Transform2D Compose(Transform2D other) |  | ||||||
| 		{ |  | ||||||
| 			return new Transform2D(Position + other.Position, Rotation + other.Rotation, Scale * other.Scale); |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		private static Matrix3x2 CreateTransformMatrix(Vector2 position, float rotation, Vector2 scale) |  | ||||||
| 		{ |  | ||||||
| 			return |  | ||||||
| 				Matrix3x2.CreateScale(scale) * |  | ||||||
| 				Matrix3x2.CreateRotation(rotation) * |  | ||||||
| 				Matrix3x2.CreateTranslation(position); |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		public bool Equals(Transform2D other) |  | ||||||
| 		{ |  | ||||||
| 			return |  | ||||||
| 				Position == other.Position && |  | ||||||
| 				Rotation == other.Rotation && |  | ||||||
| 				Scale == other.Scale; |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|         public override bool Equals(System.Object other) |  | ||||||
|         { |  | ||||||
|             if (other is Transform2D otherTransform) |  | ||||||
|             { |  | ||||||
|                 return Equals(otherTransform); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             return false; |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
| 		public override int GetHashCode() |  | ||||||
| 		{ |  | ||||||
| 			return System.HashCode.Combine(Position, Rotation, Scale); |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		public static bool operator ==(Transform2D a, Transform2D b) |  | ||||||
| 		{ |  | ||||||
| 			return a.Equals(b); |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		public static bool operator !=(Transform2D a, Transform2D b) |  | ||||||
| 		{ |  | ||||||
| 			return !a.Equals(b); |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  | @ -194,16 +194,6 @@ namespace MoonWorks.Math.Float | ||||||
| 			return (X * X) + (Y * Y); | 			return (X * X) + (Y * Y); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		/// <summary> |  | ||||||
| 		/// Turns this <see cref="Vector2"/> to a unit vector with the same direction. |  | ||||||
| 		/// </summary> |  | ||||||
| 		public void Normalize() |  | ||||||
| 		{ |  | ||||||
| 			float val = 1.0f / (float) System.Math.Sqrt((X * X) + (Y * Y)); |  | ||||||
| 			X *= val; |  | ||||||
| 			Y *= val; |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		/// <summary> | 		/// <summary> | ||||||
| 		/// Turns this <see cref="Vector2"/> to an angle in radians. | 		/// Turns this <see cref="Vector2"/> to an angle in radians. | ||||||
| 		/// </summary> | 		/// </summary> | ||||||
|  | @ -717,7 +707,14 @@ namespace MoonWorks.Math.Float | ||||||
| 		/// <returns>Unit vector.</returns> | 		/// <returns>Unit vector.</returns> | ||||||
| 		public static Vector2 Normalize(Vector2 value) | 		public static Vector2 Normalize(Vector2 value) | ||||||
| 		{ | 		{ | ||||||
| 			float val = 1.0f / (float) System.Math.Sqrt((value.X * value.X) + (value.Y * value.Y)); | 			float lengthSquared = (value.X * value.X) + (value.Y * value.Y); | ||||||
|  | 
 | ||||||
|  | 			if (lengthSquared == 0) | ||||||
|  | 			{ | ||||||
|  | 				return Zero; | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			float val = 1.0f / System.MathF.Sqrt(lengthSquared); | ||||||
| 			value.X *= val; | 			value.X *= val; | ||||||
| 			value.Y *= val; | 			value.Y *= val; | ||||||
| 			return value; | 			return value; | ||||||
|  |  | ||||||
|  | @ -302,21 +302,6 @@ namespace MoonWorks.Math.Float | ||||||
| 			return (X * X) + (Y * Y) + (Z * Z); | 			return (X * X) + (Y * Y) + (Z * Z); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		/// <summary> |  | ||||||
| 		/// Turns this <see cref="Vector3"/> to a unit vector with the same direction. |  | ||||||
| 		/// </summary> |  | ||||||
| 		public void Normalize() |  | ||||||
| 		{ |  | ||||||
| 			float factor = 1.0f / (float) System.Math.Sqrt( |  | ||||||
| 				(X * X) + |  | ||||||
| 				(Y * Y) + |  | ||||||
| 				(Z * Z) |  | ||||||
| 			); |  | ||||||
| 			X *= factor; |  | ||||||
| 			Y *= factor; |  | ||||||
| 			Z *= factor; |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		/// <summary> | 		/// <summary> | ||||||
| 		/// Returns a <see cref="String"/> representation of this <see cref="Vector3"/> in the format: | 		/// Returns a <see cref="String"/> representation of this <see cref="Vector3"/> in the format: | ||||||
| 		/// {X:[<see cref="X"/>] Y:[<see cref="Y"/>] Z:[<see cref="Z"/>]} | 		/// {X:[<see cref="X"/>] Y:[<see cref="Y"/>] Z:[<see cref="Z"/>]} | ||||||
|  | @ -900,11 +885,14 @@ namespace MoonWorks.Math.Float | ||||||
| 		/// <returns>Unit vector.</returns> | 		/// <returns>Unit vector.</returns> | ||||||
| 		public static Vector3 Normalize(Vector3 value) | 		public static Vector3 Normalize(Vector3 value) | ||||||
| 		{ | 		{ | ||||||
| 			float factor = 1.0f / (float) System.Math.Sqrt( | 			float lengthSquared = (value.X * value.X) + (value.Y * value.Y) + (value.Z * value.Z); | ||||||
| 				(value.X * value.X) + | 
 | ||||||
| 				(value.Y * value.Y) + | 			if (lengthSquared == 0f) | ||||||
| 				(value.Z * value.Z) | 			{ | ||||||
| 			); | 				return Zero; | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			float factor = 1.0f / System.MathF.Sqrt(lengthSquared); | ||||||
| 			return new Vector3( | 			return new Vector3( | ||||||
| 				value.X * factor, | 				value.X * factor, | ||||||
| 				value.Y * factor, | 				value.Y * factor, | ||||||
|  |  | ||||||
|  | @ -267,23 +267,6 @@ namespace MoonWorks.Math.Float | ||||||
| 			return (X * X) + (Y * Y) + (Z * Z) + (W * W); | 			return (X * X) + (Y * Y) + (Z * Z) + (W * W); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		/// <summary> |  | ||||||
| 		/// Turns this <see cref="Vector4"/> to a unit vector with the same direction. |  | ||||||
| 		/// </summary> |  | ||||||
| 		public void Normalize() |  | ||||||
| 		{ |  | ||||||
| 			float factor = 1.0f / (float) System.Math.Sqrt( |  | ||||||
| 				(X * X) + |  | ||||||
| 				(Y * Y) + |  | ||||||
| 				(Z * Z) + |  | ||||||
| 				(W * W) |  | ||||||
| 			); |  | ||||||
| 			X *= factor; |  | ||||||
| 			Y *= factor; |  | ||||||
| 			Z *= factor; |  | ||||||
| 			W *= factor; |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		public override string ToString() | 		public override string ToString() | ||||||
| 		{ | 		{ | ||||||
| 			return ( | 			return ( | ||||||
|  | @ -853,12 +836,15 @@ namespace MoonWorks.Math.Float | ||||||
| 		/// <returns>Unit vector.</returns> | 		/// <returns>Unit vector.</returns> | ||||||
| 		public static Vector4 Normalize(Vector4 vector) | 		public static Vector4 Normalize(Vector4 vector) | ||||||
| 		{ | 		{ | ||||||
| 			float factor = 1.0f / (float) System.Math.Sqrt( | 			var lengthSquared = (vector.X * vector.X) + (vector.Y * vector.Y) + | ||||||
| 				(vector.X * vector.X) + | 			                        (vector.Z * vector.Z) + (vector.W * vector.W); | ||||||
| 				(vector.Y * vector.Y) + | 
 | ||||||
| 				(vector.Z * vector.Z) + | 			if (lengthSquared == 0) | ||||||
| 				(vector.W * vector.W) | 			{ | ||||||
| 			); | 				return Zero; | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			float factor = 1.0f / System.MathF.Sqrt(lengthSquared); | ||||||
| 			return new Vector4( | 			return new Vector4( | ||||||
| 				vector.X * factor, | 				vector.X * factor, | ||||||
| 				vector.Y * factor, | 				vector.Y * factor, | ||||||
|  | @ -870,16 +856,20 @@ namespace MoonWorks.Math.Float | ||||||
| 		/// <summary> | 		/// <summary> | ||||||
| 		/// Creates a new <see cref="Vector4"/> that contains a normalized values from another vector. | 		/// Creates a new <see cref="Vector4"/> that contains a normalized values from another vector. | ||||||
| 		/// </summary> | 		/// </summary> | ||||||
| 		/// <param name="value">Source <see cref="Vector4"/>.</param> | 		/// <param name="vector">Source <see cref="Vector4"/>.</param> | ||||||
| 		/// <param name="result">Unit vector as an output parameter.</param> | 		/// <param name="result">Unit vector as an output parameter.</param> | ||||||
| 		public static void Normalize(ref Vector4 vector, out Vector4 result) | 		public static void Normalize(ref Vector4 vector, out Vector4 result) | ||||||
| 		{ | 		{ | ||||||
| 			float factor = 1.0f / (float) System.Math.Sqrt( | 			float lengthSquared = (vector.X * vector.X) + (vector.Y * vector.Y) + | ||||||
| 				(vector.X * vector.X) + | 			                      (vector.Z * vector.Z) + (vector.W * vector.W); | ||||||
| 				(vector.Y * vector.Y) + | 
 | ||||||
| 				(vector.Z * vector.Z) + | 			if (lengthSquared == 0) | ||||||
| 				(vector.W * vector.W) | 			{ | ||||||
| 			); | 				result = Zero; | ||||||
|  | 				return; | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			float factor = 1.0f / System.MathF.Sqrt(lengthSquared); | ||||||
| 			result.X = vector.X * factor; | 			result.X = vector.X * factor; | ||||||
| 			result.Y = vector.Y * factor; | 			result.Y = vector.Y * factor; | ||||||
| 			result.Z = vector.Z * factor; | 			result.Z = vector.Z * factor; | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue