gpt4 book ai didi

c# - 为什么 System.Numerics 命名空间中没有 Matrix3x3? C#

转载 作者:行者123 更新时间:2023-12-03 19:24:33 26 4
gpt4 key购买 nike

我正在尝试用 c# 制作一个小 GUI 库,但是在对矩阵转换进行了一些研究之后,我发现我需要一个 Matrix3x3 来存储 Vector2 的旋转、缩放和平移。但是在 C# System.Numerics 中只有 Matrix3x2 或 Matrix4x4?我可以使用其中之一吗?如果是这样,我将如何处理?为什么标准库中没有 Matrix3x3?

我对矩阵和向量编程很陌生,如果这是一个愚蠢的问题,我很抱歉。

提前致谢。

最佳答案

您可以使用 Matrix4x4 .从一个单位矩阵开始,用你的矩阵填充左上角的 3×3 元素。

例如求解一个 3×3 方程组:

// Find the barycentric coordinates
//
// Solve for (wA,wB,wC):
// | px | | ax bx cx | | wA |
// | py | = | ay by cy | | wB |
// | pz | | az bz cz | | wC |

var m = new Matrix4x4(
A.X, B.X, C.X, 0,
A.Y, B.Y, C.Y, 0,
A.Z, B.Z, C.Z, 0,
0, 0, 0, 1);

if (Matrix4x4.Invert(m, out Matrix4x4 u))
{
var w = new Vector3(
u.M11*P.X + u.M12*P.Y + u.M13*P.Z,
u.M21*P.X + u.M22*P.Y + u.M23*P.Z,
u.M31*P.X + u.M32*P.Y + u.M33*P.Z);

// ...
}

至于原因, System.Numerics的原意必须与计算机图形相关,因为它使用 Homogeneous Coordinates其中 3D 向量包含 4 个元素。三个常规坐标和一个标量权重因子。计算机图形的齐次坐标数学得到了极大的简化。唯一的原因是 Vector3是因为 Vector4应该被视为 3 个元素加上一个标量的向量,因此 Vector3应用于齐次坐标的合成和分解。这意味着并非所有 4 个元素都可以同等对待,有时您需要将向量(前三个元素)与标量值(第四个元素)分开处理。

还有 System.Numerics使用单精度 float元素,它们几乎从未用于科学计算,但因其速度而普遍应用于计算机图形。希望有一天 CLR支持 AVX512将有科学家可以实际使用的 double 数字内在函数。

关于c# - 为什么 System.Numerics 命名空间中没有 Matrix3x3? C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57921365/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com