34 const T &
operator[](
const size_t i)
const {
return (
const_cast<const T *
>(&
x))[i]; }
68 const T inva = T(1.0 / a);
76 const T inva = T(1.0 / a);
106 const T inv = 1.0 / scalar;
107 return vector3(a.
x * inv, a.
y * inv, a.
z * inv);
111 const T inv = 1.0 / scalar;
112 return vector3(a.
x * inv, a.
y * inv, a.
z * inv);
116 return vector3(scalar / a.
x, scalar / a.
y, scalar / a.
z);
134 return *
this + percent * (b - *
this);
138 const T l = 1.0f / sqrt(
x *
x +
y *
y +
z *
z);
143 const T lenSqr =
x *
x +
y *
y +
z *
z;
147 const T l = sqrt(lenSqr);
152 void Print()
const { printf(
"v(%f,%f,%f)\n",
x,
y,
z); }
166 T inv_poo = 1.0f / (u * u + v * v + w * w);
167 t.
x = a * (v * v + w * w) + u * (-b * v - c * w + u *
x + v *
y + w *
z) + (-a * (v * v + w * w) + u * (b * v + c * w - v *
y - w *
z) + (v * v + w * w) *
x) * cos_a +
168 sqrtf(u * u + v * v + w * w) * (-c * v + b * w - w *
y + v *
z) * sin_a;
170 t.
y = b * (u * u + w * w) + v * (-a * u - c * w + u *
x + v *
y + w *
z) + (-b * (u * u + w * w) + v * (a * u + c * w - u *
x - w *
z) + (u * u + w * w) *
y) * cos_a +
171 sqrtf(u * u + v * v + w * w) * (-c * u - a * w + w *
x - u *
z) * sin_a;
173 t.
z = c * (u * u + v * v) + w * (-a * u + b * v + u *
x + v *
y + w *
z) + (-c * (u * u + v * v) + w * (a * u + b * v - u *
x - v *
y) + (u * u + v * v) *
z) * cos_a +
174 sqrtf(u * u + v * v + w * w) * (-b * u + a * v - v *
x + u *
y) * sin_a;
188 T inv_poo = 1.0f / (u * u + v * v + w * w);
189 t.
x = u * (u *
x + v *
y + w *
z) + (u * (-v *
y - w *
z) + (v * v + w * w) *
x) * cos_a +
190 sqrtf(u * u + v * v + w * w) * (-w *
y + v *
z) * sin_a;
192 t.
y = v * (u *
x + v *
y + w *
z) + (v * (-u *
x - w *
z) + (u * u + w * w) *
y) * cos_a +
193 sqrtf(u * u + v * v + w * w) * (w *
x - u *
z) * sin_a;
195 t.
z = w * (u *
x + v *
y + w *
z) + (w * (-u *
x - v *
y) + (u * u + v * v) *
z) * cos_a +
196 sqrtf(u * u + v * v + w * w) * (-v *
x + u *
y) * sin_a;
332static_assert(
alignof(
vector3d) == 8);
333static_assert(offsetof(
vector3d, y) == 8);
334static_assert(offsetof(
vector3d, z) == 16);
336static_assert(
alignof(
vector3f) == 4);
337static_assert(offsetof(
vector3f, y) == 4);
338static_assert(offsetof(
vector3f, z) == 8);
bool is_equal_exact(float a, float b)
Definition: FloatComparison.h:112
double val
Definition: PrecalcPath.cpp:40
T y
Definition: vector2.h:26
T x
Definition: vector2.h:26
T Dot(const vector3 &b) const
Definition: vector3.h:129
vector2< T > xy()
Definition: vector3.h:217
T & operator[](const size_t i)
Definition: vector3.h:35
vector3 operator-(const vector3 &a) const
Definition: vector3.h:82
vector2< T > xz()
Definition: vector3.h:218
vector3 & operator/=(const double a)
Definition: vector3.h:74
T y
Definition: vector3.h:20
vector3 & operator/=(const float a)
Definition: vector3.h:66
void xy(const vector2< T > &v2)
Definition: vector3.h:201
auto operator>=(const vector3 &b) const
Definition: vector3.h:126
vector3(T _x, T _y, T _z)
void ArbRotateAroundPoint(const vector3 &o, const vector3 &__v, T ang)
Definition: vector3.h:155
void Print() const
Definition: vector3.h:152
vector3 & operator*=(const float a)
Definition: vector3.h:52
friend vector3 operator/(const vector3 &a, const float scalar)
Definition: vector3.h:104
const T & operator[](const size_t i) const
Definition: vector3.h:34
T LengthSqr() const
Definition: vector3.h:131
vector3 Lerp(const vector3 &b, const double percent) const
Definition: vector3.h:132
vector3 & operator+=(const vector3 &a)
Definition: vector3.h:38
T x
Definition: vector3.h:20
friend vector3 operator*(const vector3 &a, const T scalar)
Definition: vector3.h:100
vector2< T > yx()
Definition: vector3.h:220
vector3 NormalizedSafe() const
Definition: vector3.h:141
friend vector3 operator*(const vector3 &a, const vector3 &b)
Definition: vector3.h:99
T element_type
Definition: vector3.h:18
friend vector3 operator/(const vector3 &a, const double scalar)
Definition: vector3.h:109
void xz(const vector2< T > &v2)
Definition: vector3.h:206
T Length() const
Definition: vector3.h:130
friend vector3 operator-(const T scalar, const vector3 &a)
Definition: vector3.h:97
vector2< T > zx()
Definition: vector3.h:221
auto operator<=(const vector3 &b) const
Definition: vector3.h:122
T z
Definition: vector3.h:20
friend vector3 operator*(const T scalar, const vector3 &a)
Definition: vector3.h:102
void ArbRotate(const vector3 &__v, T ang)
Definition: vector3.h:180
friend vector3 operator/(const T scalar, const vector3 &a)
Definition: vector3.h:114
auto operator<(const vector3 &b) const
Definition: vector3.h:120
vector3 & operator-=(const vector3 &a)
Definition: vector3.h:45
vector3 operator-() const
Definition: vector3.h:83
void yz(const vector2< T > &v2)
Definition: vector3.h:211
auto operator>(const vector3 &b) const
Definition: vector3.h:124
friend vector3 operator+(const vector3 &a, const T &scalar)
Definition: vector3.h:94
bool ExactlyEqual(const vector3 &a) const
Definition: vector3.h:89
vector2< T > yz()
Definition: vector3.h:219
bool operator==(const vector3 &a) const
Definition: vector3.h:85
vector3 Normalized() const
Definition: vector3.h:136
friend vector3 operator+(const T scalar, const vector3 &a)
Definition: vector3.h:95
vector3 & operator*=(const double a)
Definition: vector3.h:59
vector3(const vector3< typename other_floating_type< T >::type > &v)
friend vector3 operator-(const vector3 &a, const T &scalar)
Definition: vector3.h:96
vector3 Cross(const vector3 &b) const
Definition: vector3.h:128
vector3 operator+(const vector3 &a) const
Definition: vector3.h:37
vector3(const typename other_floating_type< T >::type vals[3])
vector3(const vector2f &v, T t)
vector3< float > vector3f
Definition: vector3.h:328
vector3< T > max(const vector3< T > &lhs, const vector3< T > &rhs)
Definition: vector3.h:312
vector3< double > vector3d
Definition: vector3.h:329
vector3< T > min(const vector3< T > &lhs, const vector3< T > &rhs)
Definition: vector3.h:320