本文整理汇总了C++中SbMatrix::LUDecomposition方法的典型用法代码示例。如果您正苦于以下问题:C++ SbMatrix::LUDecomposition方法的具体用法?C++ SbMatrix::LUDecomposition怎么用?C++ SbMatrix::LUDecomposition使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SbMatrix
的用法示例。
在下文中一共展示了SbMatrix::LUDecomposition方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: identity
SbMatrix
SbMatrix::inverse() const
{
// Trivial case
if (IS_IDENTITY(matrix))
return SbMatrix::identity();
// Affine case...
SbMatrix affineAnswer;
if ( affine_inverse( SbMatrix(matrix), affineAnswer ) )
return affineAnswer;
int index[4];
float d, invmat[4][4], temp;
SbMatrix inverse = *this;
#ifdef DEBUGGING
int i, j;
#endif /* DEBUGGING */
if(inverse.LUDecomposition(index, d)) {
#ifdef DEBUGGING
for(j = 0; j < 4; j++) {
for(i = 0; i < 4; i++)
invmat[j][i] = 0.0;
invmat[j][j] = 1.0;
inverse.LUBackSubstitution(index, invmat[j]);
}
#else
invmat[0][0] = 1.0;
invmat[0][1] = 0.0;
invmat[0][2] = 0.0;
invmat[0][3] = 0.0;
inverse.LUBackSubstitution(index, invmat[0]);
invmat[1][0] = 0.0;
invmat[1][1] = 1.0;
invmat[1][2] = 0.0;
invmat[1][3] = 0.0;
inverse.LUBackSubstitution(index, invmat[1]);
invmat[2][0] = 0.0;
invmat[2][1] = 0.0;
invmat[2][2] = 1.0;
invmat[2][3] = 0.0;
inverse.LUBackSubstitution(index, invmat[2]);
invmat[3][0] = 0.0;
invmat[3][1] = 0.0;
invmat[3][2] = 0.0;
invmat[3][3] = 1.0;
inverse.LUBackSubstitution(index, invmat[3]);
#endif /* DEBUGGING */
#ifdef DEBUGGING
// transpose invmat
for(j = 0; j < 4; j++) {
for(i = 0; i < j; i++) {
temp = invmat[i][j];
invmat[i][j] = invmat[j][i];
invmat[j][i] = temp;
}
}
#else
#define SWAP(i,j) \
temp = invmat[i][j]; \
invmat[i][j] = invmat[j][i]; \
invmat[j][i] = temp;
SWAP(1,0);
SWAP(2,0);
SWAP(2,1);
SWAP(3,0);
SWAP(3,1);
SWAP(3,2);
#undef SWAP
#endif /* DEBUGGING */
#ifdef _MSC_VER
inverse.setValue((const SbMat &)invmat);
#else
inverse.setValue(invmat);
#endif
}
return inverse;
}