您可以使用Matrix4x4。从单位矩阵开始,用矩阵填充左上角的 3\xc3\x973 元素。
例如求解 3\xc3\x973 方程组:
\n\n// Find the barycentric coordinates\n//\n// Solve for (wA,wB,wC):\n// | px |   | ax bx cx | | wA |\n// | py | = | ay by cy | | wB |\n// | pz |   | az bz cz | | wC |\n\nvar m = new Matrix4x4(\n    A.X, B.X, C.X, 0,\n    A.Y, B.Y, C.Y, 0,\n    A.Z, B.Z, C.Z, 0,\n    0, 0, 0, 1);\n\nif (Matrix4x4.Invert(m, out Matrix4x4 u))\n{\n    var w = new Vector3(\n        u.M11*P.X + u.M12*P.Y + u.M13*P.Z,\n        u.M21*P.X + u.M22*P.Y + u.M23*P.Z,\n        u.M31*P.X + u.M32*P.Y + u.M33*P.Z);\n\n    // ...\n}\n至于原因, 的意图System.Numerics必须与计算机图形学有关,因为它使用齐次坐标,其中 3D 向量包含 4 个元素。三个常规坐标和一个标量权重因子。计算机图形学的齐次坐标数学得到了极大的简化。存在 a 的唯一原因Vector3是 aVector4应该被视为 3 个元素加一个标量的向量,因此Vector3应该用于齐次坐标的合成和分解。这意味着并非所有 4 个元素都可以被同等对待,有时您需要将向量(前三个元素)与标量值(第四个元素)分开处理。
还System.Numerics使用单精度float元素,这些元素几乎从未用于科学计算,但因其速度而普遍应用于计算机图形学。希望有一天,当得到CLR支持时AVX512,将出现科学家可以实际使用的双精度数字内在函数。
| 归档时间: | 
 | 
| 查看次数: | 2597 次 | 
| 最近记录: |