Initial Commit
This commit is contained in:
126
2DGAMELIB/_2DGAMELIB/Vector2D.cs
Normal file
126
2DGAMELIB/_2DGAMELIB/Vector2D.cs
Normal file
@@ -0,0 +1,126 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user