Main Page | Modules | Namespace List | Class Hierarchy | Class List | Directories | Namespace Members | Class Members | Related Pages

Curve3 Class Reference
[XEngineMath Library]

Inheritance diagram for Curve3:

Inheritance graph
[legend]
List of all members.

Detailed Description

This class is the abstract base class for all 3-dimensional space curves. It defines functions that are only applicable to 3-dimensional curves. This includes the parameters that also apply to planar curves plus some more parameters that only apply to space curves. In particular, a space curve has two more important parameters at every curve point compared to planar curves: torsion and a binormal vector. The interface defined by this abstract base class gives access to these parameters.


Public Member Functions

Vector3 GetBinormal (real time) const
 Returns the normalized binormal vector at the given time.
Vector3 GetNormal (real time) const
 Returns the normalized normal vector at the given time.
real GetCurvature (real time) const
 Returns the curvature of the curve at the given time.
real GetTorsion (real time) const
 Returns the torsion of the curve at the given time.
Matrix4x4 GetFrame (real time) const
 Returns the curve's Frenet-Serret coordinate frame (as 4x4 TNBP row-major matrix) at the given time.
void GetFrame (real time, Vector3 &position, Vector3 &tangent, Vector3 &normal, Vector3 &binormal) const
 Returns the curve's Frenet-Serret coordinate frame at the given time in the given vectors.
Matrix4x4 GetFrame (real time, const Vector3 &upVector) const
 Returns the curve's coordinate frame (as 4x4 TNBP row-major matrix) respecting the given up vector at the given time.
void GetFrame (real time, const Vector3 &upVector, Vector3 &position, Vector3 &tangent, Vector3 &normal, Vector3 &binormal) const
 Returns the curve's coordinate frame respecting the given up vector at the given time in the given vectors.


Member Function Documentation

Vector3 GetBinormal real  time  )  const
 

Returns the binormal vector at the given time.

real GetCurvature real  time  )  const
 

Returns the curvature of the curve at the given time. If the curvature is indeterminate (which happens when the speed of the curve at the given time is 0) std::numeric_limits<real>::quiet_NaN() is returned.

Curvature is computed by this function as follows:

	Let X(t) be the curve and X'(t) and X''(t) denote the first and
	second derivatives of X(t), respectively, then curvature is defined as:
	    k(t) = |X'(t) x X''(t)| / |X'(t)|^3
	where x denotes the cross product.
	

Note that the curvature returned by this function will always be a positive value.

void GetFrame real  time,
const Vector3 upVector,
Vector3 position,
Vector3 tangent,
Vector3 normal,
Vector3 binormal
const
 

Returns the curve's coordinate frame respecting the given up vector at the given time in the given vectors. The given up vector must not be the zero vector and it need not necessarily be of unit length.

Unlike the Frenet-Serret frame returned by the Curve3::GetFrame member functions that do not take an up vector as argument, this function returns a frame oriented using the given up vector. This means that the returned coordinate frame will not flip at the control points like the Frenet-Serret frame might do. However, it imposes the restriction that the curve must never be colinear to the given up vector, i.e. the tangent vector of the curve should never point in the same direction as the up vector.

Matrix4x4 GetFrame real  time,
const Vector3 upVector
const
 

Returns the curve's coordinate frame (as 4x4 TNBP row-major matrix) respecting the given up vector at the given time. The given up vector must not be the zero vector and it need not necessarily be of unit length.

Unlike the Frenet-Serret frame returned by the Curve3::GetFrame member functions that do not take an up vector as argument, this function returns a frame oriented using the given up vector. This means that the returned coordinate frame will not flip at the control points like the Frenet-Serret frame might do. However, it imposes the restriction that the curve must never be colinear to the given up vector, i.e. the tangent vector of the curve should never point in the same direction as the up vector.

void GetFrame real  time,
Vector3 position,
Vector3 tangent,
Vector3 normal,
Vector3 binormal
const
 

Returns the curve's coordinate frame at the given time in the given vectors. The TNB vectors are the curve's Frenet-Serret frame for the givne time.

Matrix4x4 GetFrame real  time  )  const
 

Returns the curve's coordinate frame at the given time. The returned matrix is a row-major TNBP matrix that contains the tangent vector in the first row, the normal vector in the second row, the binormal vector in the third row, and the position in the fourth row. The TNB vectors are the curve's Frenet-Serret frame for the given time.

Vector3 GetNormal real  time  )  const
 

Returns the normalized normal vector at the given time.

real GetTorsion real  time  )  const
 

Returns the torsion of the curve at the given time. If the torsion is indeterminate std::numeric_limits<real>::quiet_NaN() is returned.

Torsion is computed by this function as follows:

	Let X(t) be the curve and X'(t), X''(t), and X'''(t) denote the first,
	second, and third derivatives of X(t), respectively, then torsion is 
	defined as:
	          (X'(t) x X''(t)) *  X'''(t)
	   t(t) = ---------------------------
	               |X'(t) x X''(t)|^2
	where x denotes the cross product and * denotes the dot product.
	


The documentation for this class was generated from the following files: