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