35 enum { X = 0, Y = 1, Z = 2 };
43 m_values[X] = (Scalar)0.0;
44 m_values[Y] = (Scalar)0.0;
45 m_values[Z] = (Scalar)0.0;
74 Scalar& x() {
return m_values[X]; }
75 Scalar& y() {
return m_values[Y]; }
76 Scalar& z() {
return m_values[Z]; }
77 const Scalar& x()
const {
return m_values[X]; }
78 const Scalar& y()
const {
return m_values[Y]; }
79 const Scalar& z()
const {
return m_values[Z]; }
89 return ksVector3{ m_values[X] * c, m_values[Y] * c, m_values[Z] * c };
100 return ksVector3{ m_values[X] / c, m_values[Y] / c, m_values[Z] / c };
111 return ksVector3{ m_values[X] + v.x(), m_values[Y] + v.y(), m_values[Z] + v.z() };
122 return ksVector3{ m_values[X] - v.x(), m_values[Y] - v.y(), m_values[Z] - v.z() };
132 return ksVector3{ -m_values[X], -m_values[Y], -m_values[Z] };
171 m_values[X] += v.x();
172 m_values[Y] += v.y();
173 m_values[Z] += v.z();
185 m_values[X] -= v.x();
186 m_values[Y] -= v.y();
187 m_values[Z] -= v.z();
199 return m_values[X] == v.x() && m_values[Y] == v.y() && m_values[Z] == v.z();
210 return !(*
this == v);
221 return m_values[i % 3];
229 return m_values[X] * m_values[X] + m_values[Y] * m_values[Y] + m_values[Z] * m_values[Z];
237 return std::sqrt(MagnitudeSquared());
248 Scalar m = (m_values[X] < 0.0f) ? -m_values[X] : m_values[X];
249 Scalar absy = (m_values[Y] < 0.0f) ? -m_values[Y] : m_values[Y];
250 Scalar absz = (m_values[Z] < 0.0f) ? -m_values[Z] : m_values[Z];
252 m = (absy > m) ? absy : m;
253 m = (absz > m) ? absz : m;
255 if (m == 0 || m == -0)
266 Scalar length = (Scalar)sqrt(m_values[X] * m_values[X] + m_values[Y] * m_values[Y] + m_values[Z] * m_values[Z]);
267 m_values[X] /= length;
268 m_values[Y] /= length;
269 m_values[Z] /= length;
278 bool IsZero(Scalar tolerance = 0.000001f)
const
280 return ((m_values[X] * m_values[X] + m_values[Y] * m_values[Y] + m_values[Z] * m_values[Z]) < tolerance);
292 return (v1 - v2).Magnitude();
304 return (v1 - v2).MagnitudeSquared();
316 return v1.x() * v2.x() + v1.y() * v2.y() + v1.z() * v2.z();
328 return ksVector3{ v1.y() * v2.z() - v1.z() * v2.y(),
329 v1.z() * v2.x() - v1.x() * v2.z(),
330 v1.x() * v2.y() - v1.y() * v2.x() };
340 return "X=" + std::to_string(m_values[X]) +
", Y=" + std::to_string(m_values[Y]) +
", Z=" + std::to_string(m_values[Z]);
Definition: ksVector3.h:32
std::string ToString()
Definition: ksVector3.h:338
ksVector3(Scalar x, Scalar y, Scalar z)
Definition: ksVector3.h:61
float Magnitude()
Definition: ksVector3.h:235
ksVector3()
Definition: ksVector3.h:41
static Scalar Dot(const ksVector3 &v1, const ksVector3 &v2)
Definition: ksVector3.h:314
Scalar & operator[](const int &i)
Definition: ksVector3.h:219
~ksVector3()
Definition: ksVector3.h:71
bool IsZero(Scalar tolerance=0.000001f) const
Definition: ksVector3.h:278
ksVector3(const ksVector3 &v)
Definition: ksVector3.h:51
static Scalar DistanceSquared(const ksVector3 &v1, const ksVector3 &v2)
Definition: ksVector3.h:302
float MagnitudeSquared()
Definition: ksVector3.h:227
void Normalize()
Definition: ksVector3.h:243
static Scalar Distance(const ksVector3 &v1, const ksVector3 &v2)
Definition: ksVector3.h:290
static ksVector3 Cross(const ksVector3 &v1, const ksVector3 &v2)
Definition: ksVector3.h:326
Definition: sfDictionaryProperty.h:24
ksVector3 operator*(const Scalar &c, const ksVector3 &v)
Definition: ksVector3.h:352