69 lines
1.4 KiB
C#
69 lines
1.4 KiB
C#
using System;
|
|
|
|
namespace _2DGAMELIB
|
|
{
|
|
public static class Vec
|
|
{
|
|
|
|
public static void Add(ref Vector2D v1, ref Vector2D v2, out Vector2D r)
|
|
{
|
|
r.X = v1.X + v2.X;
|
|
r.Y = v1.Y + v2.Y;
|
|
}
|
|
|
|
public static void Subtract(ref Vector2D v1, ref Vector2D v2, out Vector2D r)
|
|
{
|
|
r.X = v1.X - v2.X;
|
|
r.Y = v1.Y - v2.Y;
|
|
}
|
|
|
|
public static double DistanceSquared(this Vector2D v1, Vector2D v2)
|
|
{
|
|
double num = v1.X - v2.X;
|
|
double num2 = v1.Y - v2.Y;
|
|
return num * num + num2 * num2;
|
|
}
|
|
|
|
public static void Dot(ref Vector2D v1, ref Vector2D v2, out double r)
|
|
{
|
|
r = v1.X * v2.X + v1.Y * v2.Y;
|
|
}
|
|
|
|
public static double Cross(ref Vector2D v1, ref Vector2D v2)
|
|
{
|
|
return v1.X * v2.Y - v1.Y * v2.X;
|
|
}
|
|
|
|
public static Vector2D newNormalize(this Vector2D vector)
|
|
{
|
|
vector.Normalize();
|
|
return vector;
|
|
}
|
|
|
|
public static double Angle(ref Vector2D v1, ref Vector2D v2)
|
|
{
|
|
Dot(ref v1, ref v2, out var r);
|
|
r /= v1.Length() * v2.Length();
|
|
if (r > 1.0)
|
|
{
|
|
r = 1.0;
|
|
}
|
|
else if (r < -1.0)
|
|
{
|
|
r = -1.0;
|
|
}
|
|
return System.Math.Acos(r);
|
|
}
|
|
|
|
public static double Angle02π(this Vector2D v1, Vector2D v2)
|
|
{
|
|
double num = Angle(ref v1, ref v2);
|
|
if (Cross(ref v1, ref v2) < 0.0)
|
|
{
|
|
num = System.Math.PI * 2.0 - num;
|
|
}
|
|
return num;
|
|
}
|
|
}
|
|
}
|