【发布时间】:2012-10-13 16:21:14
【问题描述】:
我需要在 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 矩阵的最快方法是什么? 在考虑可用性时,您会选择哪个选项?
【问题讨论】:
-
C# 有multidimensional arrays,所以你可以使用
float[4,4]。我的疯狂猜测是它的性能与一维的一样好。两者的性能都可能比 16 个变量差,因为数组是在堆上分配的。 -
@millimoose 性能好还是坏取决于它的使用情况。如果它被传递了很多,在堆上进行一次分配可能比连续传递 16 个变量要好得多。
-
@Servy 你说得对,我应该说“访问两者可能会更慢”。
-
考虑到这一点,我可能只会对矩阵本身执行操作,例如在矩阵类中实现的方法将用于操作存储的浮点数。我认为它们会被传递而不是被操纵,所以我会以这种方式保留 16 个浮点变量。
标签: c# performance math matrix usability