本文整理汇总了C++中Matrix3x3::setIdentity方法的典型用法代码示例。如果您正苦于以下问题:C++ Matrix3x3::setIdentity方法的具体用法?C++ Matrix3x3::setIdentity怎么用?C++ Matrix3x3::setIdentity使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Matrix3x3
的用法示例。
在下文中一共展示了Matrix3x3::setIdentity方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Rx
void Rx(Matrix3x3 &out, double theta)
{
out.setIdentity();
double s = sin(theta);
double c = cos(theta);
out(1,1) = c; out(1,2) = -s;
out(2,1) = s; out(2,2) = c;
}
示例2: eig3_noniter
/**
* \brief Fast non-iterative 3x3 eigenvalue decomposition
*
* Based on "Geometric Tools" by David Eberly.
*/
void eig3_noniter(Matrix3x3 &A, Float lambda[3]) {
// Compute the eigenvalues using double-precision arithmetic.
double root[3];
eig3_evals(A, root);
lambda[0] = (Float) root[0];
lambda[1] = (Float) root[1];
lambda[2] = (Float) root[2];
Matrix3x3 eigs;
Float maxEntry[3];
Vector maxRow[3];
for (int i = 0; i < 3; ++i) {
Matrix3x3 M(A);
M(0, 0) -= lambda[i];
M(1, 1) -= lambda[i];
M(2, 2) -= lambda[i];
if (!eig3_rank(M, maxEntry[i], maxRow[i])) {
A.setIdentity();
return;
}
}
Float totalMax = maxEntry[0];
int i = 0;
if (maxEntry[1] > totalMax) {
totalMax = maxEntry[1];
i = 1;
} if (maxEntry[2] > totalMax) {
i = 2;
}
if (i == 0) {
maxRow[0] = normalize(maxRow[0]);
eig3_evecs(A, lambda, maxRow[0], 1, 2, 0);
} else if (i == 1) {
maxRow[1] = normalize(maxRow[1]);
eig3_evecs(A, lambda, maxRow[1], 2, 0, 1);
} else {
maxRow[2] = normalize(maxRow[2]);
eig3_evecs(A, lambda, maxRow[2], 0, 1, 2);
}
}