5 #ifndef __IRR_POINT_3D_H_INCLUDED__ 6 #define __IRR_POINT_3D_H_INCLUDED__ 61 bool operator<=(const vector3d<T>&other)
const 77 bool operator<(const vector3d<T>&other)
const 95 return this->
equals(other);
100 return !this->
equals(other);
113 vector3d<T>&
set(
const T nx,
const T ny,
const T nz) {
X=nx;
Y=ny;
Z=nz;
return *
this;}
127 return X*other.
X +
Y*other.
Y +
Z*other.
Z;
185 return (*
this *= newlength);
203 f64 cs = cos(degrees);
204 f64 sn = sin(degrees);
207 set((T)(
X*cs -
Z*sn),
Y, (T)(
X*sn +
Z*cs));
218 f64 cs = cos(degrees);
219 f64 sn = sin(degrees);
222 set((T)(
X*cs -
Y*sn), (T)(
X*sn +
Y*cs),
Z);
233 f64 cs = cos(degrees);
234 f64 sn = sin(degrees);
237 set(
X, (T)(
Y*cs -
Z*sn), (T)(
Y*sn +
Z*cs));
249 const f64 inv = 1.0 - d;
250 return vector3d<T>((T)(other.
X*inv +
X*d), (T)(other.
Y*inv +
Y*d), (T)(other.
Z*inv +
Z*d));
262 const f64 inv = (T) 1.0 - d;
263 const f64 mul0 = inv * inv;
264 const f64 mul1 = (T) 2.0 * d * inv;
265 const f64 mul2 = d * d;
268 (T)(
Y * mul0 + v2.
Y * mul1 + v3.
Y * mul2),
269 (T)(
Z * mul0 + v2.
Z * mul1 + v3.
Z * mul2));
280 X = (T)((
f64)b.
X + ( ( a.
X - b.
X ) * d ));
281 Y = (T)((
f64)b.
Y + ( ( a.
Y - b.
Y ) * d ));
282 Z = (T)((
f64)b.
Z + ( ( a.
Z - b.
Z ) * d ));
366 const f64 srsp = sr*sp;
367 const f64 crsp = cr*sp;
369 const f64 pseudoMatrix[] = {
370 ( cp*cy ), ( cp*sy ), ( -sp ),
371 ( srsp*cy-cr*sy ), ( srsp*sy+cr*cy ), ( sr*cp ),
372 ( crsp*cy+sr*sy ), ( crsp*sy-sr*cy ), ( cr*cp )};
375 (T)(forwards.X * pseudoMatrix[0] +
376 forwards.Y * pseudoMatrix[3] +
377 forwards.Z * pseudoMatrix[6]),
378 (T)(forwards.X * pseudoMatrix[1] +
379 forwards.Y * pseudoMatrix[4] +
380 forwards.Z * pseudoMatrix[7]),
381 (T)(forwards.X * pseudoMatrix[2] +
382 forwards.Y * pseudoMatrix[5] +
383 forwards.Z * pseudoMatrix[8]));
451 template<
class S,
class T>
vector3d< T > & invert()
Inverts the vector.
vector3d< T > & operator-=(const T val)
const f64 RADTODEG64
64bit constant for converting from radians to degrees
bool operator>=(const vector3d< T > &other) const
sort in order X, Y, Z. Equality with rounding tolerance.
vector3d< T > & operator=(const vector3d< T > &other)
bool equals(const vector3d< T > &other, const T tolerance=(T) ROUNDING_ERROR_f32) const
returns if this vector equals the other one, taking floating point rounding errors into account ...
REALINLINE s32 round32(f32 x)
T Y
Y coordinate of the vector.
vector3d< T > operator+(const vector3d< T > &other) const
vector3d< T > & operator-=(const vector3d< T > &other)
float f32
32 bit floating point variable.
vector3d< T > operator+(const T val) const
vector3d(T nx, T ny, T nz)
Constructor with three different values.
void getAs3Values(T *array) const
Fills an array of 3 values with the vector data (usually floats).
REALINLINE f32 squareroot(const f32 f)
vector3d< T > operator/(const T v) const
void rotateXZBy(f64 degrees, const vector3d< T > ¢er=vector3d< T >())
Rotates the vector by a specified number of degrees around the Y axis and the specified center...
vector3d< T > operator-(const T val) const
vector3d< T > operator-(const vector3d< T > &other) const
T X
X coordinate of the vector.
T getLengthSQ() const
Get squared length of the vector.
vector3d< T > & operator*=(const vector3d< T > &other)
vector3d< T > getInterpolated_quadratic(const vector3d< T > &v2, const vector3d< T > &v3, f64 d) const
Creates a quadratically interpolated vector between this and two other vectors.
Everything in the Irrlicht Engine can be found in this namespace.
3d vector template class with lots of operators and methods.
double f64
64 bit floating point variable.
bool isBetweenPoints(const vector3d< T > &begin, const vector3d< T > &end) const
Returns if this vector interpreted as a point is on a line between two other points.
vector3d< T > getInterpolated(const vector3d< T > &other, f64 d) const
Creates an interpolated vector between this vector and another vector.
vector3d< T > crossProduct(const vector3d< T > &p) const
Calculates the cross product with another vector.
vector3d< f32 > vector3df
Typedef for a f32 3d vector.
vector3d< T > operator*(const T v) const
vector3d(const vector3d< T > &other)
Copy constructor.
vector3d< T > operator*(const vector3d< T > &other) const
vector3d< T > & operator/=(const vector3d< T > &other)
const f64 DEGTORAD64
64bit constant for converting from degrees to radians (formally known as GRAD_PI2) ...
const f32 ROUNDING_ERROR_f32
vector3d< T > & setLength(T newlength)
Sets the length of the vector to a new value.
signed int s32
32 bit signed variable.
T getDistanceFrom(const vector3d< T > &other) const
Get distance from another point.
vector3d< T > & operator+=(const vector3d< T > &other)
bool operator>(const vector3d< T > &other) const
sort in order X, Y, Z. Difference must be above rounding tolerance.
vector3d< s32 > vector3di
Typedef for an integer 3d vector.
vector3d< T > & operator+=(const T val)
vector3d< T > & operator/=(const T v)
vector3d< T > & normalize()
Normalizes the vector.
vector3d< T > operator-() const
void getAs4Values(T *array) const
Fills an array of 4 values with the vector data (usually floats).
vector3d(T n)
Constructor with the same value for all elements.
vector3d< T > rotationToDirection(const vector3d< T > &forwards=vector3d< T >(0, 0, 1)) const
Builds a direction vector from (this) rotation vector.
Self reallocating template array (like stl vector) with additional features.
vector3d< T > getHorizontalAngle() const
Get the rotations that would make a (0,0,1) direction vector point in the same direction as this dire...
vector3d< T > operator/(const vector3d< T > &other) const
vector3d< T > & interpolate(const vector3d< T > &a, const vector3d< T > &b, f64 d)
Sets this vector to the linearly interpolated vector between a and b.
bool operator==(const vector3d< T > &other) const
use weak float compare
T Z
Z coordinate of the vector.
vector3d< T > getSphericalCoordinateAngles() const
Get the spherical coordinate angles.
T getDistanceFromSQ(const vector3d< T > &other) const
Returns squared distance from another point.
vector3d< T > & operator*=(const T v)
T dotProduct(const vector3d< T > &other) const
Get the dot product with another vector.
bool equals(const f64 a, const f64 b, const f64 tolerance=ROUNDING_ERROR_f64)
returns if a equals b, taking possible rounding errors into account
REALINLINE f64 reciprocal_squareroot(const f64 x)
bool operator!=(const vector3d< T > &other) const
void rotateYZBy(f64 degrees, const vector3d< T > ¢er=vector3d< T >())
Rotates the vector by a specified number of degrees around the X axis and the specified center...
void rotateXYBy(f64 degrees, const vector3d< T > ¢er=vector3d< T >())
Rotates the vector by a specified number of degrees around the Z axis and the specified center...
T getLength() const
Get length of the vector.
vector3d()
Default constructor (null vector).