Colobot
|
Namespace for (new) math code. More...
Classes | |
struct | IntPoint |
2D Point with integer coords More... | |
struct | Matrix |
4x4 matrix More... | |
struct | Point |
2D point More... | |
struct | Sphere |
struct | Vector |
3D (3x1) vector More... | |
Functions | |
bool | IsEqual (float a, float b, float tolerance=Math::TOLERANCE) |
Compares a and b within tolerance. More... | |
bool | IsZero (float a, float tolerance=Math::TOLERANCE) |
Compares a to zero within tolerance. More... | |
float | Min (float a, float b) |
Minimum. More... | |
float | Min (float a, float b, float c) |
float | Min (float a, float b, float c, float d) |
float | Min (float a, float b, float c, float d, float e) |
float | Max (float a, float b) |
Maximum. More... | |
float | Max (float a, float b, float c) |
float | Max (float a, float b, float c, float d) |
float | Max (float a, float b, float c, float d, float e) |
template<typename T > | |
T | Clamp (T value, T min, T max) |
Clamps the value to a range specified by min and max. More... | |
float | Norm (float a) |
Returns the normalized value (0 .. 1) More... | |
void | Swap (int &a, int &b) |
Swaps two integers. More... | |
void | Swap (float &a, float &b) |
Swaps two real numbers. More... | |
float | Mod (float a, float m) |
Returns the modulo of a floating point number. More... | |
float | Rand () |
Returns a random value between 0 and 1. More... | |
bool | IsPowerOfTwo (unsigned int x) |
Returns whether x is an even power of 2. More... | |
int | NextPowerOfTwo (int x) |
Returns the next nearest power of two to x. More... | |
float | NormAngle (float angle) |
Returns a normalized angle, that is in other words between 0 and 2 * PI. More... | |
bool | TestAngle (float angle, float min, float max) |
Test if a angle is between two terminals. More... | |
float | PropAngle (float a, float b, float p) |
Calculates a value (radians) proportional between a and b (degrees) More... | |
float | Direction (float a, float g) |
Calculates the angle to rotate the angle a to the angle g. More... | |
float | Neutral (float value, float dead) |
Managing the dead zone of a joystick. More... | |
float | Smooth (float actual, float hope, float time) |
Gently advances a desired value from its current value. More... | |
float | Bounce (float progress, float middle=0.3f, float bounce=0.4f) |
Bounces any movement. More... | |
float | MidPoint (const Math::Point &a, const Math::Point &b, float px) |
Returns py up on the line a - b. More... | |
bool | IsInsideTriangle (Math::Point a, Math::Point b, Math::Point c, Math::Point p) |
Tests whether the point p is inside the triangle (a,b,c) More... | |
Math::Point | RotatePoint (const Math::Point ¢er, float angle, const Math::Point &p) |
Rotates a point around a center. More... | |
Math::Point | RotatePoint (float angle, const Math::Point &p) |
Rotates a point around the origin (0,0) More... | |
Math::Point | RotatePoint (float angle, float dist) |
Rotates a vector (dist, 0) More... | |
void | RotatePoint (float cx, float cy, float angle, float &px, float &py) |
Rotates a point around a center on 2D plane. More... | |
void | RotatePoint (const Math::Vector ¢er, float angleH, float angleV, Math::Vector &p) |
Rotates a point around a center in space. More... | |
void | RotatePoint2 (const Math::Vector center, float angleH, float angleV, Math::Vector &p) |
Rotates a point around a center in space. More... | |
float | RotateAngle (float x, float y) |
Returns the angle between point (x,y) and (0,0) More... | |
float | RotateAngle (const Math::Point ¢er, const Math::Point &p1, const Math::Point &p2) |
Calculates the angle between two points and a center. More... | |
void | LoadViewMatrix (Math::Matrix &mat, const Math::Vector &from, const Math::Vector &at, const Math::Vector &worldUp) |
Loads view matrix from the given vectors. More... | |
void | LoadProjectionMatrix (Math::Matrix &mat, float fov=Math::PI/2.0f, float aspect=1.0f, float nearPlane=1.0f, float farPlane=1000.0f) |
Loads a perspective projection matrix. More... | |
void | LoadOrthoProjectionMatrix (Math::Matrix &mat, float left, float right, float bottom, float top, float zNear=-1.0f, float zFar=1.0f) |
Loads an othogonal projection matrix. More... | |
void | LoadTranslationMatrix (Math::Matrix &mat, const Math::Vector &trans) |
Loads a translation matrix from given vector. More... | |
void | LoadScaleMatrix (Math::Matrix &mat, const Math::Vector &scale) |
Loads a scaling matrix fom given vector. More... | |
void | LoadRotationXMatrix (Math::Matrix &mat, float angle) |
Loads a rotation matrix along the X axis. More... | |
void | LoadRotationYMatrix (Math::Matrix &mat, float angle) |
Loads a rotation matrix along the Y axis. More... | |
void | LoadRotationZMatrix (Math::Matrix &mat, float angle) |
Loads a rotation matrix along the Z axis. More... | |
void | LoadRotationMatrix (Math::Matrix &mat, const Math::Vector &dir, float angle) |
Loads a rotation matrix along the given axis. More... | |
void | LoadRotationXZYMatrix (Math::Matrix &mat, const Math::Vector &angles) |
Calculates the matrix to make three rotations in the order X, Z and Y. More... | |
void | LoadRotationZXYMatrix (Math::Matrix &mat, const Math::Vector &angles) |
Calculates the matrix to make three rotations in the order Z, X and Y. More... | |
float | DistanceProjected (const Math::Vector &a, const Math::Vector &b) |
Returns the distance between projections on XZ plane of two vectors. More... | |
Math::Vector | NormalToPlane (const Math::Vector &p1, const Math::Vector &p2, const Math::Vector &p3) |
Returns the normal vector to a plane. More... | |
Math::Vector | SegmentPoint (const Math::Vector &p1, const Math::Vector &p2, float dist) |
Returns a point on the line p1 - p2, in dist distance from p1. More... | |
float | DistanceToPlane (const Math::Vector &a, const Math::Vector &b, const Math::Vector &c, const Math::Vector &p) |
Returns the distance between given point and a plane. More... | |
bool | IsSamePlane (const Math::Vector(&plane1)[3], const Math::Vector(&plane2)[3]) |
Checks if two planes defined by three points are the same. More... | |
bool | Intersect (const Math::Vector &a, const Math::Vector &b, const Math::Vector &c, const Math::Vector &d, const Math::Vector &e, Math::Vector &i) |
Calculates the intersection "i" right "of" the plane "abc" (TODO: ?) More... | |
bool | IntersectY (const Math::Vector &a, const Math::Vector &b, const Math::Vector &c, Math::Vector &p) |
Calculates the intersection of the straight line passing through p (x, z) More... | |
Math::Vector | LookatPoint (const Math::Vector &eye, float angleH, float angleV, float length) |
Calculates the end point. More... | |
Math::Vector | Transform (const Math::Matrix &m, const Math::Vector &p) |
Transforms the point p by matrix m. More... | |
Math::Vector | Projection (const Math::Vector &a, const Math::Vector &b, const Math::Vector &p) |
Calculates the projection of the point p on a straight line a to b. More... | |
Math::Vector | RotateView (Math::Vector center, float angleH, float angleV, float dist) |
Calculates point of view to look at a center two angles and a distance. More... | |
bool | MatricesEqual (const Matrix &m1, const Matrix &m2, float tolerance=TOLERANCE) |
Checks if two matrices are equal within given tolerance. More... | |
Math::Matrix | Transpose (const Math::Matrix &m) |
Convenience function for getting transposed matrix. More... | |
Math::Matrix | MultiplyMatrices (const Math::Matrix &left, const Math::Matrix &right) |
Convenience function for multiplying a matrix. More... | |
Math::Vector | MatrixVectorMultiply (const Math::Matrix &m, const Math::Vector &v, bool wDivide=false) |
Calculates the result of multiplying m * v. More... | |
bool | PointsEqual (const Point &a, const Point &b, float tolerance=TOLERANCE) |
Checks if two vectors are equal within given tolerance. More... | |
void | Swap (Point &a, Point &b) |
Permutes two points. More... | |
float | Distance (const Point &a, const Point &b) |
Returns the distance between two points. More... | |
float | DistanceToSphere (const Vector &point, const Sphere &sphere) |
Compute distance between given point and sphere. More... | |
float | DistanceBetweenSpheres (const Sphere &sphere1, const Sphere &sphere2) |
bool | VectorsEqual (const Math::Vector &a, const Math::Vector &b, float tolerance=TOLERANCE) |
Checks if two vectors are equal within given tolerance. More... | |
Vector | Normalize (const Math::Vector &v) |
Convenience function for getting normalized vector. More... | |
float | DotProduct (const Math::Vector &left, const Math::Vector &right) |
Convenience function for calculating dot product. More... | |
Vector | CrossProduct (const Math::Vector &left, const Math::Vector &right) |
Convenience function for calculating cross product. More... | |
float | Angle (const Math::Vector &a, const Math::Vector &b) |
Convenience function for calculating angle (in radians) between two vectors. More... | |
float | Distance (const Math::Vector &a, const Math::Vector &b) |
Returns the distance between the ends of two vectors. More... | |
Vector | Clamp (const Vector &vec, const Vector &min, const Vector &max) |
Clamps the vector vec to range between min and max. More... | |
Variables | |
const float | TOLERANCE = 1e-6f |
Tolerance level – minimum accepted float value. More... | |
const float | VERY_SMALL_NUM = 1e-6f |
Very small number (used in testing/returning some values) More... | |
const float | VERY_BIG_NUM = 1e6f |
Very big number (used in testing/returning some values) More... | |
const float | HUGE_NUM = 1.0e+38f |
Huge number. More... | |
const float | PI = 3.14159265358979323846f |
PI. More... | |
const float | DEG_TO_RAD = 0.01745329251994329547f |
Degrees to radians multiplier. More... | |
const float | RAD_TO_DEG = 57.29577951308232286465f |
Radians to degrees multiplier. More... | |
const float | LOG_2 = log(2.0f) |
Natural logarithm of 2. More... | |
Namespace for (new) math code.
This namespace was created to avoid clashing with old code, but now it still serves, defining a border between math and non-math-related code.
|
inline |
Compares a and b within tolerance.
|
inline |
Compares a to zero within tolerance.
|
inline |
Minimum.
|
inline |
Maximum.
|
inline |
Clamps the value to a range specified by min and max.
|
inline |
Returns the normalized value (0 .. 1)
|
inline |
Swaps two integers.
|
inline |
Swaps two real numbers.
|
inline |
Returns the modulo of a floating point number.
Mod(8.1, 4) = 0.1 Mod(n, 1) = fractional part of n
|
inline |
Returns a random value between 0 and 1.
|
inline |
Returns whether x is an even power of 2.
|
inline |
Returns the next nearest power of two to x.
|
inline |
Returns a normalized angle, that is in other words between 0 and 2 * PI.
|
inline |
Test if a angle is between two terminals.
|
inline |
Calculates a value (radians) proportional between a and b (degrees)
|
inline |
Calculates the angle to rotate the angle a to the angle g.
A positive angle is counterclockwise (CCW).
|
inline |
Managing the dead zone of a joystick.
in: -1 0 1 --|-------|----o----|-------|--> <----> dead out: -1 0 0 1
|
inline |
Gently advances a desired value from its current value.
Over time, the progression is more rapid.
|
inline |
Bounces any movement.
out | 1+------o-------o--- | o | o o | | bounce | o | o---|--- | o | | | o | | -o------|-------+----> progress 0| | 1 |<---->|middle
|
inline |
Returns py up on the line a - b.
|
inline |
Tests whether the point p is inside the triangle (a,b,c)
|
inline |
Rotates a point around a center.
center | center of rotation |
angle | angle [radians] (positive is CCW) |
p | the point to be rotated |
|
inline |
Rotates a point around the origin (0,0)
angle | angle [radians] (positive is CCW) |
p | the point to be rotated |
|
inline |
Rotates a vector (dist, 0)
angle | angle [radians] (positive is CCW) |
dist | distance to origin |
|
inline |
Rotates a point around a center on 2D plane.
cx,cy | center of rotation |
angle | angle of rotation [radians] (positive is CCW) |
px,py | point coordinates to rotate |
|
inline |
Rotates a point around a center in space.
angleH is rotation along Y axis (heading) while angleV is rotation along X axis (TODO: ?).
center | center of rotation |
angleH,angleV | rotation angles [radians] (positive is CCW) |
p | the point to be rotated |
|
inline |
Rotates a point around a center in space.
The rotation is performed first along Y axis (angleH) and then along X axis (angleV).
center | center of rotation |
angleH,angleV | rotation angles [radians] (positive is CCW) |
p | the point to be rotated |
|
inline |
Returns the angle between point (x,y) and (0,0)
|
inline |
Calculates the angle between two points and a center.
center | the center point |
p1,p2 | the two points |
|
inline |
Loads view matrix from the given vectors.
mat | result matrix |
from | origin |
at | view direction |
worldUp | up vector |
|
inline |
Loads a perspective projection matrix.
mat | result matrix |
fov | field of view in radians |
aspect | aspect ratio (width / height) |
nearPlane | distance to near cut plane |
farPlane | distance to far cut plane |
|
inline |
Loads an othogonal projection matrix.
mat | result matrix |
left,right | coordinates for left and right vertical clipping planes |
bottom,top | coordinates for bottom and top horizontal clipping planes |
zNear,zFar | distance to nearer and farther depth clipping planes |
|
inline |
Loads a translation matrix from given vector.
mat | result matrix |
trans | vector of translation |
|
inline |
Loads a scaling matrix fom given vector.
mat | result matrix |
scale | vector with scaling factors for X, Y, Z |
|
inline |
Loads a rotation matrix along the X axis.
mat | result matrix |
angle | angle [radians] |
|
inline |
Loads a rotation matrix along the Y axis.
mat | result matrix |
angle | angle [radians] |
|
inline |
Loads a rotation matrix along the Z axis.
mat | result matrix |
angle | angle [radians] |
|
inline |
Loads a rotation matrix along the given axis.
mat | result matrix |
dir | axis of rotation |
angle | angle [radians] |
|
inline |
Calculates the matrix to make three rotations in the order X, Z and Y.
|
inline |
Calculates the matrix to make three rotations in the order Z, X and Y.
|
inline |
Returns the distance between projections on XZ plane of two vectors.
|
inline |
Returns the normal vector to a plane.
p1,p2,p3 | points defining the plane |
|
inline |
Returns a point on the line p1 - p2, in dist distance from p1.
p1,p2 | line start and end |
dist | scaling factor from p1, relative to distance between p1 and p2 |
|
inline |
Returns the distance between given point and a plane.
p | the point |
a,b,c | points defining the plane |
|
inline |
Checks if two planes defined by three points are the same.
plane1 | array of three vectors defining the first plane |
plane2 | array of three vectors defining the second plane |
|
inline |
Calculates the intersection "i" right "of" the plane "abc" (TODO: ?)
|
inline |
Calculates the intersection of the straight line passing through p (x, z)
Line is parallel to the y axis, with the plane abc. Returns p.y. (TODO: ?)
|
inline |
Calculates the end point.
|
inline |
Transforms the point p by matrix m.
Is equal to multiplying the matrix by the vector (of course without perspective divide).
|
inline |
Calculates the projection of the point p on a straight line a to b.
p | point to project |
a,b | two ends of the line |
|
inline |
Calculates point of view to look at a center two angles and a distance.
|
inline |
Checks if two matrices are equal within given tolerance.
|
inline |
Convenience function for getting transposed matrix.
|
inline |
Convenience function for multiplying a matrix.
left left-hand matrix right right-hand matrix
|
inline |
Calculates the result of multiplying m * v.
The multiplication is performed thus:
[ m.m[0 ] m.m[4 ] m.m[8 ] m.m[12] ] [ v.x ] [ m.m[1 ] m.m[5 ] m.m[9 ] m.m[13] ] [ v.y ] [ m.m[2 ] m.m[6 ] m.m[10] m.m[14] ] * [ v.z ] [ m.m[3 ] m.m[7 ] m.m[11] m.m[15] ] [ 1 ]
The result, a 4x1 vector is then converted to 3x1 by dividing x,y,z coords by the fourth coord (w).
|
inline |
Checks if two vectors are equal within given tolerance.
|
inline |
Permutes two points.
|
inline |
Returns the distance between two points.
|
inline |
Compute distance between given point and sphere.
|
inline |
Checks if two vectors are equal within given tolerance.
|
inline |
Convenience function for getting normalized vector.
|
inline |
Convenience function for calculating dot product.
|
inline |
Convenience function for calculating cross product.
|
inline |
Convenience function for calculating angle (in radians) between two vectors.
|
inline |
Returns the distance between the ends of two vectors.
|
inline |
Clamps the vector vec to range between min and max.
const float Math::TOLERANCE = 1e-6f |
Tolerance level – minimum accepted float value.
const float Math::VERY_SMALL_NUM = 1e-6f |
Very small number (used in testing/returning some values)
const float Math::VERY_BIG_NUM = 1e6f |
Very big number (used in testing/returning some values)
const float Math::HUGE_NUM = 1.0e+38f |
Huge number.
const float Math::PI = 3.14159265358979323846f |
PI.
const float Math::DEG_TO_RAD = 0.01745329251994329547f |
Degrees to radians multiplier.
const float Math::RAD_TO_DEG = 57.29577951308232286465f |
Radians to degrees multiplier.
const float Math::LOG_2 = log(2.0f) |
Natural logarithm of 2.