using System; using System.Runtime.InteropServices; namespace StgSharp.Math { /// /// A two dimension vector defined by two elements. /// Vec2Ds in StgSharp are defaultly usaed as colum vector. /// 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); } } }