![]() |
Public API Reference |
![]() |
Various assorted 3D mathematical functions. More...
#include <csgeom/math3d.h>
Static Public Member Functions | |
static void | Between (const csVector3 &v1, const csVector3 &v2, csVector3 &v, float pct, float wid) |
Calculates a vector lying a specified distance between two other vectors. | |
static void | CalcNormal (csVector3 &norm, const csVector3 &v1, const csVector3 &v2, const csVector3 &v3) |
Calculate a plane normal given three vectors. | |
static void | CalcNormal (csVector3 &norm, const csVector3 &v, const csVector3 &u) |
Compute the normal given two (u,v) vectors. | |
static void | CalcPlane (const csVector3 &v1, const csVector3 &v2, const csVector3 &v3, csVector3 &normal, float &D) |
Calculate the plane equation given three vectors. | |
static float | Direction3 (const csVector3 &a, const csVector3 &b, const csVector3 &c) |
Returns < 0 or > 0 depending on the direction of the triangle. | |
static float | DoubleArea3 (const csVector3 &a, const csVector3 &b, const csVector3 &c) |
Compute twice the area of triangle composed by three points. | |
static int | FindObserverSides (const csBox3 &box1, const csBox3 &box2, int *sides) |
Find all observer sides on the first box that can see the other box. | |
static int | OuterPlanes (const csBox3 &box1, const csBox3 &box2, csPlane3 *planes) |
Calculate the set of outer planes between the two boxes. | |
static bool | PlanesClose (const csPlane3 &p1, const csPlane3 &p2) |
Check if two planes are close together. | |
static bool | PlanesEqual (const csPlane3 &p1, const csPlane3 &p2) |
Check if two planes are almost equal. | |
static void | SetMinMax (const csVector3 &v, csVector3 &min, csVector3 &max) |
Set the min and max vector if this vector exceeds their current limits. | |
static void | SpherePosition (float angle_xz, float angle_vert, csVector3 &pos) |
Given two angles in radians, calculate the position on the sphere around (0,0,0) with radius 1. | |
static bool | Visible (const csVector3 &p, const csVector3 &t1, const csVector3 &t2, const csVector3 &t3) |
Tests if the front face of a triangle is visible from the given point. | |
static bool | Visible (const csVector3 &p, const csPlane3 &pl) |
Check if the plane is visible from the given point. | |
static int | WhichSide3D (const csVector3 &p, const csVector3 &v1, const csVector3 &v2) |
Tests which side of a plane the given 3D point is on. |
Various assorted 3D mathematical functions.
This is a static class and contains only static member functions.
static void csMath3::Between | ( | const csVector3 & | v1, |
const csVector3 & | v2, | ||
csVector3 & | v, | ||
float | pct, | ||
float | wid | ||
) | [static] |
Calculates a vector lying a specified distance between two other vectors.
Given vectors v1 and v2, this function will calculate and return vector v lying between them. If pct != -1, vector v will be the point which is pct % of the way from v1 to v2. Otherwise, if pct equals -1, v will be the point along 'v1-v2' which is distance wid from v1.
static void csMath3::CalcNormal | ( | csVector3 & | norm, |
const csVector3 & | v1, | ||
const csVector3 & | v2, | ||
const csVector3 & | v3 | ||
) | [inline, static] |
static void csMath3::CalcNormal | ( | csVector3 & | norm, |
const csVector3 & | v, | ||
const csVector3 & | u | ||
) | [inline, static] |
static void csMath3::CalcPlane | ( | const csVector3 & | v1, |
const csVector3 & | v2, | ||
const csVector3 & | v3, | ||
csVector3 & | normal, | ||
float & | D | ||
) | [inline, static] |
static float csMath3::Direction3 | ( | const csVector3 & | a, |
const csVector3 & | b, | ||
const csVector3 & | c | ||
) | [inline, static] |
static float csMath3::DoubleArea3 | ( | const csVector3 & | a, |
const csVector3 & | b, | ||
const csVector3 & | c | ||
) | [inline, static] |
static int csMath3::FindObserverSides | ( | const csBox3 & | box1, |
const csBox3 & | box2, | ||
int * | sides | ||
) | [static] |
Find all observer sides on the first box that can see the other box.
Sides are numbered like this: 0=MinX(), 1=MaxX(), 2=MinY(), 3=MaxY(), 4=MinZ(), 5=MaxZ(). The given array should have place for 6 sides. This function returns the number of observer sides.
static int csMath3::OuterPlanes | ( | const csBox3 & | box1, |
const csBox3 & | box2, | ||
csPlane3 * | planes | ||
) | [static] |
Calculate the set of outer planes between the two boxes.
Is something does not intersect this set of planes then it will not be between the two boxes. The given array of planes should have place for at least eight planes. This function returns the number of planes that are put in 'planes'.
static bool csMath3::PlanesClose | ( | const csPlane3 & | p1, |
const csPlane3 & | p2 | ||
) | [static] |
Check if two planes are close together.
Two planes are close if there are almost equal OR if the normalized versions are almost equal.
static bool csMath3::PlanesEqual | ( | const csPlane3 & | p1, |
const csPlane3 & | p2 | ||
) | [inline, static] |
static void csMath3::SetMinMax | ( | const csVector3 & | v, |
csVector3 & | min, | ||
csVector3 & | max | ||
) | [inline, static] |
static void csMath3::SpherePosition | ( | float | angle_xz, |
float | angle_vert, | ||
csVector3 & | pos | ||
) | [static] |
Given two angles in radians, calculate the position on the sphere around (0,0,0) with radius 1.
The first angle is the angle along the horizontal (x/z) plane. The second angle is the vertical angle.
static bool csMath3::Visible | ( | const csVector3 & | p, |
const csVector3 & | t1, | ||
const csVector3 & | t2, | ||
const csVector3 & | t3 | ||
) | [static] |
Tests if the front face of a triangle is visible from the given point.
Visibility test (backface culling) to see if the triangle formed by t1, t2, and t3 is visible from point p.
static bool csMath3::Visible | ( | const csVector3 & | p, |
const csPlane3 & | pl | ||
) | [inline, static] |
static int csMath3::WhichSide3D | ( | const csVector3 & | p, |
const csVector3 & | v1, | ||
const csVector3 & | v2 | ||
) | [inline, static] |
Tests which side of a plane the given 3D point is on.
Warning: the result of this function when 'p' is exactly on the plane 0-v1-v2 is undefined. It should return 0 but it will not often do that due to numerical inaccuracies. So you should probably test for this case separately.