OpenVDB
1.1.0
|
#include <math.h>
#include <cstdlib>
#include <cstdio>
#include <assert.h>
#include <iostream>
#include <sstream>
#include <boost/format.hpp>
#include <openvdb/Exceptions.h>
#include "Math.h"
Go to the source code of this file.
Classes | |
class | Mat< SIZE, T > |
Namespaces | |
namespace | openvdb |
namespace | openvdb::v1_1_0 |
namespace | openvdb::v1_1_0::math |
Functions | |
template<class MatType > | |
MatType | rotation (const Quat< typename MatType::value_type > &q, typename MatType::value_type eps=1.0e-8) |
template<class MatType > | |
MatType | rotation (Axis axis, typename MatType::value_type angle) |
Set the matrix to a rotation about the given axis. | |
template<class MatType > | |
MatType | rotation (const Vec3< typename MatType::value_type > &_axis, typename MatType::value_type angle) |
template<class MatType > | |
Vec3< typename MatType::value_type > | eulerAngles (const MatType &mat, RotationOrder rotationOrder, typename MatType::value_type eps=1.0e-8) |
template<class MatType > | |
MatType | rotation (const Vec3< typename MatType::value_type > &_v1, const Vec3< typename MatType::value_type > &_v2, typename MatType::value_type eps=1.0e-8) |
Set the matrix to a rotation that maps v1 onto v2 about the cross product of v1 and v2. | |
template<class MatType > | |
MatType | scale (const Vec3< typename MatType::value_type > &scaling) |
template<class MatType > | |
Vec3< typename MatType::value_type > | getScale (const MatType &mat) |
template<class MatType > | |
MatType | unit (const MatType &mat, typename MatType::value_type eps=1.0e-8) |
template<class MatType > | |
MatType | unit (const MatType &in, typename MatType::value_type eps, Vec3< typename MatType::value_type > &scaling) |
template<class MatType > | |
MatType | shear (Axis axis0, Axis axis1, typename MatType::value_type shear) |
Set the matrix to a shear along axis0 by a fraction of axis1. | |
template<class MatType > | |
MatType | skew (const Vec3< typename MatType::value_type > &skew) |
template<class MatType > | |
MatType | aim (const Vec3< typename MatType::value_type > &direction, const Vec3< typename MatType::value_type > &vertical) |
template<class MatType > | |
static MatType & | padMat4 (MatType &dest) |
template<typename MatType > | |
void | sqrtSolve (const MatType &aA, MatType &aB, double aTol=0.01) |
template<typename MatType > | |
void | powSolve (const MatType &aA, MatType &aB, double aPower, double aTol=0.01) |
template<typename MatType > | |
bool | isIdentity (const MatType &m) |
template<typename MatType > | |
bool | isInvertible (const MatType &m) |
template<typename MatType > | |
bool | isSymmetric (const MatType &m) |
template<typename MatType > | |
bool | isUnitary (const MatType &m) |
Determine is a matrix is Unitary (i.e. rotation or reflection) | |
template<typename MatType > | |
bool | isDiagonal (const MatType &mat) |
Determine if a matrix is diagonal. | |
template<typename MatType > | |
MatType::ValueType | lInfinityNorm (const MatType &matrix) |
takes a n by n matrix and returns the L_Infinty norm | |
template<typename MatType > | |
MatType::ValueType | lOneNorm (const MatType &matrix) |
takes an n by n matrix and returns the L_1 norm | |
template<typename MatType > | |
bool | polarDecomposition (const MatType &input, MatType &unitary, MatType &positive_hermitian, unsigned int MAX_ITERATIONS=100) |
Decompose an invertible 3x3 matrix into Unitary following a symmetric matrix (postitive semi-defininte Hermitian): i.e. M = U * S if the Unitary.det() = 1 it is a rotation, otherwise Unitary.det() = -1, meaning there is some part reflection. See "Computing the polar decomposition with applications" Higham, N.J. - SIAM J. Sc. Stat Comput 7(4):1160-1174. |