inline double2 un_m_add2d(double2 a, double2 b) { double2 result; result.x = a.x + b.x; result.y = a.y + b.y; return result; } inline double3 un_m_add3d(double3 a, double3 b) { double3 result; result.x = a.x + b.x; result.y = a.y + b.y; result.z = a.z + b.z; return result; } inline double4 un_m_add4d(double4 a, double4 b) { double4 result; result.x = a.x + b.x; result.y = a.y + b.y; result.z = a.z + b.z; result.w = a.w + b.w; return result; } inline double2 un_m_sub2d(double2 a, double2 b) { double2 result; result.x = a.x - b.x; result.y = a.y - b.y; return result; } inline double3 un_m_sub3d(double3 a, double3 b) { double3 result; result.x = a.x - b.x; result.y = a.y - b.y; result.z = a.z - b.z; return result; } inline double4 un_m_sub4d(double4 a, double4 b) { double4 result; result.x = a.x - b.x; result.y = a.y - b.y; result.z = a.z - b.z; result.w = a.w - b.w; return result; } inline double2 un_m_add_scalar2d(double2 a, double scalar) { double2 result; result.x = a.x + scalar; result.y = a.y + scalar; return result; } inline double3 un_m_add_scalar3d(double3 a, double scalar) { double3 result; result.x = a.x + scalar; result.y = a.y + scalar; result.z = a.z + scalar; return result; } inline double4 un_m_add_scalar4d(double4 a, double scalar) { double4 result; result.x = a.x + scalar; result.y = a.y + scalar; result.z = a.z + scalar; result.w = a.w + scalar; return result; } inline double2 un_m_sub_scalar2d(double2 a, double scalar) { double2 result; result.x = a.x - scalar; result.y = a.y - scalar; return result; } inline double3 un_m_sub_scalar3d(double3 a, double scalar) { double3 result; result.x = a.x - scalar; result.y = a.y - scalar; result.z = a.z - scalar; return result; } inline double4 un_m_sub_scalar4d(double4 a, double scalar) { double4 result; result.x = a.x - scalar; result.y = a.y - scalar; result.z = a.z - scalar; result.w = a.w - scalar; return result; } inline double2 un_m_mul_scalar2d(double2 a, double scalar) { double2 result; result.x = a.x * scalar; result.y = a.y * scalar; return result; } inline double3 un_m_mul_scalar3d(double3 a, double scalar) { double3 result; result.x = a.x * scalar; result.y = a.y * scalar; result.z = a.z * scalar; return result; } inline double4 un_m_mul_scalar4d(double4 a, double scalar) { double4 result; result.x = a.x * scalar; result.y = a.y * scalar; result.z = a.z * scalar; result.w = a.w * scalar; return result; } inline double2 un_m_div_scalar2d(double2 a, double scalar) { double2 result; result.x = a.x / scalar; result.y = a.y / scalar; return result; } inline double3 un_m_div_scalar3d(double3 a, double scalar) { double3 result; result.x = a.x / scalar; result.y = a.y / scalar; result.z = a.z / scalar; return result; } inline double4 un_m_div_scalar4d(double4 a, double scalar) { double4 result; result.x = a.x / scalar; result.y = a.y / scalar; result.z = a.z / scalar; result.w = a.w / scalar; return result; } inline double un_m_dot2d(double2 a, double2 b) { return a.x * b.x + a.y * b.y; } inline double un_m_dot3d(double3 a, double3 b) { return a.x * b.x + a.y * b.y + a.z * b.z; } inline double un_m_dot4d(double4 a, double4 b) { return a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w; } inline double2 un_m_hadamard2d(double2 a, double2 b) { double2 result; result.x = a.x * b.x; result.y = a.y * b.y; return result; } inline double3 un_m_hadamard3d(double3 a, double3 b) { double3 result; result.x = a.x * b.x; result.y = a.y * b.y; result.z = a.z * b.z; return result; } inline double4 un_m_hadamard4d(double4 a, double4 b) { double4 result; result.x = a.x * b.x; result.y = a.y * b.y; result.z = a.z * b.z; result.w = a.w * b.w; return result; } inline double2 un_m_cross2d(double2 a) { double2 result; result.x = a.y; result.y =-a.x; return result; } inline double3 un_m_cross3d(double3 a, double3 b) { double3 result; result.x = a.y * b.z - a.z * b.y; result.y = a.z * b.x - a.x * b.z; result.z = a.x * b.y - a.y * b.x; return result; } inline double un_m_magnitude2d(double2 a) { return sqrt(a.x * a.x + a.y * a.y); } inline double un_m_magnitude3d(double3 a) { return sqrt(a.x * a.x + a.y * a.y + a.z * a.z); } inline double un_m_magnitude4d(double4 a) { return sqrt(a.x * a.x + a.y * a.y + a.z * a.z + a.w * a.w); } inline double un_m_magnitude_sqr2d(double2 a) { return a.x * a.x + a.y * a.y; } inline double un_m_magnitude_sqr3d(double3 a) { return a.x * a.x + a.y * a.y + a.z * a.z; } inline double un_m_magnitude_sqr4d(double4 a) { return a.x * a.x + a.y * a.y + a.z * a.z + a.w * a.w; } inline double un_m_distance2d(double2 a, double2 b) { double2 result; result.x = b.x - a.x; result.y = b.y - a.y; return sqrt(result.x * result.x + result.y * result.y); } inline double un_m_distance3d(double3 a, double3 b) { double3 result; result.x = b.x - a.x; result.y = b.y - a.y; result.z = b.z - a.z; return sqrt(result.x * result.x + result.y * result.y + result.z * result.z); } inline double un_m_distance4d(double4 a, double4 b) { double4 result; result.x = b.x - a.x; result.y = b.y - a.y; result.z = b.z - a.z; result.w = b.w - a.w; return sqrt(result.x * result.x + result.y * result.y + result.z * result.z + result.w * result.w); } inline double un_m_distance_sqr2d(double2 a, double2 b) { double2 result; result.x = b.x - a.x; result.y = b.y - a.y; return result.x * result.x + result.y * result.y; } inline double un_m_distance_sqr3d(double3 a, double3 b) { double3 result; result.x = b.x - a.x; result.y = b.y - a.y; result.z = b.z - a.z; return result.x * result.x + result.y * result.y + result.z * result.z; } inline double un_m_distance_sqr4d(double4 a, double4 b) { double4 result; result.x = b.x - a.x; result.y = b.y - a.y; result.z = b.z - a.z; result.w = b.w - a.w; return result.x * result.x + result.y * result.y + result.z * result.z + result.w * result.w; } inline double2 un_m_normalize2d(double2 a) { double2 result; double mag; mag = sqrt(a.x * a.x + a.y * a.y); result.x = a.x / mag; result.y = a.y / mag; return result; } inline double3 un_m_normalize3d(double3 a) { double3 result; double mag; mag = sqrt(a.x * a.x + a.y * a.y + a.z * a.z); result.x = a.x / mag; result.y = a.y / mag; result.z = a.z / mag; return result; } inline double4 un_m_normalize4d(double4 a) { double4 result; double mag; mag = sqrt(a.x * a.x + a.y * a.y + a.z * a.z + a.w * a.w); result.x = a.x / mag; result.y = a.y / mag; result.z = a.z / mag; result.w = a.w / mag; return result; } inline double2 un_m_project2d(double2 a, double2 onto) { double d; double2 result; d = a.x * onto.x + a.y * onto.y; d /= onto.x * onto.x + onto.y * onto.y; result.x = onto.x * d; result.y = onto.y * d; return result; } inline double3 un_m_project3d(double3 a, double3 onto) { double d; double3 result; d = a.x * onto.x + a.y * onto.y + a.z * onto.z; d /= onto.x * onto.x + onto.y * onto.y + onto.z * onto.z; result.x = onto.x * d; result.y = onto.y * d; result.z = onto.z * d; return result; } inline double4 un_m_project4d(double4 a, double4 onto) { double d; double4 result; d = a.x * onto.x + a.y * onto.y + a.z * onto.z + a.w * onto.w; d /= onto.x * onto.x + onto.y * onto.y + onto.z * onto.z + onto.w * onto.w; result.x = onto.x * d; result.y = onto.y * d; result.z = onto.z * d; result.w = onto.w * d; return result; } inline double2 un_m_reflect2d(double2 a, double2 normal) { double d; double2 result; d = a.x * normal.x + a.y * normal.y; result.x = normal.x * d * 2.0; result.y = normal.y * d * 2.0; result.x -= a.x; result.y -= a.y; return result; } inline double3 un_m_reflect3d(double3 a, double3 normal) { double d; double3 result; d = a.x * normal.x + a.y * normal.y + a.z * normal.z; result.x = normal.x * d * 2.0; result.y = normal.y * d * 2.0; result.z = normal.z * d * 2.0; result.x -= a.x; result.y -= a.y; result.z -= a.z; return result; } inline double4 un_m_reflect4d(double4 a, double4 normal) { double d; double4 result; d = a.x * normal.x + a.y * normal.y + a.z * normal.z + a.w * normal.w; result.x = normal.x * d * 2.0; result.y = normal.y * d * 2.0; result.z = normal.z * d * 2.0; result.w = normal.w * d * 2.0; result.x -= a.x; result.y -= a.y; result.z -= a.z; result.w -= a.w; return result; }