Files
stgsharp/源代码/StgSharp/Math/Linear/vec2d.cs
T

76 lines
1.8 KiB
C#

using System;
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>
public class Vec2d
{
internal M128Map _map;
internal IntPtr _m128Ptr;
public unsafe float X
{
get { return (*(M128*)_m128Ptr).single_0; }
set { (*(M128*)_m128Ptr).single_0 = value; }
}
public unsafe float Y
{
get { return (*(M128*)_m128Ptr).single_1; }
set { (*(M128*)_m128Ptr).single_1 = value; }
}
public Vec2d(float x, float y)
{
_m128Ptr = internalIO.load_internal(x, y, 0, 0);
}
internal Vec2d(IntPtr value)
{
_m128Ptr = value;
}
public static Vec2d operator +(Vec2d vec1, Vec2d vec2)
{
return new Vec2d(
internalIO.addps_internal(vec1._m128Ptr,vec2._m128Ptr)
);
}
public static Vec2d operator -(Vec2d vec1, Vec2d vec2)
{
return new Vec2d(
internalIO.subps_internal(vec1._m128Ptr,vec2._m128Ptr)
);
}
public static Vec2d operator *(Vec2d vec, float value)
{
return new Vec2d(
internalIO.mulps_const_internal(vec._m128Ptr,value)
);
}
public static Vec2d operator /(Vec2d vec, float value)
{
return new Vec2d(
internalIO.divps_const_internal(vec._m128Ptr, value)
);
}
public static float operator *(Vec2d vec1, Vec2d vec2)
{
return internalIO.mulps_sum_internal(vec1._m128Ptr, vec2._m128Ptr);
}
}
}