 |
Irrlicht 3D Engine
|
|
Go to the documentation of this file.
5 #ifndef __IRR_POINT_3D_H_INCLUDED__
6 #define __IRR_POINT_3D_H_INCLUDED__
95 return this->
equals(other);
100 return !this->
equals(other);
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]));
428 const f64 length = X*X + Y*Y + Z*Z;
451 template<
class S,
class T>
bool operator!=(const vector3d< T > &other) const
vector3d< T > & operator+=(const vector3d< T > &other)
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 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.
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.
REALINLINE f32 squareroot(const f32 f)
T getDistanceFrom(const vector3d< T > &other) const
Get distance from another point.
T dotProduct(const vector3d< T > &other) const
Get the dot product with another vector.
vector3d(T n)
Constructor with the same value for all elements.
vector3d< s32 > vector3di
Typedef for an integer 3d vector.
vector3d< T > getInterpolated(const vector3d< T > &other, f64 d) const
Creates an interpolated vector between this vector and another vector.
bool operator>=(const vector3d< T > &other) const
sort in order X, Y, Z. Equality with rounding tolerance.
vector3d< T > & set(const T nx, const T ny, const T nz)
vector3d< T > rotationToDirection(const vector3d< T > &forwards=vector3d< T >(0, 0, 1)) const
Builds a direction vector from (this) rotation vector.
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.
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()
Default constructor (null vector).
vector3d< T > operator/(const T v) const
const f64 RADTODEG64
64bit constant for converting from radians to degrees
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 getAs3Values(T *array) const
Fills an array of 3 values with the vector data (usually floats).
vector3d< T > getSphericalCoordinateAngles() const
Get the spherical coordinate angles.
bool operator>(const vector3d< T > &other) const
sort in order X, Y, Z. Difference must be above rounding tolerance.
vector3d< T > operator-() const
vector3d< T > & operator/=(const T v)
vector3d< T > operator+(const T val) const
bool operator==(const vector3d< T > &other) const
use weak float compare
T getDistanceFromSQ(const vector3d< T > &other) const
Returns squared distance from another point.
vector3d< T > crossProduct(const vector3d< T > &p) const
Calculates the cross product with another vector.
T Y
Y coordinate of the vector.
signed int s32
32 bit signed variable.
vector3d< T > & operator=(const vector3d< T > &other)
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
vector3d< T > & operator-=(const vector3d< T > &other)
vector3d< T > operator*(const T v) const
T Z
Z coordinate of the vector.
vector3d< T > & operator/=(const vector3d< T > &other)
double f64
64 bit floating point variable.
vector3d< T > & normalize()
Normalizes the vector.
void getAs4Values(T *array) const
Fills an array of 4 values with the vector data (usually floats).
float f32
32 bit floating point variable.
bool operator<(const vector3d< T > &other) const
sort in order X, Y, Z. Difference must be above rounding tolerance.
bool operator<=(const vector3d< T > &other) const
sort in order X, Y, Z. Equality with rounding tolerance.
vector3d(T nx, T ny, T nz)
Constructor with three different values.
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.
const f32 ROUNDING_ERROR_f32
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
vector3d< T > & operator*=(const T v)
Everything in the Irrlicht Engine can be found in this namespace.
vector3d< T > operator/(const vector3d< T > &other) const
vector3d< T > & setLength(T newlength)
Sets the length of the vector to a new value.
CMatrix4< T > operator*(const T scalar, const CMatrix4< T > &mat)
T getLength() const
Get length of the vector.
Self reallocating template array (like stl vector) with additional features.
vector3d< T > operator*(const vector3d< T > &other) const
REALINLINE s32 round32(f32 x)
const f64 DEGTORAD64
64bit constant for converting from degrees to radians (formally known as GRAD_PI2)
REALINLINE f64 reciprocal_squareroot(const f64 x)
vector3d< f32 > vector3df
Typedef for a f32 3d vector.
3d vector template class with lots of operators and methods.
vector3d< T > operator+(const vector3d< T > &other) const
vector3d< T > operator-(const vector3d< T > &other) const
vector3d< T > & invert()
Inverts the vector.
vector3d< T > & set(const vector3d< T > &p)
vector3d< T > operator-(const T val) const
vector3d< T > & operator-=(const T val)
vector3d(const vector3d< T > &other)
Copy constructor.
T X
X coordinate of the vector.
vector3d< T > & operator+=(const T val)