VTK
9.1.0
|
performs common math operations More...
#include <vtkMath.h>
Public Types | |
typedef vtkObject | Superclass |
Public Member Functions | |
virtual vtkTypeBool | IsA (const char *type) |
Return 1 if this class is the same type of (or a subclass of) the named class. | |
vtkMath * | NewInstance () const |
void | PrintSelf (ostream &os, vtkIndent indent) override |
Methods invoked by print to print information about the object including superclasses. | |
template<class T1 , class T2 > | |
void | TensorFromSymmetricTensor (const T1 symmTensor[9], T2 tensor[9]) |
Public Member Functions inherited from vtkObject | |
vtkBaseTypeMacro (vtkObject, vtkObjectBase) | |
virtual void | DebugOn () |
Turn debugging output on. | |
virtual void | DebugOff () |
Turn debugging output off. | |
bool | GetDebug () |
Get the value of the debug flag. | |
void | SetDebug (bool debugFlag) |
Set the value of the debug flag. | |
virtual void | Modified () |
Update the modification time for this object. | |
virtual vtkMTimeType | GetMTime () |
Return this object's modified time. | |
void | PrintSelf (ostream &os, vtkIndent indent) override |
Methods invoked by print to print information about the object including superclasses. | |
void | RemoveObserver (unsigned long tag) |
void | RemoveObservers (unsigned long event) |
void | RemoveObservers (const char *event) |
void | RemoveAllObservers () |
vtkTypeBool | HasObserver (unsigned long event) |
vtkTypeBool | HasObserver (const char *event) |
int | InvokeEvent (unsigned long event) |
int | InvokeEvent (const char *event) |
unsigned long | AddObserver (unsigned long event, vtkCommand *, float priority=0.0f) |
Allow people to add/remove/invoke observers (callbacks) to any VTK object. | |
unsigned long | AddObserver (const char *event, vtkCommand *, float priority=0.0f) |
Allow people to add/remove/invoke observers (callbacks) to any VTK object. | |
vtkCommand * | GetCommand (unsigned long tag) |
Allow people to add/remove/invoke observers (callbacks) to any VTK object. | |
void | RemoveObserver (vtkCommand *) |
Allow people to add/remove/invoke observers (callbacks) to any VTK object. | |
void | RemoveObservers (unsigned long event, vtkCommand *) |
Allow people to add/remove/invoke observers (callbacks) to any VTK object. | |
void | RemoveObservers (const char *event, vtkCommand *) |
Allow people to add/remove/invoke observers (callbacks) to any VTK object. | |
vtkTypeBool | HasObserver (unsigned long event, vtkCommand *) |
Allow people to add/remove/invoke observers (callbacks) to any VTK object. | |
vtkTypeBool | HasObserver (const char *event, vtkCommand *) |
Allow people to add/remove/invoke observers (callbacks) to any VTK object. | |
template<class U , class T > | |
unsigned long | AddObserver (unsigned long event, U observer, void(T::*callback)(), float priority=0.0f) |
Overloads to AddObserver that allow developers to add class member functions as callbacks for events. | |
template<class U , class T > | |
unsigned long | AddObserver (unsigned long event, U observer, void(T::*callback)(vtkObject *, unsigned long, void *), float priority=0.0f) |
Overloads to AddObserver that allow developers to add class member functions as callbacks for events. | |
template<class U , class T > | |
unsigned long | AddObserver (unsigned long event, U observer, bool(T::*callback)(vtkObject *, unsigned long, void *), float priority=0.0f) |
Allow user to set the AbortFlagOn() with the return value of the callback method. | |
int | InvokeEvent (unsigned long event, void *callData) |
This method invokes an event and return whether the event was aborted or not. | |
int | InvokeEvent (const char *event, void *callData) |
This method invokes an event and return whether the event was aborted or not. | |
Public Member Functions inherited from vtkObjectBase | |
const char * | GetClassName () const |
Return the class name as a string. | |
virtual vtkTypeBool | IsA (const char *name) |
Return 1 if this class is the same type of (or a subclass of) the named class. | |
virtual vtkIdType | GetNumberOfGenerationsFromBase (const char *name) |
Given the name of a base class of this class type, return the distance of inheritance between this class type and the named class (how many generations of inheritance are there between this class and the named class). | |
virtual void | Delete () |
Delete a VTK object. | |
virtual void | FastDelete () |
Delete a reference to this object. | |
void | InitializeObjectBase () |
void | Print (ostream &os) |
Print an object to an ostream. | |
virtual void | Register (vtkObjectBase *o) |
Increase the reference count (mark as used by another object). | |
virtual void | UnRegister (vtkObjectBase *o) |
Decrease the reference count (release by another object). | |
int | GetReferenceCount () |
Return the current reference count of this object. | |
void | SetReferenceCount (int) |
Sets the reference count. | |
bool | GetIsInMemkind () const |
A local state flag that remembers whether this object lives in the normal or extended memory space. | |
virtual void | PrintHeader (ostream &os, vtkIndent indent) |
Methods invoked by print to print information about the object including superclasses. | |
virtual void | PrintTrailer (ostream &os, vtkIndent indent) |
Methods invoked by print to print information about the object including superclasses. | |
Static Public Member Functions | |
static vtkMath * | New () |
static vtkTypeBool | IsTypeOf (const char *type) |
static vtkMath * | SafeDownCast (vtkObjectBase *o) |
static constexpr double | Pi () |
A mathematical constant. | |
static int | Round (float f) |
Rounds a float to the nearest integer. | |
static int | Round (double f) |
template<typename OutT > | |
static void | RoundDoubleToIntegralIfNecessary (double val, OutT *ret) |
Round a double to type OutT if OutT is integral, otherwise simply clamp the value to the output range. | |
static int | Floor (double x) |
Rounds a double to the nearest integer not greater than itself. | |
static int | Ceil (double x) |
Rounds a double to the nearest integer not less than itself. | |
static int | CeilLog2 (vtkTypeUInt64 x) |
Gives the exponent of the lowest power of two not less than x. | |
template<class T > | |
static T | Min (const T &a, const T &b) |
Returns the minimum of the two arguments provided. | |
template<class T > | |
static T | Max (const T &a, const T &b) |
Returns the maximum of the two arguments provided. | |
static bool | IsPowerOfTwo (vtkTypeUInt64 x) |
Returns true if integer is a power of two. | |
static int | NearestPowerOfTwo (int x) |
Compute the nearest power of two that is not less than x. | |
static vtkTypeInt64 | Factorial (int N) |
Compute N factorial, N! = N*(N-1) * (N-2)...*3*2*1. | |
static vtkTypeInt64 | Binomial (int m, int n) |
The number of combinations of n objects from a pool of m objects (m>n). | |
static int * | BeginCombination (int m, int n) |
Start iterating over "m choose n" objects. | |
static int | NextCombination (int m, int n, int *combination) |
Given m, n, and a valid combination of n integers in the range [0,m[, this function alters the integers into the next combination in a sequence of all combinations of n items from a pool of m. | |
static void | FreeCombination (int *combination) |
Free the "iterator" array created by vtkMath::BeginCombination. | |
static void | RandomSeed (int s) |
Initialize seed value. | |
static int | GetSeed () |
Return the current seed used by the random number generator. | |
static double | Random () |
Generate pseudo-random numbers distributed according to the uniform distribution between 0.0 and 1.0. | |
static double | Random (double min, double max) |
Generate pseudo-random numbers distributed according to the uniform distribution between min and max. | |
static double | Gaussian () |
Generate pseudo-random numbers distributed according to the standard normal distribution. | |
static double | Gaussian (double mean, double std) |
Generate pseudo-random numbers distributed according to the Gaussian distribution with mean mean and standard deviation std. | |
template<class VectorT1 , class VectorT2 > | |
static void | Assign (const VectorT1 &a, VectorT2 &&b) |
Assign values to a 3-vector (templated version). | |
static void | Assign (const double a[3], double b[3]) |
Assign values to a 3-vector (double version). | |
static void | Add (const float a[3], const float b[3], float c[3]) |
Addition of two 3-vectors (float version). | |
static void | Add (const double a[3], const double b[3], double c[3]) |
Addition of two 3-vectors (double version). | |
static void | Subtract (const float a[3], const float b[3], float c[3]) |
Subtraction of two 3-vectors (float version). | |
static void | Subtract (const double a[3], const double b[3], double c[3]) |
Subtraction of two 3-vectors (double version). | |
template<class VectorT1 , class VectorT2 , class VectorT3 > | |
static void | Subtract (const VectorT1 &a, const VectorT2 &b, VectorT3 &&c) |
Subtraction of two 3-vectors (templated version). | |
static void | MultiplyScalar (float a[3], float s) |
Multiplies a 3-vector by a scalar (float version). | |
static void | MultiplyScalar2D (float a[2], float s) |
Multiplies a 2-vector by a scalar (float version). | |
static void | MultiplyScalar (double a[3], double s) |
Multiplies a 3-vector by a scalar (double version). | |
static void | MultiplyScalar2D (double a[2], double s) |
Multiplies a 2-vector by a scalar (double version). | |
static float | Dot (const float a[3], const float b[3]) |
Dot product of two 3-vectors (float version). | |
static double | Dot (const double a[3], const double b[3]) |
Dot product of two 3-vectors (double version). | |
template<typename ReturnTypeT = double, typename TupleRangeT1 , typename TupleRangeT2 , typename EnableT = typename std::conditional<!std::is_pointer<TupleRangeT1>::value && !std::is_array<TupleRangeT1>::value, TupleRangeT1, TupleRangeT2>::type::value_type> | |
static ReturnTypeT | Dot (const TupleRangeT1 &a, const TupleRangeT2 &b) |
Compute dot product between two points p1 and p2. | |
static void | Outer (const float a[3], const float b[3], float c[3][3]) |
Outer product of two 3-vectors (float version). | |
static void | Outer (const double a[3], const double b[3], double c[3][3]) |
Outer product of two 3-vectors (double version). | |
static void | Cross (const float a[3], const float b[3], float c[3]) |
Cross product of two 3-vectors. | |
static void | Cross (const double a[3], const double b[3], double c[3]) |
Cross product of two 3-vectors. | |
static float | Norm (const float v[3]) |
Compute the norm of 3-vector (float version). | |
static double | Norm (const double v[3]) |
Compute the norm of 3-vector (double version). | |
template<typename ReturnTypeT = double, typename TupleRangeT > | |
static ReturnTypeT | SquaredNorm (const TupleRangeT &v) |
Compute the squared norm of a 3-vector. | |
static float | Normalize (float v[3]) |
Normalize (in place) a 3-vector. | |
static double | Normalize (double v[3]) |
Normalize (in place) a 3-vector. | |
template<typename ReturnTypeT = double, typename TupleRangeT1 , typename TupleRangeT2 , typename EnableT = typename std::conditional<!std::is_pointer<TupleRangeT1>::value && !std::is_array<TupleRangeT1>::value, TupleRangeT1, TupleRangeT2>::type::value_type> | |
static ReturnTypeT | Distance2BetweenPoints (const TupleRangeT1 &p1, const TupleRangeT2 &p2) |
Compute distance squared between two points p1 and p2. | |
static float | Distance2BetweenPoints (const float p1[3], const float p2[3]) |
Compute distance squared between two points p1 and p2. | |
static double | Distance2BetweenPoints (const double p1[3], const double p2[3]) |
Compute distance squared between two points p1 and p2. | |
static double | AngleBetweenVectors (const double v1[3], const double v2[3]) |
Compute angle in radians between two vectors. | |
static double | SignedAngleBetweenVectors (const double v1[3], const double v2[3], const double vn[3]) |
Compute signed angle in radians between two vectors with regard to a third orthogonal vector. | |
static double | GaussianAmplitude (const double variance, const double distanceFromMean) |
Compute the amplitude of a Gaussian function with mean=0 and specified variance. | |
static double | GaussianAmplitude (const double mean, const double variance, const double position) |
Compute the amplitude of a Gaussian function with specified mean and variance. | |
static double | GaussianWeight (const double variance, const double distanceFromMean) |
Compute the amplitude of an unnormalized Gaussian function with mean=0 and specified variance. | |
static double | GaussianWeight (const double mean, const double variance, const double position) |
Compute the amplitude of an unnormalized Gaussian function with specified mean and variance. | |
static float | Dot2D (const float x[2], const float y[2]) |
Dot product of two 2-vectors. | |
static double | Dot2D (const double x[2], const double y[2]) |
Dot product of two 2-vectors. | |
static void | Outer2D (const float x[2], const float y[2], float A[2][2]) |
Outer product of two 2-vectors (float version). | |
static void | Outer2D (const double x[2], const double y[2], double A[2][2]) |
Outer product of two 2-vectors (double version). | |
static float | Norm2D (const float x[2]) |
Compute the norm of a 2-vector. | |
static double | Norm2D (const double x[2]) |
Compute the norm of a 2-vector. | |
static float | Normalize2D (float v[2]) |
Normalize (in place) a 2-vector. | |
static double | Normalize2D (double v[2]) |
Normalize (in place) a 2-vector. | |
static float | Determinant2x2 (const float c1[2], const float c2[2]) |
Compute determinant of 2x2 matrix. | |
template<int RowsT, int MidDimT, int ColsT, class LayoutT1 = vtkMatrixUtilities::Layout::Identity, class LayoutT2 = vtkMatrixUtilities::Layout::Identity, class MatrixT1 , class MatrixT2 , class MatrixT3 > | |
static void | MultiplyMatrix (const MatrixT1 &M1, const MatrixT2 &M2, MatrixT3 &&M3) |
Multiply matrices such that M3 = M1 x M2. | |
template<int RowsT, int ColsT, class LayoutT = vtkMatrixUtilities::Layout::Identity, class MatrixT , class VectorT1 , class VectorT2 > | |
static void | MultiplyMatrixWithVector (const MatrixT &M, const VectorT1 &X, VectorT2 &&Y) |
Multiply matrix M with vector Y such that Y = M x X. | |
template<class ScalarT , int SizeT, class VectorT1 , class VectorT2 > | |
static ScalarT | Dot (const VectorT1 &x, const VectorT2 &y) |
Computes the dot product between 2 vectors x and y. | |
template<int SizeT, class LayoutT = vtkMatrixUtilities::Layout::Identity, class MatrixT > | |
static vtkMatrixUtilities::ScalarTypeExtractor< MatrixT >::value_type | Determinant (const MatrixT &M) |
Computes the determinant of input square SizeT x SizeT matrix M. | |
template<int SizeT, class LayoutT = vtkMatrixUtilities::Layout::Identity, class MatrixT1 , class MatrixT2 > | |
static void | InvertMatrix (const MatrixT1 &M1, MatrixT2 &&M2) |
Computes the inverse of input matrix M1 into M2. | |
template<int RowsT, int ColsT, class LayoutT = vtkMatrixUtilities::Layout::Identity, class MatrixT , class VectorT1 , class VectorT2 > | |
static void | LinearSolve (const MatrixT &M, const VectorT1 &x, VectorT2 &y) |
This method solves linear systems M * x = y. | |
template<class ScalarT , int SizeT, class LayoutT = vtkMatrixUtilities::Layout::Identity, class VectorT1 , class MatrixT , class VectorT2 > | |
static ScalarT | Dot (const VectorT1 &x, const MatrixT &M, const VectorT2 &y) |
Computes the dot product x^T M y, where x and y are vectors and M is a metric matrix. | |
static void | MultiplyMatrix (const double *const *A, const double *const *B, unsigned int rowA, unsigned int colA, unsigned int rowB, unsigned int colB, double **C) |
General matrix multiplication. | |
static float | Determinant3x3 (const float c1[3], const float c2[3], const float c3[3]) |
Compute determinant of 3x3 matrix. | |
static double | Determinant3x3 (const double c1[3], const double c2[3], const double c3[3]) |
Compute determinant of 3x3 matrix. | |
static double | Determinant3x3 (double a1, double a2, double a3, double b1, double b2, double b3, double c1, double c2, double c3) |
Calculate the determinant of a 3x3 matrix in the form: | a1, b1, c1 | | a2, b2, c2 | | a3, b3, c3 |. | |
static vtkTypeBool | SolveLinearSystemGEPP2x2 (double a00, double a01, double a10, double a11, double b0, double b1, double &x0, double &x1) |
Solve linear equation Ax = b using Gaussian Elimination with Partial Pivoting for a 2x2 system. | |
static vtkTypeBool | SolveLinearSystem (double **A, double *x, int size) |
Solve linear equations Ax = b using Crout's method. | |
static vtkTypeBool | InvertMatrix (double **A, double **AI, int size) |
Invert input square matrix A into matrix AI. | |
static vtkTypeBool | InvertMatrix (double **A, double **AI, int size, int *tmp1Size, double *tmp2Size) |
Thread safe version of InvertMatrix method. | |
static vtkTypeBool | LUFactorLinearSystem (double **A, int *index, int size) |
Factor linear equations Ax = b using LU decomposition into the form A = LU where L is a unit lower triangular matrix and U is upper triangular matrix. | |
static vtkTypeBool | LUFactorLinearSystem (double **A, int *index, int size, double *tmpSize) |
Thread safe version of LUFactorLinearSystem method. | |
static void | LUSolveLinearSystem (double **A, int *index, double *x, int size) |
Solve linear equations Ax = b using LU decomposition A = LU where L is lower triangular matrix and U is upper triangular matrix. | |
static double | EstimateMatrixCondition (const double *const *A, int size) |
Estimate the condition number of a LU factored matrix. | |
static vtkTypeBool | SolveHomogeneousLeastSquares (int numberOfSamples, double **xt, int xOrder, double **mt) |
Solves for the least squares best fit matrix for the homogeneous equation X'M' = 0'. | |
static vtkTypeBool | SolveLeastSquares (int numberOfSamples, double **xt, int xOrder, double **yt, int yOrder, double **mt, int checkHomogeneous=1) |
Solves for the least squares best fit matrix for the equation X'M' = Y'. | |
template<class T > | |
static T | ClampValue (const T &value, const T &min, const T &max) |
Clamp some value against a range, return the result. | |
static double | ClampAndNormalizeValue (double value, const double range[2]) |
Clamp a value against a range and then normalize it between 0 and 1. | |
template<class T1 , class T2 > | |
static void | TensorFromSymmetricTensor (const T1 symmTensor[6], T2 tensor[9]) |
Convert a 6-Component symmetric tensor into a 9-Component tensor, no allocation performed. | |
template<class T > | |
static void | TensorFromSymmetricTensor (T tensor[9]) |
Convert a 6-Component symmetric tensor into a 9-Component tensor, overwriting the tensor input. | |
static int | GetScalarTypeFittingRange (double range_min, double range_max, double scale=1.0, double shift=0.0) |
Return the scalar type that is most likely to have enough precision to store a given range of data once it has been scaled and shifted (i.e. | |
static vtkTypeBool | GetAdjustedScalarRange (vtkDataArray *array, int comp, double range[2]) |
Get a vtkDataArray's scalar range for a given component. | |
static vtkTypeBool | ExtentIsWithinOtherExtent (const int extent1[6], const int extent2[6]) |
Return true if first 3D extent is within second 3D extent Extent is x-min, x-max, y-min, y-max, z-min, z-max. | |
static vtkTypeBool | BoundsIsWithinOtherBounds (const double bounds1[6], const double bounds2[6], const double delta[3]) |
Return true if first 3D bounds is within the second 3D bounds Bounds is x-min, x-max, y-min, y-max, z-min, z-max Delta is the error margin along each axis (usually a small number) | |
static vtkTypeBool | PointIsWithinBounds (const double point[3], const double bounds[6], const double delta[3]) |
Return true if point is within the given 3D bounds Bounds is x-min, x-max, y-min, y-max, z-min, z-max Delta is the error margin along each axis (usually a small number) | |
static int | PlaneIntersectsAABB (const double bounds[6], const double normal[3], const double point[3]) |
Implements Plane / Axis-Aligned Bounding-Box intersection as described in Graphics Gems IV, Ned Greene; pp. | |
static double | Solve3PointCircle (const double p1[3], const double p2[3], const double p3[3], double center[3]) |
In Euclidean space, there is a unique circle passing through any given three non-collinear points P1, P2, and P3. | |
static double | Inf () |
Special IEEE-754 number used to represent positive infinity. | |
static double | NegInf () |
Special IEEE-754 number used to represent negative infinity. | |
static double | Nan () |
Special IEEE-754 number used to represent Not-A-Number (Nan). | |
static vtkTypeBool | IsInf (double x) |
Test if a number is equal to the special floating point value infinity. | |
static vtkTypeBool | IsNan (double x) |
Test if a number is equal to the special floating point value Not-A-Number (Nan). | |
static bool | IsFinite (double x) |
Test if a number has finite value i.e. | |
static int | QuadraticRoot (double a, double b, double c, double min, double max, double *u) |
find roots of ax^2+bx+c=0 in the interval min,max. | |
static float | RadiansFromDegrees (float degrees) |
Convert degrees into radians. | |
static double | RadiansFromDegrees (double degrees) |
Convert degrees into radians. | |
static float | DegreesFromRadians (float radians) |
Convert radians into degrees. | |
static double | DegreesFromRadians (double radians) |
Convert radians into degrees. | |
static float | Norm (const float *x, int n) |
Compute the norm of n-vector. | |
static double | Norm (const double *x, int n) |
Compute the norm of n-vector. | |
static void | Perpendiculars (const double v1[3], double v2[3], double v3[3], double theta) |
Given a unit vector v1, find two unit vectors v2 and v3 such that v1 cross v2 = v3 (i.e. | |
static void | Perpendiculars (const float v1[3], float v2[3], float v3[3], double theta) |
Given a unit vector v1, find two unit vectors v2 and v3 such that v1 cross v2 = v3 (i.e. | |
static bool | ProjectVector (const float a[3], const float b[3], float projection[3]) |
Compute the projection of vector a on vector b and return it in projection[3]. | |
static bool | ProjectVector (const double a[3], const double b[3], double projection[3]) |
Compute the projection of vector a on vector b and return it in projection[3]. | |
static bool | ProjectVector2D (const float a[2], const float b[2], float projection[2]) |
Compute the projection of 2D vector a on 2D vector b and returns the result in projection[2]. | |
static bool | ProjectVector2D (const double a[2], const double b[2], double projection[2]) |
Compute the projection of 2D vector a on 2D vector b and returns the result in projection[2]. | |
static double | Determinant2x2 (double a, double b, double c, double d) |
Calculate the determinant of a 2x2 matrix: | a b | | c d |. | |
static double | Determinant2x2 (const double c1[2], const double c2[2]) |
Calculate the determinant of a 2x2 matrix: | a b | | c d |. | |
static void | LUFactor3x3 (float A[3][3], int index[3]) |
LU Factorization of a 3x3 matrix. | |
static void | LUFactor3x3 (double A[3][3], int index[3]) |
LU Factorization of a 3x3 matrix. | |
static void | LUSolve3x3 (const float A[3][3], const int index[3], float x[3]) |
LU back substitution for a 3x3 matrix. | |
static void | LUSolve3x3 (const double A[3][3], const int index[3], double x[3]) |
LU back substitution for a 3x3 matrix. | |
static void | LinearSolve3x3 (const float A[3][3], const float x[3], float y[3]) |
Solve Ay = x for y and place the result in y. | |
static void | LinearSolve3x3 (const double A[3][3], const double x[3], double y[3]) |
Solve Ay = x for y and place the result in y. | |
static void | Multiply3x3 (const float A[3][3], const float v[3], float u[3]) |
Multiply a vector by a 3x3 matrix. | |
static void | Multiply3x3 (const double A[3][3], const double v[3], double u[3]) |
Multiply a vector by a 3x3 matrix. | |
static void | Multiply3x3 (const float A[3][3], const float B[3][3], float C[3][3]) |
Multiply one 3x3 matrix by another according to C = AB. | |
static void | Multiply3x3 (const double A[3][3], const double B[3][3], double C[3][3]) |
Multiply one 3x3 matrix by another according to C = AB. | |
static void | Transpose3x3 (const float A[3][3], float AT[3][3]) |
Transpose a 3x3 matrix. | |
static void | Transpose3x3 (const double A[3][3], double AT[3][3]) |
Transpose a 3x3 matrix. | |
static void | Invert3x3 (const float A[3][3], float AI[3][3]) |
Invert a 3x3 matrix. | |
static void | Invert3x3 (const double A[3][3], double AI[3][3]) |
Invert a 3x3 matrix. | |
static void | Identity3x3 (float A[3][3]) |
Set A to the identity matrix. | |
static void | Identity3x3 (double A[3][3]) |
Set A to the identity matrix. | |
static double | Determinant3x3 (const float A[3][3]) |
Return the determinant of a 3x3 matrix. | |
static double | Determinant3x3 (const double A[3][3]) |
Return the determinant of a 3x3 matrix. | |
static void | QuaternionToMatrix3x3 (const float quat[4], float A[3][3]) |
Convert a quaternion to a 3x3 rotation matrix. | |
static void | QuaternionToMatrix3x3 (const double quat[4], double A[3][3]) |
Convert a quaternion to a 3x3 rotation matrix. | |
template<class QuaternionT , class MatrixT , class EnableT = typename std::enable_if<!vtkMatrixUtilities::MatrixIs2DArray<MatrixT>()>::type> | |
static void | QuaternionToMatrix3x3 (const QuaternionT &q, MatrixT &&A) |
Convert a quaternion to a 3x3 rotation matrix. | |
static void | Matrix3x3ToQuaternion (const float A[3][3], float quat[4]) |
Convert a 3x3 matrix into a quaternion. | |
static void | Matrix3x3ToQuaternion (const double A[3][3], double quat[4]) |
Convert a 3x3 matrix into a quaternion. | |
template<class MatrixT , class QuaternionT , class EnableT = typename std::enable_if<!vtkMatrixUtilities::MatrixIs2DArray<MatrixT>()>::type> | |
static void | Matrix3x3ToQuaternion (const MatrixT &A, QuaternionT &&q) |
Convert a 3x3 matrix into a quaternion. | |
static void | MultiplyQuaternion (const float q1[4], const float q2[4], float q[4]) |
Multiply two quaternions. | |
static void | MultiplyQuaternion (const double q1[4], const double q2[4], double q[4]) |
Multiply two quaternions. | |
static void | RotateVectorByNormalizedQuaternion (const float v[3], const float q[4], float r[3]) |
rotate a vector by a normalized quaternion using // https://en.wikipedia.org/wiki/Rodrigues%27_rotation_formula | |
static void | RotateVectorByNormalizedQuaternion (const double v[3], const double q[4], double r[3]) |
rotate a vector by a normalized quaternion using // https://en.wikipedia.org/wiki/Rodrigues%27_rotation_formula | |
static void | RotateVectorByWXYZ (const float v[3], const float q[4], float r[3]) |
rotate a vector by WXYZ using // https://en.wikipedia.org/wiki/Rodrigues%27_rotation_formula | |
static void | RotateVectorByWXYZ (const double v[3], const double q[4], double r[3]) |
rotate a vector by WXYZ using // https://en.wikipedia.org/wiki/Rodrigues%27_rotation_formula | |
static void | Orthogonalize3x3 (const float A[3][3], float B[3][3]) |
Orthogonalize a 3x3 matrix and put the result in B. | |
static void | Orthogonalize3x3 (const double A[3][3], double B[3][3]) |
Orthogonalize a 3x3 matrix and put the result in B. | |
static void | Diagonalize3x3 (const float A[3][3], float w[3], float V[3][3]) |
Diagonalize a symmetric 3x3 matrix and return the eigenvalues in w and the eigenvectors in the columns of V. | |
static void | Diagonalize3x3 (const double A[3][3], double w[3], double V[3][3]) |
Diagonalize a symmetric 3x3 matrix and return the eigenvalues in w and the eigenvectors in the columns of V. | |
static void | SingularValueDecomposition3x3 (const float A[3][3], float U[3][3], float w[3], float VT[3][3]) |
Perform singular value decomposition on a 3x3 matrix. | |
static void | SingularValueDecomposition3x3 (const double A[3][3], double U[3][3], double w[3], double VT[3][3]) |
Perform singular value decomposition on a 3x3 matrix. | |
static vtkTypeBool | Jacobi (float **a, float *w, float **v) |
Jacobi iteration for the solution of eigenvectors/eigenvalues of a 3x3 real symmetric matrix. | |
static vtkTypeBool | Jacobi (double **a, double *w, double **v) |
Jacobi iteration for the solution of eigenvectors/eigenvalues of a 3x3 real symmetric matrix. | |
static vtkTypeBool | JacobiN (float **a, int n, float *w, float **v) |
JacobiN iteration for the solution of eigenvectors/eigenvalues of a nxn real symmetric matrix. | |
static vtkTypeBool | JacobiN (double **a, int n, double *w, double **v) |
JacobiN iteration for the solution of eigenvectors/eigenvalues of a nxn real symmetric matrix. | |
static void | RGBToHSV (const float rgb[3], float hsv[3]) |
Convert color in RGB format (Red, Green, Blue) to HSV format (Hue, Saturation, Value). | |
static void | RGBToHSV (float r, float g, float b, float *h, float *s, float *v) |
Convert color in RGB format (Red, Green, Blue) to HSV format (Hue, Saturation, Value). | |
static void | RGBToHSV (const double rgb[3], double hsv[3]) |
Convert color in RGB format (Red, Green, Blue) to HSV format (Hue, Saturation, Value). | |
static void | RGBToHSV (double r, double g, double b, double *h, double *s, double *v) |
Convert color in RGB format (Red, Green, Blue) to HSV format (Hue, Saturation, Value). | |
static void | HSVToRGB (const float hsv[3], float rgb[3]) |
Convert color in HSV format (Hue, Saturation, Value) to RGB format (Red, Green, Blue). | |
static void | HSVToRGB (float h, float s, float v, float *r, float *g, float *b) |
Convert color in HSV format (Hue, Saturation, Value) to RGB format (Red, Green, Blue). | |
static void | HSVToRGB (const double hsv[3], double rgb[3]) |
Convert color in HSV format (Hue, Saturation, Value) to RGB format (Red, Green, Blue). | |
static void | HSVToRGB (double h, double s, double v, double *r, double *g, double *b) |
Convert color in HSV format (Hue, Saturation, Value) to RGB format (Red, Green, Blue). | |
static void | LabToXYZ (const double lab[3], double xyz[3]) |
Convert color from the CIE-L*ab system to CIE XYZ. | |
static void | LabToXYZ (double L, double a, double b, double *x, double *y, double *z) |
Convert color from the CIE-L*ab system to CIE XYZ. | |
static void | XYZToLab (const double xyz[3], double lab[3]) |
Convert Color from the CIE XYZ system to CIE-L*ab. | |
static void | XYZToLab (double x, double y, double z, double *L, double *a, double *b) |
Convert Color from the CIE XYZ system to CIE-L*ab. | |
static void | XYZToRGB (const double xyz[3], double rgb[3]) |
Convert color from the CIE XYZ system to RGB. | |
static void | XYZToRGB (double x, double y, double z, double *r, double *g, double *b) |
Convert color from the CIE XYZ system to RGB. | |
static void | RGBToXYZ (const double rgb[3], double xyz[3]) |
Convert color from the RGB system to CIE XYZ. | |
static void | RGBToXYZ (double r, double g, double b, double *x, double *y, double *z) |
Convert color from the RGB system to CIE XYZ. | |
static void | RGBToLab (const double rgb[3], double lab[3]) |
Convert color from the RGB system to CIE-L*ab. | |
static void | RGBToLab (double red, double green, double blue, double *L, double *a, double *b) |
Convert color from the RGB system to CIE-L*ab. | |
static void | LabToRGB (const double lab[3], double rgb[3]) |
Convert color from the CIE-L*ab system to RGB. | |
static void | LabToRGB (double L, double a, double b, double *red, double *green, double *blue) |
Convert color from the CIE-L*ab system to RGB. | |
static void | UninitializeBounds (double bounds[6]) |
Set the bounds to an uninitialized state. | |
static vtkTypeBool | AreBoundsInitialized (const double bounds[6]) |
Are the bounds initialized? | |
static void | ClampValue (double *value, const double range[2]) |
Clamp some values against a range The method without 'clamped_values' will perform in-place clamping. | |
static void | ClampValue (double value, const double range[2], double *clamped_value) |
Clamp some values against a range The method without 'clamped_values' will perform in-place clamping. | |
static void | ClampValues (double *values, int nb_values, const double range[2]) |
Clamp some values against a range The method without 'clamped_values' will perform in-place clamping. | |
static void | ClampValues (const double *values, int nb_values, const double range[2], double *clamped_values) |
Clamp some values against a range The method without 'clamped_values' will perform in-place clamping. | |
Static Public Member Functions inherited from vtkObject | |
static vtkObject * | New () |
Create an object with Debug turned off, modified time initialized to zero, and reference counting on. | |
static void | BreakOnError () |
This method is called when vtkErrorMacro executes. | |
static void | SetGlobalWarningDisplay (int val) |
This is a global flag that controls whether any debug, warning or error messages are displayed. | |
static void | GlobalWarningDisplayOn () |
This is a global flag that controls whether any debug, warning or error messages are displayed. | |
static void | GlobalWarningDisplayOff () |
This is a global flag that controls whether any debug, warning or error messages are displayed. | |
static int | GetGlobalWarningDisplay () |
This is a global flag that controls whether any debug, warning or error messages are displayed. | |
Static Public Member Functions inherited from vtkObjectBase | |
static vtkTypeBool | IsTypeOf (const char *name) |
Return 1 if this class type is the same type of (or a subclass of) the named class. | |
static vtkIdType | GetNumberOfGenerationsFromBaseType (const char *name) |
Given a the name of a base class of this class type, return the distance of inheritance between this class type and the named class (how many generations of inheritance are there between this class and the named class). | |
static vtkObjectBase * | New () |
Create an object with Debug turned off, modified time initialized to zero, and reference counting on. | |
static void | SetMemkindDirectory (const char *directoryname) |
The name of a directory, ideally mounted -o dax, to memory map an extended memory space within. | |
static bool | GetUsingMemkind () |
A global state flag that controls whether vtkObjects are constructed in the usual way (the default) or within the extended memory space. | |
Protected Member Functions | |
virtual vtkObjectBase * | NewInstanceInternal () const |
vtkMath ()=default | |
~vtkMath () override=default | |
Protected Member Functions inherited from vtkObject | |
vtkObject () | |
~vtkObject () override | |
void | RegisterInternal (vtkObjectBase *, vtkTypeBool check) override |
void | UnRegisterInternal (vtkObjectBase *, vtkTypeBool check) override |
void | InternalGrabFocus (vtkCommand *mouseEvents, vtkCommand *keypressEvents=nullptr) |
These methods allow a command to exclusively grab all events. | |
void | InternalReleaseFocus () |
These methods allow a command to exclusively grab all events. | |
Protected Member Functions inherited from vtkObjectBase | |
vtkObjectBase () | |
virtual | ~vtkObjectBase () |
virtual void | RegisterInternal (vtkObjectBase *, vtkTypeBool check) |
virtual void | UnRegisterInternal (vtkObjectBase *, vtkTypeBool check) |
virtual void | ReportReferences (vtkGarbageCollector *) |
vtkObjectBase (const vtkObjectBase &) | |
void | operator= (const vtkObjectBase &) |
Static Protected Attributes | |
static vtkSmartPointer< vtkMathInternal > | Internal |
Additional Inherited Members | |
Static Protected Member Functions inherited from vtkObjectBase | |
static vtkMallocingFunction | GetCurrentMallocFunction () |
static vtkReallocingFunction | GetCurrentReallocFunction () |
static vtkFreeingFunction | GetCurrentFreeFunction () |
static vtkFreeingFunction | GetAlternateFreeFunction () |
Protected Attributes inherited from vtkObject | |
bool | Debug |
vtkTimeStamp | MTime |
vtkSubjectHelper * | SubjectHelper |
Protected Attributes inherited from vtkObjectBase | |
std::atomic< int32_t > | ReferenceCount |
vtkWeakPointerBase ** | WeakPointers |
performs common math operations
vtkMath provides methods to perform common math operations. These include providing constants such as Pi; conversion from degrees to radians; vector operations such as dot and cross products and vector norm; matrix determinant for 2x2 and 3x3 matrices; univariate polynomial solvers; and for random number generation (for backward compatibility only).
typedef vtkObject vtkMath::Superclass |
|
protecteddefault |
|
overrideprotecteddefault |
|
static |
|
static |
|
virtual |
Return 1 if this class is the same type of (or a subclass of) the named class.
Returns 0 otherwise. This method works in combination with vtkTypeMacro found in vtkSetGet.h.
Reimplemented from vtkObjectBase.
|
static |
|
protectedvirtual |
vtkMath * vtkMath::NewInstance | ( | ) | const |
|
overridevirtual |
Methods invoked by print to print information about the object including superclasses.
Typically not called by the user (use Print() instead) but used in the hierarchical print process to combine the output of several classes.
Reimplemented from vtkObjectBase.
|
inlinestaticconstexpr |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
static |
Gives the exponent of the lowest power of two not less than x.
Or in mathspeak, return the smallest "i" for which 2^i >= x. If x is zero, then the return value will be zero.
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
static |
Compute N factorial, N! = N*(N-1) * (N-2)...*3*2*1.
0! is taken to be 1.
|
static |
The number of combinations of n objects from a pool of m objects (m>n).
This is commonly known as "m choose n" and sometimes denoted or .
|
static |
Start iterating over "m choose n" objects.
This function returns an array of n integers, each from 0 to m-1. These integers represent the n items chosen from the set [0,m[.
You are responsible for calling vtkMath::FreeCombination() once the iterator is no longer needed.
Warning: this gets large very quickly, especially when n nears m/2! (Hint: think of Pascal's triangle.)
|
static |
Given m, n, and a valid combination of n integers in the range [0,m[, this function alters the integers into the next combination in a sequence of all combinations of n items from a pool of m.
If the combination is the last item in the sequence on input, then combination is unaltered and 0 is returned. Otherwise, 1 is returned and combination is updated.
|
static |
Free the "iterator" array created by vtkMath::BeginCombination.
|
static |
Initialize seed value.
NOTE: Random() has the bad property that the first random number returned after RandomSeed() is called is proportional to the seed value! To help solve this, call RandomSeed() a few times inside seed. This doesn't ruin the repeatability of Random().
DON'T USE Random(), RandomSeed(), GetSeed(), Gaussian() THIS IS STATIC SO THIS IS PRONE TO ERRORS (SPECIALLY FOR REGRESSION TESTS) THIS IS HERE FOR BACKWARD COMPATIBILITY ONLY. Instead, for a sequence of random numbers with a uniform distribution create a vtkMinimalStandardRandomSequence object. For a sequence of random numbers with a gaussian/normal distribution create a vtkBoxMuellerRandomSequence object.
|
static |
Return the current seed used by the random number generator.
DON'T USE Random(), RandomSeed(), GetSeed(), Gaussian() THIS IS STATIC SO THIS IS PRONE TO ERRORS (SPECIALLY FOR REGRESSION TESTS) THIS IS HERE FOR BACKWARD COMPATIBILITY ONLY. Instead, for a sequence of random numbers with a uniform distribution create a vtkMinimalStandardRandomSequence object. For a sequence of random numbers with a gaussian/normal distribution create a vtkBoxMuellerRandomSequence object.
|
static |
Generate pseudo-random numbers distributed according to the uniform distribution between 0.0 and 1.0.
This is used to provide portability across different systems.
DON'T USE Random(), RandomSeed(), GetSeed(), Gaussian() THIS IS STATIC SO THIS IS PRONE TO ERRORS (SPECIALLY FOR REGRESSION TESTS) THIS IS HERE FOR BACKWARD COMPATIBILITY ONLY. Instead, for a sequence of random numbers with a uniform distribution create a vtkMinimalStandardRandomSequence object. For a sequence of random numbers with a gaussian/normal distribution create a vtkBoxMuellerRandomSequence object.
|
static |
Generate pseudo-random numbers distributed according to the uniform distribution between min and max.
DON'T USE Random(), RandomSeed(), GetSeed(), Gaussian() THIS IS STATIC SO THIS IS PRONE TO ERRORS (SPECIALLY FOR REGRESSION TESTS) THIS IS HERE FOR BACKWARD COMPATIBILITY ONLY. Instead, for a sequence of random numbers with a uniform distribution create a vtkMinimalStandardRandomSequence object. For a sequence of random numbers with a gaussian/normal distribution create a vtkBoxMuellerRandomSequence object.
|
static |
Generate pseudo-random numbers distributed according to the standard normal distribution.
DON'T USE Random(), RandomSeed(), GetSeed(), Gaussian() THIS IS STATIC SO THIS IS PRONE TO ERRORS (SPECIALLY FOR REGRESSION TESTS) THIS IS HERE FOR BACKWARD COMPATIBILITY ONLY. Instead, for a sequence of random numbers with a uniform distribution create a vtkMinimalStandardRandomSequence object. For a sequence of random numbers with a gaussian/normal distribution create a vtkBoxMuellerRandomSequence object.
|
static |
Generate pseudo-random numbers distributed according to the Gaussian distribution with mean mean and standard deviation std.
DON'T USE Random(), RandomSeed(), GetSeed(), Gaussian() THIS IS STATIC SO THIS IS PRONE TO ERRORS (SPECIALLY FOR REGRESSION TESTS) THIS IS HERE FOR BACKWARD COMPATIBILITY ONLY. Instead, for a sequence of random numbers with a uniform distribution create a vtkMinimalStandardRandomSequence object. For a sequence of random numbers with a gaussian/normal distribution create a vtkBoxMuellerRandomSequence object.
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
Compute dot product between two points p1 and p2.
This version allows for custom range and iterator types to be used. These types must implement operator[]
, and at least one of them must have a value_type
typedef.
The first template parameter ReturnTypeT
sets the return type of this method. By default, it is set to double
, but it can be overridden.
The EnableT
template parameter is used to make sure that this version doesn't capture the float*
, float[]
, double*
, double[]
as those should go to the other Distance2BetweenPoints
functions.
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
static |
Compute the norm of n-vector.
x is the vector, n is its length.
|
static |
Compute the norm of n-vector.
x is the vector, n is its length.
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
Compute the squared norm of a 3-vector.
The first template parameter ReturnTypeT
sets the return type of this method. By default, it is set to double
, but it can be overridden.
The parameter of this function must be a container, and array, or a range of 3 components implementing operator[]
.
|
inlinestatic |
|
inlinestatic |
|
static |
Given a unit vector v1, find two unit vectors v2 and v3 such that v1 cross v2 = v3 (i.e.
the vectors are perpendicular to each other). There is an infinite number of such vectors, specify an angle theta to choose one set. If you want only one perpendicular vector, specify nullptr for v3.
|
static |
Given a unit vector v1, find two unit vectors v2 and v3 such that v1 cross v2 = v3 (i.e.
the vectors are perpendicular to each other). There is an infinite number of such vectors, specify an angle theta to choose one set. If you want only one perpendicular vector, specify nullptr for v3.
|
static |
Compute the projection of vector a on vector b and return it in projection[3].
If b is a zero vector, the function returns false and 'projection' is invalid. Otherwise, it returns true.
|
static |
Compute the projection of vector a on vector b and return it in projection[3].
If b is a zero vector, the function returns false and 'projection' is invalid. Otherwise, it returns true.
|
static |
Compute the projection of 2D vector a on 2D vector b and returns the result in projection[2].
If b is a zero vector, the function returns false and 'projection' is invalid. Otherwise, it returns true.
|
static |
Compute the projection of 2D vector a on 2D vector b and returns the result in projection[2].
If b is a zero vector, the function returns false and 'projection' is invalid. Otherwise, it returns true.
|
inlinestatic |
Compute distance squared between two points p1 and p2.
This version allows for custom range and iterator types to be used. These types must implement operator[]
, and at least one of them must have a value_type
typedef.
The first template parameter ReturnTypeT
sets the return type of this method. By default, it is set to double
, but it can be overridden.
The EnableT
template parameter is used to make sure that this version doesn't capture the float*
, float[]
, double*
, double[]
as those should go to the other Distance2BetweenPoints
functions.
|
inlinestatic |
|
inlinestatic |
|
static |
Compute angle in radians between two vectors.
|
static |
Compute signed angle in radians between two vectors with regard to a third orthogonal vector.
|
static |
Compute the amplitude of a Gaussian function with mean=0 and specified variance.
That is, 1./(std::sqrt(2 Pi * variance)) * exp(-distanceFromMean^2/(2.*variance)).
|
static |
Compute the amplitude of a Gaussian function with specified mean and variance.
That is, 1./(std::sqrt(2 Pi * variance)) * exp(-(position - mean)^2/(2.*variance)).
|
static |
Compute the amplitude of an unnormalized Gaussian function with mean=0 and specified variance.
That is, exp(-distanceFromMean^2/(2.*variance)). When distanceFromMean = 0, this function returns 1.
|
static |
Compute the amplitude of an unnormalized Gaussian function with specified mean and variance.
That is, exp(-(position - mean)^2/(2.*variance)). When the distance from 'position' to 'mean' is 0, this function returns 1.
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
static |
LU Factorization of a 3x3 matrix.
|
static |
LU Factorization of a 3x3 matrix.
|
static |
LU back substitution for a 3x3 matrix.
|
static |
LU back substitution for a 3x3 matrix.
|
static |
Solve Ay = x for y and place the result in y.
The matrix A is destroyed in the process.
|
static |
Solve Ay = x for y and place the result in y.
The matrix A is destroyed in the process.
|
static |
Multiply a vector by a 3x3 matrix.
The result is placed in out.
|
static |
Multiply a vector by a 3x3 matrix.
The result is placed in out.
|
static |
Multiply one 3x3 matrix by another according to C = AB.
|
static |
Multiply one 3x3 matrix by another according to C = AB.
|
inlinestatic |
Multiply matrices such that M3 = M1 x M2.
M3 must already be allocated.
LayoutT1 (resp. LayoutT2) allow to perform basic matrix reindexing for M1 (resp. M2). It should be set to a component of MatrixLayout.
Matrices are assumed to be a 1D array implementing operator[]
. The matrices are indexed row by row. Let us develop the effect of LayoutT1 on M1 (the same is true for LayoutT2 on M2). If LayoutT1 == vtkMatrixUtilities::Layout::Identity (default), then M1 indexing is untouched. If LayoutT1 == vtkMatrixUtilities::Layout::Transpose, then M1 is read column-wise. If LayoutT1 == vtkMatrixUtilities::Layout::Diag, then M1 is considered to be composed of non zero elements of a diagonal matrix.
|
inlinestatic |
Multiply matrix M with vector Y such that Y = M x X.
Y must be allocated.
LayoutT allow to perform basic matrix reindexing. It should be set to a component of MatrixLayout.
Matrix M is assumed to be a 1D array implementing operator[]
. The matrix is indexed row by row. If the input array is indexed columns by colums. If LayoutT == vtkMatrixUtilities::Layout::Identity (default), then M indexing is untouched. If LayoutT == vtkMatrixUtilities::Layout::Transpose, then M is read column-wise. If LayoutT == vtkMatrixUtilities::Layout::Diag, then M is considered to be composed of non zero elements of a diagonal matrix.
VectorT1 and VectorT2 are arrays of size RowsT, and must implement operator[]
.
|
inlinestatic |
|
inlinestatic |
Computes the determinant of input square SizeT x SizeT matrix M.
The return type is the same as the underlying scalar type of MatrixT.
LayoutT allow to perform basic matrix reindexing. It should be set to a component of MatrixLayout.
Matrix M is assumed to be a 1D array implementing operator[]
. The matrix is indexed row by row. If the input array is indexed columns by colums. If LayoutT == vtkMatrixUtilities::Layout::Identity (default), then M indexing is untouched. If LayoutT == vtkMatrixUtilities::Layout::Transpose, then M is read column-wise. If LayoutT == vtkMatrixUtilities::Layout::Diag, then M is considered to be composed of non zero elements of a diagonal matrix.
This method is currently implemented for SizeT lower or equal to 3.
|
inlinestatic |
Computes the inverse of input matrix M1 into M2.
LayoutT allow to perform basic matrix reindexing of M1. It should be set to a component of MatrixLayout.
Matrix M is assumed to be a 1D array implementing operator[]
. The matrix is indexed row by row. If the input array is indexed columns by colums. If LayoutT == vtkMatrixUtilities::Layout::Identity (default), then M indexing is untouched. If LayoutT == vtkMatrixUtilities::Layout::Transpose, then M is read column-wise. If LayoutT == vtkMatrixUtilities::Layout::Diag, then M is considered to be composed of non zero elements of a diagonal matrix.
This method is currently implemented for SizeT lower or equal to 3.
|
inlinestatic |
This method solves linear systems M * x = y.
LayoutT allow to perform basic matrix reindexing of M1. It should be set to a component of MatrixLayout.
Matrix M is assumed to be a 1D array implementing operator[]
. The matrix is indexed row by row. If the input array is indexed columns by colums. If LayoutT == vtkMatrixUtilities::Layout::Identity (default), then M indexing is untouched. If LayoutT == vtkMatrixUtilities::Layout::Transpose, then M is read column-wise. If LayoutT == vtkMatrixUtilities::Layout::Diag, then M is considered to be composed of non zero elements of a diagonal matrix.
|
inlinestatic |
Computes the dot product x^T M y, where x and y are vectors and M is a metric matrix.
VectorT1 and VectorT2 are arrays of size SizeT, and must implement operator[]
.
Matrix M is assumed to be a 1D array implementing operator[]
. The matrix is indexed row by row. If the input array is indexed columns by colums. If LayoutT == vtkMatrixUtilities::Layout::Identity (default), then M indexing is untouched. If LayoutT == vtkMatrixUtilities::Layout::Transpose, then M is read column-wise. If LayoutT == vtkMatrixUtilities::Layout::Diag, then M is considered to be composed of non zero elements of a diagonal matrix.
|
static |
General matrix multiplication.
You must allocate output storage. colA == rowB and matrix C is rowA x colB
|
static |
Transpose a 3x3 matrix.
The input matrix is A. The output is stored in AT.
|
static |
Transpose a 3x3 matrix.
The input matrix is A. The output is stored in AT.
|
static |
Invert a 3x3 matrix.
The input matrix is A. The output is stored in AI.
|
static |
Invert a 3x3 matrix.
The input matrix is A. The output is stored in AI.
|
static |
Set A to the identity matrix.
|
static |
Set A to the identity matrix.
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
Convert a quaternion to a 3x3 rotation matrix.
The quaternion does not have to be normalized beforehand. The quaternion must be in the form [w, x, y, z].
|
inlinestatic |
Convert a quaternion to a 3x3 rotation matrix.
The quaternion does not have to be normalized beforehand. The quaternion must be in the form [w, x, y, z].
|
inlinestatic |
Convert a quaternion to a 3x3 rotation matrix.
The quaternion does not have to be normalized beforehand. The quaternion must be in the form [w, x, y, z].
|
inlinestatic |
Convert a 3x3 matrix into a quaternion.
This will provide the best possible answer even if the matrix is not a pure rotation matrix. The quaternion is in the form [w, x, y, z]. The method used is that of B.K.P. Horn. See: https://people.csail.mit.edu/bkph/articles/Quaternions.pdf
|
inlinestatic |
Convert a 3x3 matrix into a quaternion.
This will provide the best possible answer even if the matrix is not a pure rotation matrix. The quaternion is in the form [w, x, y, z]. The method used is that of B.K.P. Horn. See: https://people.csail.mit.edu/bkph/articles/Quaternions.pdf
|
inlinestatic |
Convert a 3x3 matrix into a quaternion.
This will provide the best possible answer even if the matrix is not a pure rotation matrix. The quaternion is in the form [w, x, y, z]. The method used is that of B.K.P. Horn. See: https://people.csail.mit.edu/bkph/articles/Quaternions.pdf
|
static |
Multiply two quaternions.
This is used to concatenate rotations. Quaternions are in the form [w, x, y, z].
|
static |
Multiply two quaternions.
This is used to concatenate rotations. Quaternions are in the form [w, x, y, z].
|
static |
rotate a vector by a normalized quaternion using // https://en.wikipedia.org/wiki/Rodrigues%27_rotation_formula
|
static |
rotate a vector by a normalized quaternion using // https://en.wikipedia.org/wiki/Rodrigues%27_rotation_formula
|
static |
rotate a vector by WXYZ using // https://en.wikipedia.org/wiki/Rodrigues%27_rotation_formula
|
static |
rotate a vector by WXYZ using // https://en.wikipedia.org/wiki/Rodrigues%27_rotation_formula
|
static |
Orthogonalize a 3x3 matrix and put the result in B.
If matrix A has a negative determinant, then B will be a rotation plus a flip i.e. it will have a determinant of -1.
|
static |
Orthogonalize a 3x3 matrix and put the result in B.
If matrix A has a negative determinant, then B will be a rotation plus a flip i.e. it will have a determinant of -1.
|
static |
Diagonalize a symmetric 3x3 matrix and return the eigenvalues in w and the eigenvectors in the columns of V.
The matrix V will have a positive determinant, and the three eigenvectors will be aligned as closely as possible with the x, y, and z axes.
|
static |
Diagonalize a symmetric 3x3 matrix and return the eigenvalues in w and the eigenvectors in the columns of V.
The matrix V will have a positive determinant, and the three eigenvectors will be aligned as closely as possible with the x, y, and z axes.
|
static |
Perform singular value decomposition on a 3x3 matrix.
This is not done using a conventional SVD algorithm, instead it is done using Orthogonalize3x3 and Diagonalize3x3. Both output matrices U and VT will have positive determinants, and the w values will be arranged such that the three rows of VT are aligned as closely as possible with the x, y, and z axes respectively. If the determinant of A is negative, then the three w values will be negative.
|
static |
Perform singular value decomposition on a 3x3 matrix.
This is not done using a conventional SVD algorithm, instead it is done using Orthogonalize3x3 and Diagonalize3x3. Both output matrices U and VT will have positive determinants, and the w values will be arranged such that the three rows of VT are aligned as closely as possible with the x, y, and z axes respectively. If the determinant of A is negative, then the three w values will be negative.
|
static |
Solve linear equation Ax = b using Gaussian Elimination with Partial Pivoting for a 2x2 system.
If the matrix is found to be singular within a small numerical tolerance close to machine precision then 0 is returned. Note: Even if method succeeded the matrix A could be close to singular. The solution should be checked against relevant tolerance criteria.
|
static |
Solve linear equations Ax = b using Crout's method.
Input is square matrix A and load vector b. Solution x is written over load vector. The dimension of the matrix is specified in size. If error is found, method returns a 0. Note: Even if method succeeded the matrix A could be close to singular. The solution should be checked against relevant tolerance criteria.
|
static |
Invert input square matrix A into matrix AI.
Note that A is modified during the inversion. The size variable is the dimension of the matrix. Returns 0 if inverse not computed.
|
static |
Thread safe version of InvertMatrix method.
Working memory arrays tmp1SIze and tmp2Size of length size must be passed in.
|
static |
Factor linear equations Ax = b using LU decomposition into the form A = LU where L is a unit lower triangular matrix and U is upper triangular matrix.
The input is a square matrix A, an integer array of pivot indices index[0->n-1], and the size, n, of the square matrix. The output is provided by overwriting the input A with a matrix of the same size as A containing all of the information about L and U. If the output matrix is then L and U can be obtained as:
That is, the diagonal of the resulting A* is the diagonal of U. The upper right triangle of A is the upper right triangle of U. The lower left triangle of A is the lower left triangle of L (and since L is unit lower triangular, the diagonal of L is all 1's). If an error is found, the function returns 0.
|
static |
Thread safe version of LUFactorLinearSystem method.
Working memory array tmpSize of length size must be passed in.
|
static |
Solve linear equations Ax = b using LU decomposition A = LU where L is lower triangular matrix and U is upper triangular matrix.
Input is factored matrix A=LU, integer array of pivot indices index[0->n-1], load vector x[0->n-1], and size of square matrix n. Note that A=LU and index[] are generated from method LUFactorLinearSystem). Also, solution vector is written directly over input load vector.
|
static |
Estimate the condition number of a LU factored matrix.
Used to judge the accuracy of the solution. The matrix A must have been previously factored using the method LUFactorLinearSystem. The condition number is the ratio of the infinity matrix norm (i.e., maximum value of matrix component) divided by the minimum diagonal value. (This works for triangular matrices only: see Conte and de Boor, Elementary Numerical Analysis.)
|
static |
Jacobi iteration for the solution of eigenvectors/eigenvalues of a 3x3 real symmetric matrix.
Square 3x3 matrix a; output eigenvalues in w; and output eigenvectors in v arranged column-wise. Resulting eigenvalues/vectors are sorted in decreasing order; the most positive eigenvectors are selected for consistency; eigenvectors are normalized. NOTE: the input matrix a is modified during the solution
|
static |
Jacobi iteration for the solution of eigenvectors/eigenvalues of a 3x3 real symmetric matrix.
Square 3x3 matrix a; output eigenvalues in w; and output eigenvectors in v arranged column-wise. Resulting eigenvalues/vectors are sorted in decreasing order; the most positive eigenvectors are selected for consistency; eigenvectors are normalized. NOTE: the input matrix a is modified during the solution
|
static |
JacobiN iteration for the solution of eigenvectors/eigenvalues of a nxn real symmetric matrix.
Square nxn matrix a; size of matrix in n; output eigenvalues in w; and output eigenvectors in v arranged column-wise. Resulting eigenvalues/vectors are sorted in decreasing order; the most positive eigenvectors are selected for consistency; and eigenvectors are normalized. w and v need to be allocated previously. NOTE: the input matrix a is modified during the solution
|
static |
JacobiN iteration for the solution of eigenvectors/eigenvalues of a nxn real symmetric matrix.
Square nxn matrix a; size of matrix in n; output eigenvalues in w; and output eigenvectors in v arranged column-wise. Resulting eigenvalues/vectors are sorted in decreasing order; the most positive eigenvectors are selected for consistency; and eigenvectors are normalized. w and v need to be allocated previously. NOTE: the input matrix a is modified during the solution
|
static |
Solves for the least squares best fit matrix for the homogeneous equation X'M' = 0'.
Uses the method described on pages 40-41 of Computer Vision by Forsyth and Ponce, which is that the solution is the eigenvector associated with the minimum eigenvalue of T(X)X, where T(X) is the transpose of X. The inputs and output are transposed matrices. Dimensions: X' is numberOfSamples by xOrder, M' dimension is xOrder by yOrder. M' should be pre-allocated. All matrices are row major. The resultant matrix M' should be pre-multiplied to X' to get 0', or transposed and then post multiplied to X to get 0
|
static |
Solves for the least squares best fit matrix for the equation X'M' = Y'.
Uses pseudoinverse to get the ordinary least squares. The inputs and output are transposed matrices. Dimensions: X' is numberOfSamples by xOrder, Y' is numberOfSamples by yOrder, M' dimension is xOrder by yOrder. M' should be pre-allocated. All matrices are row major. The resultant matrix M' should be pre-multiplied to X' to get Y', or transposed and then post multiplied to X to get Y By default, this method checks for the homogeneous condition where Y==0, and if so, invokes SolveHomogeneousLeastSquares. For better performance when the system is known not to be homogeneous, invoke with checkHomogeneous=0.
|
inlinestatic |
|
static |
Convert color in RGB format (Red, Green, Blue) to HSV format (Hue, Saturation, Value).
The input color is not modified. The input RGB must be float values in the range [0, 1]. The output ranges are hue [0, 1], saturation [0, 1], and value [0, 1].
|
inlinestatic |
|
static |
Convert color in RGB format (Red, Green, Blue) to HSV format (Hue, Saturation, Value).
The input color is not modified. The input RGB must be float values in the range [0, 1]. The output ranges are hue [0, 1], saturation [0, 1], and value [0, 1].
|
inlinestatic |
|
static |
Convert color in HSV format (Hue, Saturation, Value) to RGB format (Red, Green, Blue).
The input color is not modified. The input 'hsv' must be float values in the range [0, 1]. The elements of each component of the output 'rgb' are in the range [0, 1].
|
inlinestatic |
|
static |
Convert color in HSV format (Hue, Saturation, Value) to RGB format (Red, Green, Blue).
The input color is not modified. The input 'hsv' must be float values in the range [0, 1]. The elements of each component of the output 'rgb' are in the range [0, 1].
|
inlinestatic |
|
static |
Convert color from the CIE-L*ab system to CIE XYZ.
|
inlinestatic |
|
static |
Convert Color from the CIE XYZ system to CIE-L*ab.
|
inlinestatic |
|
static |
Convert color from the CIE XYZ system to RGB.
|
inlinestatic |
|
static |
Convert color from the RGB system to CIE XYZ.
|
inlinestatic |
|
static |
Convert color from the RGB system to CIE-L*ab.
The input RGB must be values in the range [0, 1]. The output ranges of 'L' is [0, 100]. The output range of 'a' and 'b' are approximately [-110, 110].
|
inlinestatic |
|
static |
Convert color from the CIE-L*ab system to RGB.
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
static |
Clamp some values against a range The method without 'clamped_values' will perform in-place clamping.
|
static |
Clamp some values against a range The method without 'clamped_values' will perform in-place clamping.
|
inlinestatic |
|
static |
Convert a 6-Component symmetric tensor into a 9-Component tensor, no allocation performed.
Symmetric tensor is expected to have the following order : XX, YY, ZZ, XY, YZ, XZ
|
inlinestatic |
|
static |
Return the scalar type that is most likely to have enough precision to store a given range of data once it has been scaled and shifted (i.e.
[range_min * scale + shift, range_max * scale + shift]. If any one of the parameters is not an integer number (decimal part != 0), the search will default to float types only (float or double) Return -1 on error or no scalar type found.
|
static |
Get a vtkDataArray's scalar range for a given component.
If the vtkDataArray's data type is unsigned char (VTK_UNSIGNED_CHAR) the range is adjusted to the whole data type range [0, 255.0]. Same goes for unsigned short (VTK_UNSIGNED_SHORT) but the upper bound is also adjusted down to 4095.0 if was between ]255, 4095.0]. Return 1 on success, 0 otherwise.
|
static |
Return true if first 3D extent is within second 3D extent Extent is x-min, x-max, y-min, y-max, z-min, z-max.
|
static |
Return true if first 3D bounds is within the second 3D bounds Bounds is x-min, x-max, y-min, y-max, z-min, z-max Delta is the error margin along each axis (usually a small number)
|
static |
Return true if point is within the given 3D bounds Bounds is x-min, x-max, y-min, y-max, z-min, z-max Delta is the error margin along each axis (usually a small number)
|
static |
Implements Plane / Axis-Aligned Bounding-Box intersection as described in Graphics Gems IV, Ned Greene; pp.
75-76. Variable names are based on the description in the book. This function returns +1 if the box lies fully in the positive side of the plane (by convention, the side to which the plane's normal points to), -1 if the box fully lies in the negative side and 0 if the plane intersects the box. -2 is returned if any of the arguments is invalid.
|
static |
In Euclidean space, there is a unique circle passing through any given three non-collinear points P1, P2, and P3.
Using Cartesian coordinates to represent these points as spatial vectors, it is possible to use the dot product and cross product to calculate the radius and center of the circle. See: http://en.wikipedia.org/wiki/Circumscribed_circle and more specifically the section Barycentric coordinates from cross- and dot-products
|
static |
Special IEEE-754 number used to represent positive infinity.
|
static |
Special IEEE-754 number used to represent negative infinity.
|
static |
Special IEEE-754 number used to represent Not-A-Number (Nan).
|
static |
Test if a number is equal to the special floating point value infinity.
|
static |
Test if a number is equal to the special floating point value Not-A-Number (Nan).
|
static |
Test if a number has finite value i.e.
it is normal, subnormal or zero, but not infinite or Nan.
|
static |
find roots of ax^2+bx+c=0 in the interval min,max.
place the roots in u[2] and return how many roots found
|
inline |
|
staticprotected |