Bug fixes
This commit is contained in:
parent
ca84d34703
commit
cf67b283f5
@ -146,10 +146,8 @@ namespace Phanes::Core::Math::Detail
|
||||
|
||||
static constexpr void map(Phanes::Core::Math::TIntVector2<T, false>& r, const Phanes::Core::Math::TIntVector2<T, false>& v1, T s)
|
||||
{
|
||||
s = (T)1.0 / s;
|
||||
|
||||
r.x = v1.x * s;
|
||||
r.y = v1.y * s;
|
||||
r.x = v1.x / s;
|
||||
r.y = v1.y / s;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -77,7 +77,7 @@ namespace Phanes::Core::Math::Detail
|
||||
{
|
||||
v1.x = x;
|
||||
v1.y = y;
|
||||
v1.y = z;
|
||||
v1.z = z;
|
||||
v1.w = (T)0;
|
||||
}
|
||||
|
||||
@ -169,11 +169,9 @@ namespace Phanes::Core::Math::Detail
|
||||
|
||||
static constexpr void map(Phanes::Core::Math::TIntVector3<T, false>& r, const Phanes::Core::Math::TIntVector3<T, false>& v1, T s)
|
||||
{
|
||||
s = (T)1.0 / s;
|
||||
|
||||
r.x = v1.x * s;
|
||||
r.y = v1.y * s;
|
||||
r.z = v1.z * s;
|
||||
r.x = v1.x / s;
|
||||
r.y = v1.y / s;
|
||||
r.z = v1.z / s;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -127,10 +127,10 @@ namespace Phanes::Core::Math {
|
||||
// ======================== //
|
||||
|
||||
/**
|
||||
* Addition operation on same TIntVector2<T, A> (this) by a floating point value.
|
||||
* Addition operation on same TIntVector2<T, A> (this) by a scalar value.
|
||||
*
|
||||
* @param(v1) Vector to add to
|
||||
* @param(s) Floating point to add
|
||||
* @param(s) Scalar to add
|
||||
*/
|
||||
|
||||
template<IntType T, bool A>
|
||||
@ -147,10 +147,10 @@ namespace Phanes::Core::Math {
|
||||
TIntVector2<T, A> operator+= (TIntVector2<T, A>& v1, const TIntVector2<T, A>& v2);
|
||||
|
||||
/**
|
||||
* Substraction operation on same TIntVector2<T, A> (this) by a floating point.
|
||||
* Substraction operation on same TIntVector2<T, A> (this) by a scalar.
|
||||
*
|
||||
* @param(v1) Vector to substract from
|
||||
* @param(v2) Floating point to substract
|
||||
* @param(v2) Scalar to substract
|
||||
*/
|
||||
|
||||
template<IntType T, bool A>
|
||||
@ -168,27 +168,33 @@ namespace Phanes::Core::Math {
|
||||
|
||||
|
||||
/**
|
||||
* Multiplication of TIntVector2<T, A> (this) with a floating point.
|
||||
* Multiplication of TIntVector2<T, A> (this) with a scalar.
|
||||
*
|
||||
* @param(v1) Vector to multiply with
|
||||
* @param(s Floating point to multiply with
|
||||
* @param(s) scalar to multiply with
|
||||
*/
|
||||
|
||||
template<IntType T, bool A>
|
||||
TIntVector2<T, A> operator*= (TIntVector2<T, A>& v1, T s);
|
||||
|
||||
template<IntType T, bool A>
|
||||
TIntVector2<T, A> operator*= (TIntVector2<T, A>& v1, const TIntVector2<T, A>& v2);
|
||||
|
||||
/**
|
||||
* Devision of Vector
|
||||
*
|
||||
* @param(v1) Vector to divide with
|
||||
* @param(s) Scalar to divide with
|
||||
*
|
||||
* @note Result is rounded (obviously)
|
||||
* @note Result is rounded
|
||||
*/
|
||||
|
||||
template<IntType T, bool A>
|
||||
TIntVector2<T, A> operator/= (TIntVector2<T, A>& v1, T s);
|
||||
|
||||
template<IntType T, bool A>
|
||||
TIntVector2<T, A> operator/= (TIntVector2<T, A>& v1, const TIntVector2<T, A>& v2);
|
||||
|
||||
/**
|
||||
* Stores the remainder of division by a scalar.
|
||||
*
|
||||
@ -434,6 +440,11 @@ namespace Phanes::Core::Math {
|
||||
// TIntVector2 static function implementation //
|
||||
// ============================================== //
|
||||
|
||||
template<IntType T>
|
||||
T DotP(const TIntVector2<T, false>& v, const TIntVector2<T, false>& v1)
|
||||
{
|
||||
return v.x * v1.x + v.y * v1.y;
|
||||
}
|
||||
|
||||
template<IntType T>
|
||||
TIntVector2<T, false> MaxV(TIntVector2<T, false>& v1, const TIntVector2<T, false>& v2)
|
||||
@ -462,6 +473,13 @@ namespace Phanes::Core::Math {
|
||||
return v1;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns signs of numbers (1 / -1). <br>
|
||||
/// Returns 1 for zero.
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <param name="v1"></param>
|
||||
/// <returns></returns>
|
||||
template<IntType T>
|
||||
TIntVector2<T, false> SignVectorV(TIntVector2<T, false>& v1)
|
||||
{
|
||||
@ -514,6 +532,8 @@ namespace Phanes::Core::Math {
|
||||
{
|
||||
v1.x = -v1.x;
|
||||
v1.y = -v1.y;
|
||||
|
||||
return v1;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -530,7 +550,7 @@ namespace Phanes::Core::Math {
|
||||
template<IntType T>
|
||||
inline bool IsPerpendicular(const TIntVector2<T, false>& v1, const TIntVector2<T, false>& v2)
|
||||
{
|
||||
return (abs(DotP(v1, v2)) = 0);
|
||||
return (Abs(DotP(v1, v2)) == 0);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -547,7 +567,7 @@ namespace Phanes::Core::Math {
|
||||
template<IntType T>
|
||||
inline bool IsParallel(const TIntVector2<T, false>& v1, const TIntVector2<T, false>& v2)
|
||||
{
|
||||
return (abs(DotP(v1, v2)) = 1);
|
||||
return ((v1.x / v2.x) == (v1.y / v2.y));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -564,7 +584,8 @@ namespace Phanes::Core::Math {
|
||||
template<IntType T>
|
||||
inline bool IsCoincident(const TIntVector2<T, false>& v1, const TIntVector2<T, false>& v2)
|
||||
{
|
||||
return (DotP(v1, v2) = 1);
|
||||
T tmp = v1.x / v2.x;
|
||||
return (tmp == (v1.y / v2.y) && tmp > -1);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -267,7 +267,7 @@ namespace Phanes::Core::Math
|
||||
template<IntType T, bool S>
|
||||
TIntVector2<T, S> operator&(TIntVector2<T, S>& v1, const TIntVector2<T, S>& v2)
|
||||
{
|
||||
TVector2<T, S> r;
|
||||
TIntVector2<T, S> r;
|
||||
Detail::compute_ivec2_and<T, S>::map(r, v1, v2);
|
||||
return r;
|
||||
}
|
||||
@ -275,7 +275,7 @@ namespace Phanes::Core::Math
|
||||
template<IntType T, bool S>
|
||||
TIntVector2<T, S> operator&(TIntVector2<T, S>& v1, T s)
|
||||
{
|
||||
TVector2<T, S> r;
|
||||
TIntVector2<T, S> r;
|
||||
Detail::compute_ivec2_and<T, S>::map(r, v1, s);
|
||||
return r;
|
||||
}
|
||||
@ -283,7 +283,7 @@ namespace Phanes::Core::Math
|
||||
template<IntType T, bool S>
|
||||
TIntVector2<T, S> operator|(TIntVector2<T, S>& v1, const TIntVector2<T, S>& v2)
|
||||
{
|
||||
TVector2<T, S> r;
|
||||
TIntVector2<T, S> r;
|
||||
Detail::compute_ivec2_or<T, S>::map(r, v1, v2);
|
||||
return r;
|
||||
}
|
||||
@ -291,7 +291,7 @@ namespace Phanes::Core::Math
|
||||
template<IntType T, bool S>
|
||||
TIntVector2<T, S> operator|(TIntVector2<T, S>& v1, T s)
|
||||
{
|
||||
TVector2<T, S> r;
|
||||
TIntVector2<T, S> r;
|
||||
Detail::compute_ivec2_or<T, S>::map(r, v1, s);
|
||||
return r;
|
||||
}
|
||||
@ -299,7 +299,7 @@ namespace Phanes::Core::Math
|
||||
template<IntType T, bool S>
|
||||
TIntVector2<T, S> operator^(TIntVector2<T, S>& v1, const TIntVector2<T, S>& v2)
|
||||
{
|
||||
TVector2<T, S> r;
|
||||
TIntVector2<T, S> r;
|
||||
Detail::compute_ivec2_xor<T, S>::map(r, v1, v2);
|
||||
return r;
|
||||
}
|
||||
@ -307,7 +307,7 @@ namespace Phanes::Core::Math
|
||||
template<IntType T, bool S>
|
||||
TIntVector2<T, S> operator^(TIntVector2<T, S>& v1, T s)
|
||||
{
|
||||
TVector2<T, S> r;
|
||||
TIntVector2<T, S> r;
|
||||
Detail::compute_ivec2_xor<T, S>::map(r, v1, s);
|
||||
return r;
|
||||
}
|
||||
@ -315,7 +315,7 @@ namespace Phanes::Core::Math
|
||||
template<IntType T, bool S>
|
||||
TIntVector2<T, S> operator<<(TIntVector2<T, S>& v1, const TIntVector2<T, S>& v2)
|
||||
{
|
||||
TVector2<T, S> r;
|
||||
TIntVector2<T, S> r;
|
||||
Detail::compute_ivec2_left_shift<T, S>::map(r, v1, v2);
|
||||
return r;
|
||||
}
|
||||
@ -323,7 +323,7 @@ namespace Phanes::Core::Math
|
||||
template<IntType T, bool S>
|
||||
TIntVector2<T, S> operator<<(TIntVector2<T, S>& v1, T s)
|
||||
{
|
||||
TVector2<T, S> r;
|
||||
TIntVector2<T, S> r;
|
||||
Detail::compute_ivec2_left_shift<T, S>::map(r, v1, s);
|
||||
return r;
|
||||
}
|
||||
@ -331,7 +331,7 @@ namespace Phanes::Core::Math
|
||||
template<IntType T, bool S>
|
||||
TIntVector2<T, S> operator>>(TIntVector2<T, S>& v1, const TIntVector2<T, S>& v2)
|
||||
{
|
||||
TVector2<T, S> r;
|
||||
TIntVector2<T, S> r;
|
||||
Detail::compute_ivec2_right_shift<T, S>::map(r, v1, v2);
|
||||
return r;
|
||||
}
|
||||
@ -339,7 +339,7 @@ namespace Phanes::Core::Math
|
||||
template<IntType T, bool S>
|
||||
TIntVector2<T, S> operator>>(TIntVector2<T, S>& v1, T s)
|
||||
{
|
||||
TVector2<T, S> r;
|
||||
TIntVector2<T, S> r;
|
||||
Detail::compute_ivec2_right_shift<T, S>::map(r, v1, s);
|
||||
return r;
|
||||
}
|
||||
@ -347,7 +347,7 @@ namespace Phanes::Core::Math
|
||||
template<IntType T, bool S>
|
||||
TIntVector2<T, S> operator~(TIntVector2<T, S>& v1)
|
||||
{
|
||||
TVector2<T, S> r;
|
||||
TIntVector2<T, S> r;
|
||||
Detail::compute_ivec2_bnot<T, S>::map(r, v1);
|
||||
return r;
|
||||
}
|
||||
@ -376,14 +376,14 @@ namespace Phanes::Core::Math
|
||||
template<IntType T, bool S>
|
||||
TIntVector2<T, S>& operator++(TIntVector2<T, S>& v1)
|
||||
{
|
||||
Detail::compute_ivec2_inc<T, S>::map(v1);
|
||||
Detail::compute_ivec2_inc<T, S>::map(v1, v1);
|
||||
return v1;
|
||||
}
|
||||
|
||||
template<IntType T, bool S>
|
||||
TIntVector2<T, S>& operator--(TIntVector2<T, S>& v1)
|
||||
{
|
||||
Detail::compute_ivec2_inc<T, S>::map(v1);
|
||||
Detail::compute_ivec2_dec<T, S>::map(v1, v1);
|
||||
return v1;
|
||||
}
|
||||
|
||||
|
@ -393,11 +393,11 @@ namespace Phanes::Core::Math {
|
||||
*/
|
||||
|
||||
template<IntType T>
|
||||
TIntVector3<T, false> CrossPV(TIntVector3<T, false>& v1, const TIntVector3<T, false>& v2)
|
||||
TIntVector3<T, false>& CrossPV(TIntVector3<T, false>& v1, const TIntVector3<T, false>& v2)
|
||||
{
|
||||
float x = v1.x;
|
||||
float y = v1.y;
|
||||
float z = v1.z;
|
||||
T x = v1.x;
|
||||
T y = v1.y;
|
||||
T z = v1.z;
|
||||
|
||||
v1.x = (y * v2.z) - (z * v2.y);
|
||||
v1.y = (z * v2.x) - (x * v2.z);
|
||||
@ -416,7 +416,7 @@ namespace Phanes::Core::Math {
|
||||
*/
|
||||
|
||||
template<IntType T>
|
||||
TIntVector3<T, false> MaxV(TIntVector3<T, false>& v1, const TIntVector3<T, false>& v2)
|
||||
TIntVector3<T, false>& MaxV(TIntVector3<T, false>& v1, const TIntVector3<T, false>& v2)
|
||||
{
|
||||
v1.x = Phanes::Core::Math::Max(v1.x, v2.x);
|
||||
v1.y = Phanes::Core::Math::Max(v1.y, v2.y);
|
||||
@ -435,7 +435,7 @@ namespace Phanes::Core::Math {
|
||||
*/
|
||||
|
||||
template<IntType T>
|
||||
TIntVector3<T, false> MinV(TIntVector3<T, false>& v1, const TIntVector3<T, false>& v2)
|
||||
TIntVector3<T, false>& MinV(TIntVector3<T, false>& v1, const TIntVector3<T, false>& v2)
|
||||
{
|
||||
v1.x = Phanes::Core::Math::Min(v1.x, v2.x);
|
||||
v1.y = Phanes::Core::Math::Min(v1.y, v2.y);
|
||||
@ -453,7 +453,7 @@ namespace Phanes::Core::Math {
|
||||
*/
|
||||
|
||||
template<IntType T>
|
||||
TIntVector3<T, false> NegateV(TIntVector3<T, false>& v1)
|
||||
TIntVector3<T, false>& NegateV(TIntVector3<T, false>& v1)
|
||||
{
|
||||
v1.x = -v1.x;
|
||||
v1.y = -v1.y;
|
||||
@ -462,25 +462,6 @@ namespace Phanes::Core::Math {
|
||||
return v1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Performes componentwise multiplication of two vectors.
|
||||
*
|
||||
* @param(v1) Vector one
|
||||
* @param(v2) Vector two
|
||||
*
|
||||
* @note result is stored in v1.
|
||||
*/
|
||||
|
||||
template<IntType T>
|
||||
TIntVector3<T, false> ScaleV(TIntVector3<T, false>& v1, const TIntVector3<T, false>& v2)
|
||||
{
|
||||
v1.x *= v2.x;
|
||||
v1.y *= v2.y;
|
||||
v1.z *= v2.z;
|
||||
|
||||
return v1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Copies v1 vector
|
||||
*
|
||||
@ -489,7 +470,7 @@ namespace Phanes::Core::Math {
|
||||
*/
|
||||
|
||||
template<IntType T>
|
||||
TIntVector3<T, false> Set(TIntVector3<T, false>& v1, const TIntVector3<T, false>& v2)
|
||||
TIntVector3<T, false>& Set(TIntVector3<T, false>& v1, const TIntVector3<T, false>& v2)
|
||||
{
|
||||
v1 = v2;
|
||||
|
||||
@ -506,7 +487,7 @@ namespace Phanes::Core::Math {
|
||||
*/
|
||||
|
||||
template<IntType T>
|
||||
TIntVector3<T, false> Set(TIntVector3<T, false>& v1, T x, T y, T z)
|
||||
TIntVector3<T, false>& Set(TIntVector3<T, false>& v1, T x, T y, T z)
|
||||
{
|
||||
v1.x = x;
|
||||
v1.y = y;
|
||||
@ -522,7 +503,7 @@ namespace Phanes::Core::Math {
|
||||
*/
|
||||
|
||||
template<IntType T>
|
||||
TIntVector3<T, false> SignVectorV(TIntVector3<T, false>& v1)
|
||||
TIntVector3<T, false>& SignVectorV(TIntVector3<T, false>& v1)
|
||||
{
|
||||
v1.x = (v1.x >= 0) ? 1 : -1;
|
||||
v1.y = (v1.y >= 0) ? 1 : -1;
|
||||
@ -545,7 +526,7 @@ namespace Phanes::Core::Math {
|
||||
template<IntType T>
|
||||
T ScalarTriple(const TIntVector3<T, false>& v1, const TIntVector3<T, false>& v2, const TIntVector3<T, false>& v3)
|
||||
{
|
||||
return CrossP(v1, v2) * v3;
|
||||
return DotP(CrossP(v1, v2), v3);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -559,7 +540,7 @@ namespace Phanes::Core::Math {
|
||||
*/
|
||||
|
||||
template<IntType T>
|
||||
TIntVector3<T, false> VectorTripleV(TIntVector3<T, false>& v1, const TIntVector3<T, false>& v2, const TIntVector3<T, false>& v3)
|
||||
TIntVector3<T, false>& VectorTripleV(TIntVector3<T, false>& v1, const TIntVector3<T, false>& v2, const TIntVector3<T, false>& v3)
|
||||
{
|
||||
CrossPV(CrossPV(v1, v2), v3);
|
||||
|
||||
@ -593,7 +574,8 @@ namespace Phanes::Core::Math {
|
||||
template<IntType T>
|
||||
inline bool IsParallel(const TIntVector3<T, false>& v1, const TIntVector3<T, false>& v2)
|
||||
{
|
||||
return (abs(DotP(v1, v2)) == 1);
|
||||
T tmp = v1.x / v2.x;
|
||||
return (tmp == (v1.y / v2.y) && tmp == (v1.z / v2.z));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -608,7 +590,8 @@ namespace Phanes::Core::Math {
|
||||
template<IntType T>
|
||||
inline bool IsCoincident(const TIntVector3<T, false>& v1, const TIntVector3<T, false>& v2)
|
||||
{
|
||||
return (DotP(v1, v2) == 1);
|
||||
T tmp = v1.x / v2.x;
|
||||
return (tmp == (v1.y / v2.y) && tmp == (v1.z / v2.z) && tmp > -1);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -697,21 +680,6 @@ namespace Phanes::Core::Math {
|
||||
return TIntVector3<T, false>(-v1.x, -v1.y, -v1.z);
|
||||
}
|
||||
|
||||
/**
|
||||
* Multiplies vector componentwise.
|
||||
*
|
||||
* @param(v1) Vector one
|
||||
* @param(v2) Vector two
|
||||
*
|
||||
* @return Vector with componentwise products
|
||||
*/
|
||||
|
||||
template<IntType T>
|
||||
TIntVector3<T, false> Scale(const TIntVector3<T, false>& v1, const TIntVector3<T, false>& v2)
|
||||
{
|
||||
return TIntVector3<T, false>(v1.x * v2.x, v1.y * v2.y, v1.z * v2.z);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets vector triple product ((v1 x v2) x v3).
|
||||
*
|
||||
@ -728,6 +696,12 @@ namespace Phanes::Core::Math {
|
||||
return CrossP(CrossP(v1, v2), v3);
|
||||
}
|
||||
|
||||
template<IntType T>
|
||||
TIntVector3<T, false> SignVector(const TIntVector3<T, false>& v1)
|
||||
{
|
||||
return TIntVector3<T, false>((v1.x >= 0) ? 1 : -1, (v1.y >= 0) ? 1 : -1, (v1.z >= 0) ? 1 : -1);
|
||||
}
|
||||
|
||||
} // phanes::core::math::coretypes
|
||||
|
||||
#endif // !INTVECTOR3_H
|
||||
|
@ -274,7 +274,7 @@ namespace Phanes::Core::Math
|
||||
template<IntType T, bool S>
|
||||
TIntVector3<T, S> operator&(TIntVector3<T, S>& v1, const TIntVector3<T, S>& v2)
|
||||
{
|
||||
TVector2<T, S> r;
|
||||
TIntVector3<T, S> r;
|
||||
Detail::compute_ivec3_and<T, S>::map(r, v1, v2);
|
||||
return r;
|
||||
}
|
||||
@ -282,7 +282,7 @@ namespace Phanes::Core::Math
|
||||
template<IntType T, bool S>
|
||||
TIntVector3<T, S> operator&(TIntVector3<T, S>& v1, T s)
|
||||
{
|
||||
TVector2<T, S> r;
|
||||
TIntVector3<T, S> r;
|
||||
Detail::compute_ivec3_and<T, S>::map(r, v1, s);
|
||||
return r;
|
||||
}
|
||||
@ -290,7 +290,7 @@ namespace Phanes::Core::Math
|
||||
template<IntType T, bool S>
|
||||
TIntVector3<T, S> operator|(TIntVector3<T, S>& v1, const TIntVector3<T, S>& v2)
|
||||
{
|
||||
TVector2<T, S> r;
|
||||
TIntVector3<T, S> r;
|
||||
Detail::compute_ivec3_or<T, S>::map(r, v1, v2);
|
||||
return r;
|
||||
}
|
||||
@ -298,7 +298,7 @@ namespace Phanes::Core::Math
|
||||
template<IntType T, bool S>
|
||||
TIntVector3<T, S> operator|(TIntVector3<T, S>& v1, T s)
|
||||
{
|
||||
TVector2<T, S> r;
|
||||
TIntVector3<T, S> r;
|
||||
Detail::compute_ivec3_or<T, S>::map(r, v1, s);
|
||||
return r;
|
||||
}
|
||||
@ -306,7 +306,7 @@ namespace Phanes::Core::Math
|
||||
template<IntType T, bool S>
|
||||
TIntVector3<T, S> operator^(TIntVector3<T, S>& v1, const TIntVector3<T, S>& v2)
|
||||
{
|
||||
TVector2<T, S> r;
|
||||
TIntVector3<T, S> r;
|
||||
Detail::compute_ivec3_xor<T, S>::map(r, v1, v2);
|
||||
return r;
|
||||
}
|
||||
@ -314,7 +314,7 @@ namespace Phanes::Core::Math
|
||||
template<IntType T, bool S>
|
||||
TIntVector3<T, S> operator^(TIntVector3<T, S>& v1, T s)
|
||||
{
|
||||
TVector2<T, S> r;
|
||||
TIntVector3<T, S> r;
|
||||
Detail::compute_ivec3_xor<T, S>::map(r, v1, s);
|
||||
return r;
|
||||
}
|
||||
@ -322,7 +322,7 @@ namespace Phanes::Core::Math
|
||||
template<IntType T, bool S>
|
||||
TIntVector3<T, S> operator<<(TIntVector3<T, S>& v1, const TIntVector3<T, S>& v2)
|
||||
{
|
||||
TVector2<T, S> r;
|
||||
TIntVector3<T, S> r;
|
||||
Detail::compute_ivec3_left_shift<T, S>::map(r, v1, v2);
|
||||
return r;
|
||||
}
|
||||
@ -330,7 +330,7 @@ namespace Phanes::Core::Math
|
||||
template<IntType T, bool S>
|
||||
TIntVector3<T, S> operator<<(TIntVector3<T, S>& v1, T s)
|
||||
{
|
||||
TVector2<T, S> r;
|
||||
TIntVector3<T, S> r;
|
||||
Detail::compute_ivec3_left_shift<T, S>::map(r, v1, s);
|
||||
return r;
|
||||
}
|
||||
@ -338,7 +338,7 @@ namespace Phanes::Core::Math
|
||||
template<IntType T, bool S>
|
||||
TIntVector3<T, S> operator>>(TIntVector3<T, S>& v1, const TIntVector3<T, S>& v2)
|
||||
{
|
||||
TVector2<T, S> r;
|
||||
TIntVector3<T, S> r;
|
||||
Detail::compute_ivec3_right_shift<T, S>::map(r, v1, v2);
|
||||
return r;
|
||||
}
|
||||
@ -346,7 +346,7 @@ namespace Phanes::Core::Math
|
||||
template<IntType T, bool S>
|
||||
TIntVector3<T, S> operator>>(TIntVector3<T, S>& v1, T s)
|
||||
{
|
||||
TVector2<T, S> r;
|
||||
TIntVector3<T, S> r;
|
||||
Detail::compute_ivec3_right_shift<T, S>::map(r, v1, s);
|
||||
return r;
|
||||
}
|
||||
@ -354,7 +354,7 @@ namespace Phanes::Core::Math
|
||||
template<IntType T, bool S>
|
||||
TIntVector3<T, S> operator~(TIntVector3<T, S>& v1)
|
||||
{
|
||||
TVector2<T, S> r;
|
||||
TIntVector3<T, S> r;
|
||||
Detail::compute_ivec3_bnot<T, S>::map(r, v1);
|
||||
return r;
|
||||
}
|
||||
|
@ -52,6 +52,20 @@ namespace Phanes::Core::Math {
|
||||
* Specific instantiation of forward declarations.
|
||||
*/
|
||||
|
||||
// IntVetor2
|
||||
|
||||
typedef TIntVector2<int, false> IntVector2;
|
||||
typedef TIntVector2<int, false> Vector2i;
|
||||
typedef TIntVector2<long, false> LongVector2;
|
||||
typedef TIntVector2<long, false> Vector2l;
|
||||
|
||||
// IntVetor3
|
||||
|
||||
typedef TIntVector3<int, false> IntVector3;
|
||||
typedef TIntVector3<int, false> Vector3i;
|
||||
typedef TIntVector3<long, false> LongVector3;
|
||||
typedef TIntVector3<long, false> Vector3l;
|
||||
|
||||
// Vector2
|
||||
|
||||
typedef TVector2<float, false> Vector2;
|
||||
|
Loading…
x
Reference in New Issue
Block a user