58 # define VTK_DBL_MIN 2.2250738585072014e-308 60 # define VTK_DBL_MIN DBL_MIN 64 # define VTK_DBL_EPSILON 2.2204460492503131e-16 66 # define VTK_DBL_EPSILON DBL_EPSILON 69 #ifndef VTK_DBL_EPSILON 71 # define VTK_DBL_EPSILON 2.2204460492503131e-16 73 # define VTK_DBL_EPSILON DBL_EPSILON 74 # endif // DBL_EPSILON 75 #endif // VTK_DBL_EPSILON 79 class vtkMathInternal;
86 template <
typename OutT>
100 static double Pi() {
return 3.141592653589793; };
106 static float RadiansFromDegrees(
float degrees);
107 static double RadiansFromDegrees(
double degrees);
114 static float DegreesFromRadians(
float radians);
115 static double DegreesFromRadians(
double radians);
122 return static_cast<int>( f + ( f >= 0.0 ? 0.5 : -0.5 ) ); }
124 return static_cast<int>( f + ( f >= 0.0 ? 0.5 : -0.5 ) ); }
130 template <
typename OutT>
143 static int Floor(
double x);
150 static int Ceil(
double x);
157 static int CeilLog2(vtkTypeUInt64 x);
163 static T Min(
const T & a,
const T & b);
169 static T Max(
const T & a,
const T & b);
174 static bool IsPowerOfTwo(vtkTypeUInt64 x);
181 static int NearestPowerOfTwo(
int x);
187 static vtkTypeInt64 Factorial(
int N );
194 static vtkTypeInt64 Binomial(
int m,
int n );
206 static int* BeginCombination(
int m,
int n );
218 static int NextCombination(
int m,
int n,
int* combination );
223 static void FreeCombination(
int* combination);
240 static void RandomSeed(
int s);
253 static int GetSeed();
268 static double Random();
282 static double Random(
double min,
double max );
296 static double Gaussian();
310 static double Gaussian(
double mean,
double std );
315 static void Add(
const float a[3],
const float b[3],
float c[3]) {
316 for (
int i = 0; i < 3; ++i)
323 static void Add(
const double a[3],
const double b[3],
double c[3]) {
324 for (
int i = 0; i < 3; ++i)
331 static void Subtract(
const float a[3],
const float b[3],
float c[3]) {
332 for (
int i = 0; i < 3; ++i)
339 static void Subtract(
const double a[3],
const double b[3],
double c[3]) {
340 for (
int i = 0; i < 3; ++i)
349 for (
int i = 0; i < 3; ++i)
358 for (
int i = 0; i < 2; ++i)
367 for (
int i = 0; i < 3; ++i)
376 for (
int i = 0; i < 2; ++i)
383 static float Dot(
const float a[3],
const float b[3]) {
384 return ( a[0] * b[0] + a[1] * b[1] + a[2] * b[2] );};
389 static double Dot(
const double a[3],
const double b[3]) {
390 return ( a[0] * b[0] + a[1] * b[1] + a[2] * b[2] );};
395 static void Outer(
const float a[3],
const float b[3],
float C[3][3]) {
396 for (
int i=0; i < 3; i++)
397 for (
int j=0; j < 3; j++)
398 C[i][j] = a[i] * b[j];
403 static void Outer(
const double a[3],
const double b[3],
double C[3][3]) {
404 for (
int i=0; i < 3; i++)
405 for (
int j=0; j < 3; j++)
406 C[i][j] = a[i] * b[j];
412 static void Cross(
const float a[3],
const float b[3],
float c[3]);
418 static void Cross(
const double a[3],
const double b[3],
double c[3]);
424 static float Norm(
const float* x,
int n);
425 static double Norm(
const double* x,
int n);
431 static float Norm(
const float v[3]) {
432 return static_cast<float> (sqrt( v[0] * v[0] + v[1] * v[1] + v[2] * v[2] ) );};
437 static double Norm(
const double v[3]) {
438 return sqrt( v[0] * v[0] + v[1] * v[1] + v[2] * v[2] );};
443 static float Normalize(
float v[3]);
449 static double Normalize(
double v[3]);
459 static void Perpendiculars(
const double v1[3],
double v2[3],
double v3[3],
461 static void Perpendiculars(
const float v1[3],
float v2[3],
float v3[3],
471 static bool ProjectVector(
const float a[3],
const float b[3],
float projection[3]);
472 static bool ProjectVector(
const double a[3],
const double b[3],
double projection[3]);
482 static bool ProjectVector2D(
const float a[2],
const float b[2],
float projection[2]);
483 static bool ProjectVector2D(
const double a[2],
const double b[2],
double projection[2]);
489 static float Distance2BetweenPoints(
const float p1[3],
const float p2[3]);
495 static double Distance2BetweenPoints(
const double p1[3],
const double p2[3]);
500 static double AngleBetweenVectors(
const double v1[3],
const double v2[3]);
506 static double GaussianAmplitude(
const double variance,
const double distanceFromMean);
512 static double GaussianAmplitude(
const double mean,
const double variance,
const double position);
519 static double GaussianWeight(
const double variance,
const double distanceFromMean);
526 static double GaussianWeight(
const double mean,
const double variance,
const double position);
531 static float Dot2D(
const float x[2],
const float y[2]) {
532 return ( x[0] * y[0] + x[1] * y[1] );};
537 static double Dot2D(
const double x[2],
const double y[2]) {
538 return ( x[0] * y[0] + x[1] * y[1] );};
543 static void Outer2D(
const float x[2],
const float y[2],
float A[2][2])
545 for (
int i=0; i < 2; i++)
547 for (
int j=0; j < 2; j++)
549 A[i][j] = x[i] * y[j];
556 static void Outer2D(
const double x[2],
const double y[2],
double A[2][2])
558 for (
int i=0; i < 2; i++)
560 for (
int j=0; j < 2; j++)
562 A[i][j] = x[i] * y[j];
571 return static_cast<float> (sqrt( x[0] * x[0] + x[1] * x[1] ) );};
577 static double Norm2D(
const double x[2]) {
578 return sqrt( x[0] * x[0] + x[1] * x[1] );};
583 static float Normalize2D(
float v[2]);
589 static double Normalize2D(
double v[2]);
595 return (c1[0] * c2[1] - c2[0] * c1[1] );};
602 return (a * d - b * c);};
604 return (c1[0] * c2[1] - c2[0] * c1[1] );};
611 static void LUFactor3x3(
float A[3][3],
int index[3]);
612 static void LUFactor3x3(
double A[3][3],
int index[3]);
619 static void LUSolve3x3(
const float A[3][3],
const int index[3],
621 static void LUSolve3x3(
const double A[3][3],
const int index[3],
630 static void LinearSolve3x3(
const float A[3][3],
const float x[3],
632 static void LinearSolve3x3(
const double A[3][3],
const double x[3],
640 static void Multiply3x3(
const float A[3][3],
const float in[3],
642 static void Multiply3x3(
const double A[3][3],
const double in[3],
650 static void Multiply3x3(
const float A[3][3],
const float B[3][3],
652 static void Multiply3x3(
const double A[3][3],
const double B[3][3],
661 static void MultiplyMatrix(
double **A,
double **B,
662 unsigned int rowA,
unsigned int colA,
663 unsigned int rowB,
unsigned int colB,
671 static void Transpose3x3(
const float A[3][3],
float AT[3][3]);
672 static void Transpose3x3(
const double A[3][3],
double AT[3][3]);
680 static void Invert3x3(
const float A[3][3],
float AI[3][3]);
681 static void Invert3x3(
const double A[3][3],
double AI[3][3]);
688 static void Identity3x3(
float A[3][3]);
689 static void Identity3x3(
double A[3][3]);
696 static double Determinant3x3(
float A[3][3]);
697 static double Determinant3x3(
double A[3][3]);
703 static float Determinant3x3(
const float c1[3],
710 static double Determinant3x3(
const double c1[3],
720 static double Determinant3x3(
double a1,
double a2,
double a3,
721 double b1,
double b2,
double b3,
722 double c1,
double c2,
double c3);
732 static void QuaternionToMatrix3x3(
const float quat[4],
float A[3][3]);
733 static void QuaternionToMatrix3x3(
const double quat[4],
double A[3][3]);
745 static void Matrix3x3ToQuaternion(
const float A[3][3],
float quat[4]);
746 static void Matrix3x3ToQuaternion(
const double A[3][3],
double quat[4]);
756 static void MultiplyQuaternion(
const float q1[4],
const float q2[4],
float q[4] );
757 static void MultiplyQuaternion(
const double q1[4],
const double q2[4],
double q[4] );
765 static void RotateVectorByNormalizedQuaternion(
const float v[3],
const float q[4],
float r[3]);
766 static void RotateVectorByNormalizedQuaternion(
const double v[3],
const double q[4],
double r[3]);
774 static void RotateVectorByWXYZ(
const float v[3],
const float q[4],
float r[3]);
775 static void RotateVectorByWXYZ(
const double v[3],
const double q[4],
double r[3]);
784 static void Orthogonalize3x3(
const float A[3][3],
float B[3][3]);
785 static void Orthogonalize3x3(
const double A[3][3],
double B[3][3]);
795 static void Diagonalize3x3(
const float A[3][3],
float w[3],
float V[3][3]);
796 static void Diagonalize3x3(
const double A[3][3],
double w[3],
double V[3][3]);
809 static void SingularValueDecomposition3x3(
const float A[3][3],
810 float U[3][3],
float w[3],
812 static void SingularValueDecomposition3x3(
const double A[3][3],
813 double U[3][3],
double w[3],
823 static int SolveLinearSystem(
double **A,
double *x,
int size);
831 static int InvertMatrix(
double **A,
double **AI,
int size);
838 static int InvertMatrix(
double **A,
double **AI,
int size,
839 int *tmp1Size,
double *tmp2Size);
863 static int LUFactorLinearSystem(
double **A,
int *
index,
int size);
870 static int LUFactorLinearSystem(
double **A,
int *
index,
int size,
881 static void LUSolveLinearSystem(
double **A,
int *
index,
882 double *x,
int size);
892 static double EstimateMatrixCondition(
double **A,
int size);
903 static int Jacobi(
float **a,
float *w,
float **v);
904 static int Jacobi(
double **a,
double *w,
double **v);
917 static int JacobiN(
float **a,
int n,
float *w,
float **v);
918 static int JacobiN(
double **a,
int n,
double *w,
double **v);
934 static int SolveHomogeneousLeastSquares(
int numberOfSamples,
double **xt,
int xOrder,
951 static int SolveLeastSquares(
int numberOfSamples,
double **xt,
int xOrder,
952 double **yt,
int yOrder,
double **mt,
int checkHomogeneous=1);
962 static void RGBToHSV(
const float rgb[3],
float hsv[3])
963 { RGBToHSV(rgb[0], rgb[1], rgb[2], hsv, hsv+1, hsv+2); }
964 static void RGBToHSV(
float r,
float g,
float b,
float *h,
float *s,
float *v);
965 static double* RGBToHSV(
const double rgb[3]);
966 static double* RGBToHSV(
double r,
double g,
double b);
967 static void RGBToHSV(
const double rgb[3],
double hsv[3])
968 { RGBToHSV(rgb[0], rgb[1], rgb[2], hsv, hsv+1, hsv+2); }
969 static void RGBToHSV(
double r,
double g,
double b,
double *h,
double *s,
double *v);
980 static void HSVToRGB(
const float hsv[3],
float rgb[3])
981 { HSVToRGB(hsv[0], hsv[1], hsv[2], rgb, rgb+1, rgb+2); }
982 static void HSVToRGB(
float h,
float s,
float v,
float *r,
float *g,
float *b);
983 static double* HSVToRGB(
const double hsv[3]);
984 static double* HSVToRGB(
double h,
double s,
double v);
985 static void HSVToRGB(
const double hsv[3],
double rgb[3])
986 { HSVToRGB(hsv[0], hsv[1], hsv[2], rgb, rgb+1, rgb+2); }
987 static void HSVToRGB(
double h,
double s,
double v,
double *r,
double *g,
double *b);
994 static void LabToXYZ(
const double lab[3],
double xyz[3]) {
995 LabToXYZ(lab[0], lab[1], lab[2], xyz+0, xyz+1, xyz+2);
997 static void LabToXYZ(
double L,
double a,
double b,
998 double *x,
double *y,
double *z);
999 static double *LabToXYZ(
const double lab[3]);
1006 static void XYZToLab(
const double xyz[3],
double lab[3]) {
1007 XYZToLab(xyz[0], xyz[1], xyz[2], lab+0, lab+1, lab+2);
1009 static void XYZToLab(
double x,
double y,
double z,
1010 double *L,
double *a,
double *b);
1011 static double *XYZToLab(
const double xyz[3]);
1018 static void XYZToRGB(
const double xyz[3],
double rgb[3]) {
1019 XYZToRGB(xyz[0], xyz[1], xyz[2], rgb+0, rgb+1, rgb+2);
1021 static void XYZToRGB(
double x,
double y,
double z,
1022 double *r,
double *g,
double *b);
1023 static double *XYZToRGB(
const double xyz[3]);
1030 static void RGBToXYZ(
const double rgb[3],
double xyz[3]) {
1031 RGBToXYZ(rgb[0], rgb[1], rgb[2], xyz+0, xyz+1, xyz+2);
1033 static void RGBToXYZ(
double r,
double g,
double b,
1034 double *x,
double *y,
double *z);
1035 static double *RGBToXYZ(
const double rgb[3]);
1045 static void RGBToLab(
const double rgb[3],
double lab[3]) {
1046 RGBToLab(rgb[0], rgb[1], rgb[2], lab+0, lab+1, lab+2);
1048 static void RGBToLab(
double red,
double green,
double blue,
1049 double *L,
double *a,
double *b);
1050 static double *RGBToLab(
const double rgb[3]);
1057 static void LabToRGB(
const double lab[3],
double rgb[3]) {
1058 LabToRGB(lab[0], lab[1], lab[2], rgb+0, rgb+1, rgb+2);
1060 static void LabToRGB(
double L,
double a,
double b,
1061 double *red,
double *green,
double *blue);
1062 static double *LabToRGB(
const double lab[3]);
1084 if ( bounds[1]-bounds[0]<0.0 )
1097 static T ClampValue(
const T &
value,
const T & min,
const T &
max);
1104 static void ClampValue(
double *
value,
const double range[2]);
1105 static void ClampValue(
double value,
const double range[2],
double *clamped_value);
1106 static void ClampValues(
1107 double *values,
int nb_values,
const double range[2]);
1108 static void ClampValues(
1109 const double *values,
int nb_values,
const double range[2],
double *clamped_values);
1118 static double ClampAndNormalizeValue(
double value,
1119 const double range[2]);
1125 template<
class T1,
class T2>
1126 static void TensorFromSymmetricTensor(T1 symmTensor[6], T2 tensor[9]);
1134 static void TensorFromSymmetricTensor(T tensor[9]);
1144 static int GetScalarTypeFittingRange(
1145 double range_min,
double range_max,
1146 double scale = 1.0,
double shift = 0.0);
1156 static int GetAdjustedScalarRange(
1163 static vtkTypeBool ExtentIsWithinOtherExtent(
int extent1[6],
int extent2[6]);
1170 static vtkTypeBool BoundsIsWithinOtherBounds(
double bounds1[6],
double bounds2[6],
double delta[3]);
1177 static vtkTypeBool PointIsWithinBounds(
double point[3],
double bounds[6],
double delta[3]);
1188 static int PlaneIntersectsAABB(
double const bounds[6],
double const normal[3],
1189 double const point[3]);
1200 static double Solve3PointCircle(
const double p1[3],
const double p2[3],
const double p3[3],
double center[3]);
1205 static double Inf();
1210 static double NegInf();
1215 static double Nan();
1230 static bool IsFinite(
double x);
1238 void operator=(
const vtkMath&) =
delete;
1244 return x * 0.017453292f;
1250 return x * 0.017453292519943295;
1256 return x * 57.2957795131f;
1262 return x * 57.29577951308232;
1268 return ((x != 0) & ((x & (x - 1)) == 0));
1275 unsigned int z = ((x > 0) ? x - 1 : 0);
1281 return static_cast<int>(z + 1);
1289 int i = static_cast<int>(x);
1290 return i - ( i > x );
1298 int i = static_cast<int>(x);
1299 return i + ( i < x );
1306 return (a < b ? a : b);
1313 return (a > b ? a : b);
1322 for (
int i=0; i < 3; i++)
1336 for (
int i=0; i < 3; i++)
1350 for (
int i=0; i < 2; i++)
1364 for (
int i=0; i < 2; i++)
1377 return c1[0] * c2[1] * c3[2] + c2[0] * c3[1] * c1[2] + c3[0] * c1[1] * c2[2] -
1378 c1[0] * c3[1] * c2[2] - c2[0] * c1[1] * c3[2] - c3[0] * c2[1] * c1[2];
1386 return c1[0] * c2[1] * c3[2] + c2[0] * c3[1] * c1[2] + c3[0] * c1[1] * c2[2] -
1387 c1[0] * c3[1] * c2[2] - c2[0] * c1[1] * c3[2] - c3[0] * c2[1] * c1[2];
1392 double b1,
double b2,
double b3,
1393 double c1,
double c2,
double c3)
1404 return ( ( p1[0] - p2[0] ) * ( p1[0] - p2[0] )
1405 + ( p1[1] - p2[1] ) * ( p1[1] - p2[1] )
1406 + ( p1[2] - p2[2] ) * ( p1[2] - p2[2] ) );
1413 return ( ( p1[0] - p2[0] ) * ( p1[0] - p2[0] )
1414 + ( p1[1] - p2[1] ) * ( p1[1] - p2[1] )
1415 + ( p1[2] - p2[2] ) * ( p1[2] - p2[2] ) );
1422 float Cx = a[1] * b[2] - a[2] * b[1];
1423 float Cy = a[2] * b[0] - a[0] * b[2];
1424 float Cz = a[0] * b[1] - a[1] * b[0];
1425 c[0] = Cx; c[1] = Cy; c[2] = Cz;
1432 double Cx = a[1] * b[2] - a[2] * b[1];
1433 double Cy = a[2] * b[0] - a[0] * b[2];
1434 double Cz = a[0] * b[1] - a[1] * b[0];
1435 c[0] = Cx; c[1] = Cy; c[2] = Cz;
1442 return A[0][0] * A[1][1] * A[2][2] + A[1][0] * A[2][1] * A[0][2] +
1443 A[2][0] * A[0][1] * A[1][2] - A[0][0] * A[2][1] * A[1][2] -
1444 A[1][0] * A[0][1] * A[2][2] - A[2][0] * A[1][1] * A[0][2];
1463 assert(
"pre: valid_range" && min<=
max);
1483 assert(
"pre: valid_range" &&
range[0]<=
range[1]);
1498 double value,
const double range[2],
double *clamped_value)
1500 if (
range && clamped_value)
1502 assert(
"pre: valid_range" &&
range[0]<=
range[1]);
1506 *clamped_value =
range[0];
1510 *clamped_value =
range[1];
1514 *clamped_value =
value;
1521 const double range[2])
1523 assert(
"pre: valid_range" &&
range[0]<=
range[1]);
1553 assert(
"post: valid_result" && result>=0.0 && result<=1.0);
1559 template<
class T1,
class T2>
1562 for (
int i = 0; i < 3; i++)
1564 tensor[4*i] = symmTensor[i];
1566 tensor[1] = tensor[3] = symmTensor[3];
1567 tensor[2] = tensor[6] = symmTensor[5];
1568 tensor[5] = tensor[7] = symmTensor[4];
1575 tensor[6] = tensor[5];
1576 tensor[7] = tensor[4];
1577 tensor[8] = tensor[2];
1578 tensor[4] = tensor[1];
1579 tensor[5] = tensor[7];
1580 tensor[2] = tensor[6];
1581 tensor[1] = tensor[3];
1587 template <
typename OutT>
1592 *ret = static_cast<OutT>((val >= 0.0) ? (val + 0.5) : (val - 0.5));
1604 *retVal = static_cast<float>(val);
1609 #if defined(VTK_HAS_ISINF) || defined(VTK_HAS_STD_ISINF) 1610 #define VTK_MATH_ISINF_IS_INLINE 1613 #if defined(VTK_HAS_STD_ISINF) 1614 return std::isinf(x);
1616 return (isinf(x) != 0);
1622 #if defined(VTK_HAS_ISNAN) || defined(VTK_HAS_STD_ISNAN) 1623 #define VTK_MATH_ISNAN_IS_INLINE 1626 #if defined(VTK_HAS_STD_ISNAN) 1629 return (
isnan(x) != 0);
1635 #if defined(VTK_HAS_ISFINITE) || defined(VTK_HAS_STD_ISFINITE) || defined(VTK_HAS_FINITE) 1636 #define VTK_MATH_ISFINITE_IS_INLINE 1639 #if defined(VTK_HAS_STD_ISFINITE) 1640 return std::isfinite(x);
1641 #elif defined(VTK_HAS_ISFINITE) 1642 return (isfinite(x) != 0);
1644 return (finite(x) != 0);
static void MultiplyScalar2D(float a[2], float s)
Multiplies a 2-vector by a scalar (float version).
static float Dot2D(const float x[2], const float y[2])
Dot product of two 2-vectors.
static float Dot(const float a[3], const float b[3])
Dot product of two 3-vectors (float version).
abstract base class for most VTK objects
static void LabToXYZ(const double lab[3], double xyz[3])
Convert color from the CIE-L*ab system to CIE XYZ.
static double Pi()
A mathematical constant.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
static bool IsPowerOfTwo(vtkTypeUInt64 x)
Returns true if integer is a power of two.
void RoundDoubleToIntegralIfNecessary(double val, OutT *ret)
static float Determinant2x2(const float c1[2], const float c2[2])
Compute determinant of 2x2 matrix.
static vtkSmartPointer< vtkMathInternal > Internal
#define VTKCOMMONCORE_EXPORT
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 int Round(float f)
Rounds a float to the nearest integer.
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 double ClampAndNormalizeValue(double value, const double range[2])
Clamp a value against a range and then normalize it between 0 and 1.
static float Normalize2D(float v[2])
Normalize (in place) a 2-vector.
static void Add(const double a[3], const double b[3], double c[3])
Addition of two 3-vectors (double version).
static double Dot(const double a[3], const double b[3])
Dot product of two 3-vectors (double-precision version).
static void XYZToRGB(const double xyz[3], double rgb[3])
Convert color from the CIE XYZ system to RGB.
static float Norm2D(const float x[2])
Compute the norm of a 2-vector.
static void UninitializeBounds(double bounds[6])
Set the bounds to an uninitialized state.
static int NearestPowerOfTwo(int x)
Compute the nearest power of two that is not less than x.
static void RGBToXYZ(const double rgb[3], double xyz[3])
Convert color from the RGB system to CIE XYZ.
static T Min(const T &a, const T &b)
Returns the minimum of the two arguments provided.
a simple class to control print indentation
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).
static int Floor(double x)
Rounds a double to the nearest integer not greater than itself.
static vtkTypeBool IsInf(double x)
Test if a number is equal to the special floating point value infinity.
abstract superclass for arrays of numeric data
static double Determinant2x2(double a, double b, double c, double d)
Calculate the determinant of a 2x2 matrix: | a b | | c d |.
static float RadiansFromDegrees(float degrees)
Convert degrees into radians.
static void HSVToRGB(const double hsv[3], double rgb[3])
Convert color in HSV format (Hue, Saturation, Value) to RGB format (Red, Green, Blue).
Park and Miller Sequence of pseudo random numbers.
static void MultiplyScalar(double a[3], double s)
Multiplies a 3-vector by a scalar (double version).
static double Determinant3x3(float A[3][3])
Return the determinant of a 3x3 matrix.
static void RGBToLab(const double rgb[3], double lab[3])
Convert color from the RGB system to CIE-L*ab.
static float DegreesFromRadians(float radians)
Convert radians into degrees.
static float Normalize(float v[3])
Normalize (in place) a 3-vector.
static void Outer2D(const double x[2], const double y[2], double A[2][2])
Outer product of two 2-vectors (float version).
static void Outer2D(const float x[2], const float y[2], float A[2][2])
Outer product of two 2-vectors (float version).
static int Ceil(double x)
Rounds a double to the nearest integer not less than itself.
performs common math operations
static bool IsFinite(double x)
Test if a number has finite value i.e.
static double Dot2D(const double x[2], const double y[2])
Dot product of two 2-vectors.
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 float Norm(const float v[3])
Compute the norm of 3-vector.
static void MultiplyScalar(float a[3], float s)
Multiplies a 3-vector by a scalar (float version).
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 Outer(const double a[3], const double b[3], double C[3][3])
Outer product of two 3-vectors (double-precision version).
static T ClampValue(const T &value, const T &min, const T &max)
Clamp some value against a range, return the result.
static void TensorFromSymmetricTensor(T1 symmTensor[6], T2 tensor[9])
Convert a 6-Component symmetric tensor into a 9-Component tensor, no allocation performed.
static double Norm2D(const double x[2])
Compute the norm of a 2-vector.
static void Outer(const float a[3], const float b[3], float C[3][3])
Outer product of two 3-vectors (float version).
static int Round(double f)
static double Norm(const double v[3])
Compute the norm of 3-vector (double-precision version).
static void MultiplyScalar2D(double a[2], double s)
Multiplies a 2-vector by a scalar (double version).
static float Distance2BetweenPoints(const float p1[3], const float p2[3])
Compute distance squared between two points p1 and p2.
static void LabToRGB(const double lab[3], double rgb[3])
Convert color from the CIE-L*ab system to RGB.
static vtkTypeBool IsNan(double x)
Test if a number is equal to the special floating point value Not-A-Number (Nan).
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on.
double vtkDeterminant3x3(T A[3][3])
static float Norm(const float *x, int n)
Compute the norm of n-vector.
static void Cross(const float a[3], const float b[3], float c[3])
Cross product of two 3-vectors.
Gaussian sequence of pseudo random numbers implemented with the Box-Mueller transform.
static double Determinant2x2(const double c1[2], const double c2[2])
Calculate the determinant of a 2x2 matrix: | a b | | c d |.
static void Add(const float a[3], const float b[3], float c[3])
Addition of two 3-vectors (float version).
Template defining traits of native types used by VTK.
static vtkTypeBool AreBoundsInitialized(const double bounds[6])
Are the bounds initialized?
represent and manipulate 3D points
static T Max(const T &a, const T &b)
Returns the maximum of the two arugments provided.
static void XYZToLab(const double xyz[3], double lab[3])
Convert Color from the CIE XYZ system to CIE-L*ab.