2 public struct Vector2 : IEquatable<Vector2> {
38 public static implicit
operator Vector2((
float X,
float Y) v) =>
new(v.X, v.Y);
44 public override string ToString() => $
"{X},{Y}";
49 float y = MathF.Cos(angle);
50 return new Vector2(0f - MathF.Sin(angle), y);
64 float num = MathF.Cos(angle);
65 float num2 = MathF.Sin(angle);
66 return new Vector2(num * v.
X + num2 * v.
Y, (0f - num2) * v.
X + num * v.
Y);
87 public static Vector2 Clamp(
Vector2 v,
float min,
float max) =>
new(Math.Clamp(v.
X, min, max), Math.Clamp(v.
Y, min, max));
100 return !(num > 0f) ?
UnitX : v / num;
105 return num > maxLength * maxLength ? v * (maxLength / MathF.Sqrt(num)) : v;
109 float num = MathF.Atan2(v1.
Y, v1.
X);
110 float num2 = MathF.Atan2(v2.
Y, v2.
X) - num;
111 if (num2 > (
float)Math.PI) {
112 num2 -= (float)Math.PI * 2f;
114 else if (num2 <= -(
float)Math.PI) {
115 num2 += (float)Math.PI * 2f;
123 result =
new Vector2(v.X * m.M11 + v.Y * m.M21 + m.M41, v.X * m.M12 + v.Y * m.M22 + m.M42);
127 float num = q.X + q.
X;
128 float num2 = q.Y + q.
Y;
129 float num3 = q.Z + q.
Z;
130 float num4 = q.W * num3;
131 float num5 = q.X * num;
132 float num6 = q.X * num2;
133 float num7 = q.Y * num2;
134 float num8 = q.Z * num3;
135 return new Vector2(v.
X * (1f - num7 - num8) + v.
Y * (num6 - num4), v.
X * (num6 + num4) + v.
Y * (1f - num5 - num8));
139 float num = q.X + q.X;
140 float num2 = q.Y + q.Y;
141 float num3 = q.Z + q.Z;
142 float num4 = q.W * num3;
143 float num5 = q.X * num;
144 float num6 = q.X * num2;
145 float num7 = q.Y * num2;
146 float num8 = q.Z * num3;
147 result =
new Vector2(v.X * (1f - num7 - num8) + v.Y * (num6 - num4), v.X * (num6 + num4) + v.Y * (1f - num5 - num8));
154 int destinationIndex,
156 for (
int i = 0; i < count; i++) {
157 Vector2 vector = sourceArray[sourceIndex + i];
158 destinationArray[destinationIndex + i] =
new Vector2(
159 vector.
X * m.M11 + vector.
Y * m.M21 + m.M41,
160 vector.
X * m.M12 + vector.
Y * m.M22 + m.M42
168 result =
new Vector2(v.X * m.M11 + v.Y * m.M21, v.X * m.M12 + v.Y * m.M22);
175 int destinationIndex,
177 for (
int i = 0; i < count; i++) {
178 Vector2 vector = sourceArray[sourceIndex + i];
179 destinationArray[destinationIndex + i] =
new Vector2(vector.
X * m.M11 + vector.
Y * m.M21, vector.
X * m.M12 + vector.
Y * m.M22);
205 return new Vector2(v.
X * num, v.
Y * num);
211 if (
float.IsNaN(v.
X)) {
214 if (
float.IsNaN(v.
Y)) {
221 if (
float.IsNaN(
X)) {
224 if (
float.IsNaN(
Y)) {
231 fixed (
float* ptr = &
X) {
232 return new Span<float>(ptr, 2);
237 fixed (
float* ptr = &
X) {
static float Saturate(float x)
static float CatmullRom(float v1, float v2, float v3, float v4, float f)
static float Lerp(float x1, float x2, float f)
static Vector2 Saturate(Vector2 v)
static void TransformNormal(ref Vector2 v, ref Matrix m, out Vector2 result)
static Vector2 operator/(Vector2 v1, Vector2 v2)
static Vector2 Floor(Vector2 v)
static Vector2 Transform(Vector2 v, Quaternion q)
static void Transform(ref Vector2 v, ref Quaternion q, out Vector2 result)
static float Dot(Vector2 v1, Vector2 v2)
bool Equals(Vector2 other)
static bool operator==(Vector2 v1, Vector2 v2)
static Vector2 Clamp(Vector2 v, float min, float max)
static float Cross(Vector2 v1, Vector2 v2)
static readonly Vector2 Zero
static Vector2 TransformNormal(Vector2 v, Matrix m)
static Vector2 CreateFromAngle(float angle)
static Vector2 Max(Vector2 v, float f)
override string ToString()
Vector2(float x, float y)
static Vector2 Min(Vector2 v, float f)
static Vector2 Rotate(Vector2 v, float angle)
static Vector2 Lerp(Vector2 v1, Vector2 v2, float f)
static float DistanceSquared(Vector2 v1, Vector2 v2)
static Vector2 Ceiling(Vector2 v)
override int GetHashCode()
static Vector2 Round(Vector2 v)
static Vector2 Max(Vector2 v1, Vector2 v2)
static readonly Vector2 One
unsafe Span< float > AsSpan()
static Vector2 CatmullRom(Vector2 v1, Vector2 v2, Vector2 v3, Vector2 v4, float f)
static Vector2 operator+(Vector2 v)
static void TransformNormal(Vector2[] sourceArray, int sourceIndex, ref Matrix m, Vector2[] destinationArray, int destinationIndex, int count)
static readonly Vector2 UnitY
static void Transform(Vector2[] sourceArray, int sourceIndex, ref Matrix m, Vector2[] destinationArray, int destinationIndex, int count)
override bool Equals(object obj)
static Vector2 Transform(Vector2 v, Matrix m)
static void Transform(ref Vector2 v, ref Matrix m, out Vector2 result)
static readonly Vector2 UnitX
static Vector2 operator-(Vector2 v)
static Vector2 LimitLength(Vector2 v, float maxLength)
static Vector2 Normalize(Vector2 v)
unsafe float * AsPointer()
static float Angle(Vector2 v1, Vector2 v2)
static Vector2 FixNaN(Vector2 v)
static float Distance(Vector2 v1, Vector2 v2)
static Vector2 Perpendicular(Vector2 v)
static Vector2 operator*(Vector2 v1, Vector2 v2)
static bool operator!=(Vector2 v1, Vector2 v2)
static Vector2 Min(Vector2 v1, Vector2 v2)