28 #ifndef _LINALG_V4_T_H_ 29 #define _LINALG_V4_T_H_ 33 template<
class T>
class v4t;
39 template<
class T>
class v4t {
43 friend v4t<T> operator* <>(
const T s,
const v4t<T> &src);
87 x = src.
x;
y = src.
y; z = src.
z; w = src.
w;
95 x += src.
x;
y += src.
y; z += src.
z; w += src.
w;
103 x -= src.
x;
y -= src.
y; z -= src.
z; w -= src.
w;
111 x *= s;
y *= s; z *= s; w *= s;
119 x /= s;
y /= s; z /= s; w /= s;
127 return v4t(x + src.
x,
y + src.
y, z + src.
z, w + src.
w);
134 return v4t(-x, -
y, -z, -w);
141 return v4t(x - src.
x,
y - src.
y, z - src.
z, w - src.
w);
147 if (this->x == s.
x && this->y == s.
y && this->z == s.
z && this->w == s.
w) {
157 return !(*
this == s);
164 if (fabs(cmp.
x - this->x) < eps &&
165 fabs(cmp.
y - this->y) < eps &&
166 fabs(cmp.
z - this->z) < eps &&
167 fabs(cmp.
w - this->w) < eps)
179 return src.
x*x + src.
y*
y + src.
z*z + src.
w*w;
186 return v4t(s*x, s*
y, s*z, s*w);
193 return v4t<T>(s*src.
x, s*src.
y, s*src.
z, s*src.
w);
199 return v4t(this->x/s, this->
y/s, this->z/s, this->w/s);
206 return sqrt(x*x +
y*
y + z*z + w*w);
213 return sqrt((
p.x-x)*(
p.x-x) + (
p.y-
y)*(
p.y-
y) + (
p.z-z)*(
p.z-z) + (
p.w-w)*(
p.w-w));
221 x /= l;
y /= l; z /= l; w /= l;
225 #endif // _LINALG_V4_T_H_
v4t< T > & operator=(const v4t< T > &src)
int approxEquals(const v4t< T > &cmp, T eps)
friend v4t< T > operator*(const T s, const v4t< T > &src)
v4t(const T x, const T y, const T z, const T w)
v4t< T > & operator/=(const T s)
int operator!=(const v4t< T > &src) const
v4t< T > & operator+=(const v4t< T > &src)
int operator==(const v4t< T > &src) const
T dist(const v4t< T > &p) const
v4t< T > & operator-=(const v4t< T > &src)
v4t< T > operator-(void) const
v4t< T > & operator*=(const T s)
v4t< T > operator+(const v4t< T > &src) const
v4t< T > operator*(const T s, const v4t< T > &src)
v4t< T > operator/(const T s) const