本文整理汇总了C#中Matrix3.trace方法的典型用法代码示例。如果您正苦于以下问题:C# Matrix3.trace方法的具体用法?C# Matrix3.trace怎么用?C# Matrix3.trace使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Matrix3
的用法示例。
在下文中一共展示了Matrix3.trace方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: getEigenvalues
// Reference : Oliver K. Smith: Eigenvalues of a symmetric 3 × 3 matrix. Commun. ACM 4(4): 168 (1961)
// find the eigenvalues of a 3x3 symmetric matrix
//NOTE: I'm doing some post-processing on them to turn them into singular values
Vector3 getEigenvalues(Matrix3 mat) {
var m = (mat.trace()) / 3;
var K = mat - (Matrix3.I()*m); // K = mat - I*tr(mat)
var q = K.determinant() / 2;
var tempForm = K*K;
var p = tempForm.sumCells() / 6;
// NB in Smith's paper he uses phi = (1/3)*arctan(sqrt(p*p*p - q*q)/q), which is equivalent to below:
var phi = (1/3)*Mathf.Acos(q/Mathf.Sqrt(p*p*p));
if (Mathf.Abs(q) >= Mathf.Abs(Mathf.Sqrt(p*p*p))) {
phi = 0;
}
if (phi < 0) {
phi = phi + Mathf.PI/3;
}
var eig1 = m + 2*Mathf.Sqrt(p)*Mathf.Cos(phi);
var eig2 = m - Mathf.Sqrt(p)*(Mathf.Cos(phi) + Mathf.Sqrt(3)*Mathf.Sin(phi));
var eig3 = m - Mathf.Sqrt(p)*(Mathf.Cos(phi) - Mathf.Sqrt(3)*Mathf.Sin(phi));
// return a singular values vector
return new Vector3(Mathf.Sqrt(Mathf.Abs(eig1)),
Mathf.Sqrt(Mathf.Abs(eig2)),
Mathf.Sqrt(Mathf.Abs(eig3)));
}