3

我需要在 C# 中为 3D 引擎创建一个 4x4 矩阵类。我已经看到其他一些引擎将矩阵值存储在单个浮点成员变量/字段中,如下所示:

float m11, m12, m13, m14
float m21, m22, m23, m24
float m31, m32, m33, m34
float m41, m42, m43, m44

但是,我认为将它们存储在二维数组中对于使用矩阵进行转换/计算会更有用:

float[4][4];

我还想到了一个一维数组 - 但它看起来不太自我解释,并且不会给我比第一个选项更有优势:

float[16];

在 C++ 中,我总是使用“union”关键字来同时存储上述所有可能性。但是,C# 似乎没有这个关键字,所以我必须决定要使用哪一个。

应用转换等时存储 4x4 矩阵的最快方法是什么?在考虑可用性时,您会选择哪个选项?

4

3 回答 3

3

您可以使用二维数组:

float[,] matrix = new float[4,4];

这与锯齿状数组不同:

float[][] matrix = new float[][4];

一个二维数组在下面存储为一个大的一维数组。该类只是将它从您那里抽象出来,并提供提供两个(或更多)维度的访问器。因为它在后端存储为一维数组,所以您将保持缓存/内存局部性。

于 2012-10-23T16:54:05.137 回答
3

为什么不看看这篇CodeProject.com文章,C# 中的高效矩阵编程

您还可以查看Declaring an Array (Visual C#)Matrix ,了解用于定义自己的数据结构的各种选项。

于 2012-10-23T16:56:04.057 回答
1

最快的方法是使用指针和unsafe关键字。但是,正如关键字所示,这是不安全的。

有关 C# 中指针的更多信息,请查看.

于 2012-10-23T16:54:40.827 回答