在C#中存储矩阵值的快速而有用的方法

时间:2012-10-23 16:50:56

标签: c# performance math matrix usability

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

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矩阵的最快方法是什么? 在考虑可用性时,您会选择哪个选项?

3 个答案:

答案 0 :(得分:3)

您可以使用二维数组:

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

这与锯齿状阵列不同:

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

下面的二维数组存储为一个大的一维数组。该类简单地将它抽象出来并提供提供两个(或更多)维度的访问器。因为它在后端存储为一维数组,所以你将保持缓存/内存的本地化。

答案 1 :(得分:3)

为什么不查看这篇CodeProject.com文章Efficient Matrix Programming in C#

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

答案 2 :(得分:1)

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

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