Files
SlaveMatrix-SDL/2DGAMELIB/_2DGAMELIB/Vector2D.cs
2025-05-05 19:40:03 -07:00

127 lines
2.0 KiB
C#

using System;
using System.Globalization;
namespace _2DGAMELIB;
[Serializable]
public struct Vector2D
{
public double X;
public double Y;
public double this[int index]
{
get
{
return index switch
{
0 => X,
1 => Y,
_ => throw new ArgumentOutOfRangeException("index", "Indices for Vector2D run from 0 to 1, inclusive."),
};
}
set
{
switch (index)
{
case 0:
X = value;
break;
case 1:
Y = value;
break;
default:
throw new ArgumentOutOfRangeException("index", "Indices for Vector2D run from 0 to 1, inclusive.");
}
}
}
public Vector2D(int value)
{
X = value;
Y = value;
}
public Vector2D(float value)
{
X = value;
Y = value;
}
public Vector2D(double value)
{
X = value;
Y = value;
}
public Vector2D(int x, int y)
{
X = x;
Y = y;
}
public Vector2D(float x, float y)
{
X = x;
Y = y;
}
public Vector2D(double x, double y)
{
X = x;
Y = y;
}
public double Length()
{
return System.Math.Sqrt(X * X + Y * Y);
}
public double LengthSquared()
{
return X * X + Y * Y;
}
public void Normalize()
{
double num = Length();
if (num != 0.0)
{
double num2 = 1.0 / num;
X *= num2;
Y *= num2;
}
}
public static Vector2D operator +(Vector2D left, Vector2D right)
{
return new Vector2D(left.X + right.X, left.Y + right.Y);
}
public static Vector2D operator -(Vector2D left, Vector2D right)
{
return new Vector2D(left.X - right.X, left.Y - right.Y);
}
public static Vector2D operator -(Vector2D value)
{
return new Vector2D(0.0 - value.X, 0.0 - value.Y);
}
public static Vector2D operator *(Vector2D value, double scale)
{
return new Vector2D(value.X * scale, value.Y * scale);
}
public static Vector2D operator *(double scale, Vector2D value)
{
return new Vector2D(value.X * scale, value.Y * scale);
}
public static Vector2D operator /(Vector2D value, double scale)
{
return new Vector2D(value.X / scale, value.Y / scale);
}
}