84 lines
1.9 KiB
C#
84 lines
1.9 KiB
C#
using System.Numerics;
|
|
using System.Runtime.CompilerServices;
|
|
using System.Runtime.InteropServices;
|
|
|
|
namespace StgSharp.Math
|
|
{
|
|
/// <summary>
|
|
/// A two dimension vector defined by two elements.
|
|
/// Vec2Ds in StgSharp are defaultly usaed as colum vector.
|
|
/// </summary>
|
|
[StructLayout(LayoutKind.Explicit, Size = 16, Pack = 16)]
|
|
public struct Vec2d
|
|
{
|
|
|
|
[FieldOffset(0)]
|
|
public float X;
|
|
[FieldOffset(4)]
|
|
public float Y;
|
|
|
|
[FieldOffset(0)]
|
|
internal Vector4 vec;
|
|
[FieldOffset(0)]
|
|
internal Vector2 v;
|
|
|
|
public Vec2d(float x, float y)
|
|
{
|
|
v = new Vector2(x, y);
|
|
}
|
|
|
|
internal Vec2d(Vector2 vec)
|
|
{
|
|
v = vec;
|
|
}
|
|
|
|
public static Vec2d Zero
|
|
{
|
|
get { return new Vec2d(0, 0); }
|
|
}
|
|
|
|
public static Vec2d Unit
|
|
{
|
|
get { return new Vec2d(1, 1); }
|
|
}
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static Vec2d operator +(Vec2d left, Vec2d right)
|
|
{
|
|
return new Vec2d(left.v + right.v);
|
|
}
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static Vec2d operator -(Vec2d left, Vec2d right)
|
|
{
|
|
return new Vec2d(left.v - right.v);
|
|
}
|
|
|
|
public static Vec2d operator *(Vec2d vec, float value)
|
|
{
|
|
return new Vec2d(vec.v * value);
|
|
}
|
|
|
|
public static Vec2d operator /(Vec2d vec, float value)
|
|
{
|
|
return new Vec2d(vec.v / value);
|
|
}
|
|
|
|
public static bool operator ==(Vec2d left, Vec2d right)
|
|
{
|
|
return left.v == right.v;
|
|
}
|
|
|
|
public static bool operator !=(Vec2d left, Vec2d right)
|
|
{
|
|
return !(left == right);
|
|
}
|
|
|
|
public float Cross(Vec2d right)
|
|
{
|
|
return X * right.Y - Y * right.X;
|
|
}
|
|
|
|
}
|
|
}
|