188 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			188 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| namespace Syntriax.Engine.Core;
 | |
| /// <summary>
 | |
| /// Provides extension methods for <see cref="Vector2D"/> type.
 | |
| /// </summary>
 | |
| public static class Vector2DExtensions
 | |
| {
 | |
|     /// <summary>
 | |
|     /// Calculates the length of the <see cref="Vector2D"/>.
 | |
|     /// </summary>
 | |
|     /// <param name="vector">The input <see cref="Vector2D"/>.</param>
 | |
|     /// <returns>The length of the <see cref="Vector2D"/>.</returns>
 | |
|     public static float Length(this Vector2D vector) => Vector2D.Length(vector);
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Calculates the squared length of the <see cref="Vector2D"/>.
 | |
|     /// </summary>
 | |
|     /// <param name="vector">The input <see cref="Vector2D"/>.</param>
 | |
|     /// <returns>The squared length of the <see cref="Vector2D"/>.</returns>
 | |
|     public static float LengthSquared(this Vector2D vector) => Vector2D.LengthSquared(vector);
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Calculates the distance between two <see cref="Vector2D"/>s.
 | |
|     /// </summary>
 | |
|     /// <param name="from">The starting <see cref="Vector2D"/>.</param>
 | |
|     /// <param name="to">The ending <see cref="Vector2D"/>.</param>
 | |
|     /// <returns>The distance between the two <see cref="Vector2D"/>s.</returns>
 | |
|     public static float Distance(this Vector2D from, Vector2D to) => Vector2D.Distance(from, to);
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Returns the <see cref="Vector2D"/> with its components inverted.
 | |
|     /// </summary>
 | |
|     /// <param name="vector">The input <see cref="Vector2D"/>.</param>
 | |
|     /// <returns>The inverted <see cref="Vector2D"/>.</returns>
 | |
|     public static Vector2D Invert(this Vector2D vector) => Vector2D.Invert(vector);
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Adds two <see cref="Vector2D"/>s component-wise.
 | |
|     /// </summary>
 | |
|     /// <param name="vector">The first <see cref="Vector2D"/>.</param>
 | |
|     /// <param name="vectorToAdd">The vector <see cref="Vector2D"/> to be added.</param>
 | |
|     /// <returns>The result of the addition.</returns>
 | |
|     public static Vector2D Add(this Vector2D vector, Vector2D vectorToAdd) => Vector2D.Add(vector, vectorToAdd);
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Subtracts one <see cref="Vector2D"/> from another component-wise.
 | |
|     /// </summary>
 | |
|     /// <param name="vector">The first <see cref="Vector2D"/>.</param>
 | |
|     /// <param name="vectorToSubtract">The <see cref="Vector2D"/> to be subtracted.</param>
 | |
|     /// <returns>The result of the subtraction.</returns>
 | |
|     public static Vector2D Subtract(this Vector2D vector, Vector2D vectorToSubtract) => Vector2D.Subtract(vector, vectorToSubtract);
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Multiplies a <see cref="Vector2D"/> by a scalar value.
 | |
|     /// </summary>
 | |
|     /// <param name="vector">The <see cref="Vector2D"/> to multiply.</param>
 | |
|     /// <param name="value">The scalar value to multiply with.</param>
 | |
|     /// <returns>The result of the multiplication.</returns>
 | |
|     public static Vector2D Multiply(this Vector2D vector, float value) => Vector2D.Multiply(vector, value);
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Divides a <see cref="Vector2D"/> by a scalar value.
 | |
|     /// </summary>
 | |
|     /// <param name="vector">The <see cref="Vector2D"/> to divide.</param>
 | |
|     /// <param name="value">The scalar value to divide with.</param>
 | |
|     /// <returns>The result of the division.</returns>
 | |
|     public static Vector2D Subdivide(this Vector2D vector, float value) => Vector2D.Subdivide(vector, value);
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Returns a <see cref="Vector2D"/> with the absolute values of each component.
 | |
|     /// </summary>
 | |
|     /// <param name="vector">The input <see cref="Vector2D"/>.</param>
 | |
|     /// <returns>The <see cref="Vector2D"/> with absolute values.</returns>
 | |
|     public static Vector2D Abs(this Vector2D vector) => Vector2D.Abs(vector);
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Reflects a <see cref="Vector2D"/> off a surface with the specified normal.
 | |
|     /// </summary>
 | |
|     /// <param name="vector">The <see cref="Vector2D"/> to reflect.</param>
 | |
|     /// <param name="normal">The normal <see cref="Vector2D"/> of the reflecting surface.</param>
 | |
|     /// <returns>The reflected <see cref="Vector2D"/>.</returns>
 | |
|     public static Vector2D Reflect(this Vector2D vector, Vector2D normal) => Vector2D.Reflect(vector, normal);
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Normalizes the <see cref="Vector2D"/> (creates a <see cref="Vector2D"/> with the same direction but with a length of 1).
 | |
|     /// </summary>
 | |
|     /// <param name="vector">The input <see cref="Vector2D"/>.</param>
 | |
|     /// <returns>The normalized <see cref="Vector2D"/>.</returns>
 | |
|     public static Vector2D Normalize(this Vector2D vector) => Vector2D.Normalize(vector);
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Creates a <see cref="Vector2D"/> pointing from one point to another.
 | |
|     /// </summary>
 | |
|     /// <param name="from">The starting point.</param>
 | |
|     /// <param name="to">The ending point.</param>
 | |
|     /// <returns>The <see cref="Vector2D"/> pointing from <paramref name="from"/> to <paramref name="to"/>.</returns>
 | |
|     public static Vector2D FromTo(this Vector2D from, Vector2D to) => Vector2D.FromTo(from, to);
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Scales a <see cref="Vector2D"/> by another <see cref="Vector2D"/> component-wise.
 | |
|     /// </summary>
 | |
|     /// <param name="vector">The <see cref="Vector2D"/> to scale.</param>
 | |
|     /// <param name="scale">The <see cref="Vector2D"/> containing the scaling factors for each component.</param>
 | |
|     /// <returns>The scaled <see cref="Vector2D"/>.</returns>
 | |
|     public static Vector2D Scale(this Vector2D vector, Vector2D scale) => Vector2D.Scale(vector, scale);
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Calculates the perpendicular <see cref="Vector2D"/> to the given <see cref="Vector2D"/>.
 | |
|     /// </summary>
 | |
|     /// <param name="vector">The input <see cref="Vector2D"/>.</param>
 | |
|     /// <returns>A <see cref="Vector2D"/> perpendicular to the input <see cref="Vector2D"/>.</returns>
 | |
|     public static Vector2D Perpendicular(this Vector2D vector) => Vector2D.Perpendicular(vector);
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Rotates a <see cref="Vector2D"/> by the specified angle (in radians).
 | |
|     /// </summary>
 | |
|     /// <param name="vector">The <see cref="Vector2D"/> to rotate.</param>
 | |
|     /// <param name="angleInRadian">The angle to rotate by, in radians.</param>
 | |
|     /// <returns>The rotated <see cref="Vector2D"/>.</returns>
 | |
|     public static Vector2D Rotate(this Vector2D vector, float angleInRadian) => Vector2D.Rotate(vector, angleInRadian);
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Returns the component-wise minimum of two <see cref="Vector2D"/>s.
 | |
|     /// </summary>
 | |
|     /// <param name="left">The first <see cref="Vector2D"/>.</param>
 | |
|     /// <param name="right">The second <see cref="Vector2D"/>.</param>
 | |
|     /// <returns>The <see cref="Vector2D"/> containing the minimum components from both input <see cref="Vector2D"/>s.</returns>
 | |
|     public static Vector2D Min(this Vector2D left, Vector2D right) => Vector2D.Min(left, right);
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Returns the component-wise maximum of two <see cref="Vector2D"/>s.
 | |
|     /// </summary>
 | |
|     /// <param name="left">The first <see cref="Vector2D"/>.</param>
 | |
|     /// <param name="right">The second <see cref="Vector2D"/>.</param>
 | |
|     /// <returns>The <see cref="Vector2D"/> containing the maximum components from both input <see cref="Vector2D"/>s.</returns>
 | |
|     public static Vector2D Max(this Vector2D left, Vector2D right) => Vector2D.Max(left, right);
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Clamps each component of a <see cref="Vector2D"/> between the corresponding component of two other <see cref="Vector2D"/>s.
 | |
|     /// </summary>
 | |
|     /// <param name="vector">The <see cref="Vector2D"/> to clamp.</param>
 | |
|     /// <param name="min">The <see cref="Vector2D"/> representing the minimum values for each component.</param>
 | |
|     /// <param name="max">The <see cref="Vector2D"/> representing the maximum values for each component.</param>
 | |
|     /// <returns>The clamped <see cref="Vector2D"/>.</returns>
 | |
|     public static Vector2D Clamp(this Vector2D vector, Vector2D min, Vector2D max) => Vector2D.Clamp(vector, min, max);
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Linearly interpolates between two <see cref="Vector2D"/>s.
 | |
|     /// </summary>
 | |
|     /// <param name="from">The start <see cref="Vector2D"/>.</param>
 | |
|     /// <param name="to">The end <see cref="Vector2D"/>.</param>
 | |
|     /// <param name="t">The interpolation parameter (between 0 and 1).</param>
 | |
|     /// <returns>The interpolated <see cref="Vector2D"/>.</returns>
 | |
|     public static Vector2D Lerp(this Vector2D from, Vector2D to, float t) => Vector2D.Lerp(from, to, t);
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Calculates the cross product of two <see cref="Vector2D"/>s.
 | |
|     /// </summary>
 | |
|     /// <param name="left">The first <see cref="Vector2D"/>.</param>
 | |
|     /// <param name="right">The second <see cref="Vector2D"/>.</param>
 | |
|     /// <returns>The cross product of the two <see cref="Vector2D"/>s.</returns>
 | |
|     public static float Cross(this Vector2D left, Vector2D right) => Vector2D.Cross(left, right);
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Calculates the angle in radians between two <see cref="Vector2D"/>s.
 | |
|     /// </summary>
 | |
|     /// <param name="left">The first <see cref="Vector2D"/>.</param>
 | |
|     /// <param name="right">The second <see cref="Vector2D"/>.</param>
 | |
|     /// <returns>The angle between the two <see cref="Vector2D"/>s in radians.</returns>
 | |
|     public static float AngleBetween(this Vector2D left, Vector2D right) => Vector2D.Angle(left, right);
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Calculates the dot product of two <see cref="Vector2D"/>s.
 | |
|     /// </summary>
 | |
|     /// <param name="left">The first <see cref="Vector2D"/>.</param>
 | |
|     /// <param name="right">The second <see cref="Vector2D"/>.</param>
 | |
|     /// <returns>The dot product of the two <see cref="Vector2D"/>s.</returns>
 | |
|     public static float Dot(this Vector2D left, Vector2D right) => Vector2D.Dot(left, right);
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Checks whether two <see cref="Vector2D"/>s are approximately equal within a certain epsilon range.
 | |
|     /// </summary>
 | |
|     /// <param name="left">The first <see cref="Vector2D"/>.</param>
 | |
|     /// <param name="right">The second <see cref="Vector2D"/>.</param>
 | |
|     /// <param name="epsilon">The maximum difference allowed between components.</param>
 | |
|     /// <returns>True if the <see cref="Vector2D"/>s are approximately equal, false otherwise.</returns>
 | |
|     public static bool ApproximatelyEquals(this Vector2D left, Vector2D right, float epsilon = float.Epsilon) => Vector2D.ApproximatelyEquals(left, right, epsilon);
 | |
| }
 |