在C#,类或结构中实现矩阵(线性代数)的更好方法是什么?

时间:2019-07-05 16:27:55

标签: c# performance class matrix struct

只是为了好玩,我正在C#.NET核心上从头实现我自己的Ray Tracer,其中包括矢量,矩阵和其他Liner代数工件。

问题:对于矩阵,应该考虑到将用于Ray Tracer(我只需要2x2、3x3和4x4矩阵)的矩阵,哪种方法才是正确的实现方法? ?

  1. Matrix类,您可以在构造函数上定义其大小。这意味着没有代码重复,但是所有内容都将存储在堆中,这意味着将频繁调用垃圾收集器。
  2. 几种结构,可以满足我所需的不同自定义大小,例如Matrix2x2,Matrix3x3,Matrix4x4? C#中的结构没有继承支持,因此需要在所有结构之间复制很多代码。从正面来看,这些矩阵将存储在堆栈中。
  3. 混合方法,遵循(2)并保留所有方法签名,但是使用具有所有逻辑来操作这些结构的辅助静态类,而不是在其中保留逻辑。从用户的角度来看,您不需要与此类进行交互,但是我不知道这是否会过大。
  

注意:我不想为此使用库,这就是   “从头开始”:)

我正在探索其他在C#上创建的库,以及Unity等游戏引擎作为参考。这些库通常使用大量重复的代码创建多个结构。我假设这是可以接受的,因为这些结构不应经常修改。我更愿意这样做(2),但我想检查一下您对方法(3)的看法

对于结构,我不能使用数组,因此我需要显式创建N x N变量来保存矩阵的值。使方法(3)可行的好处是对C#索引器的支持(索引器允许对诸如数组之类的对象进行索引。为类定义索引器时,该类的行为类似于虚拟数组),因此从助手类的角度来看,它们看起来像是数组,使得可以执行任何大小(2x2、3x3和4x4)的逻辑

在这里,我将不胜感激。

致谢。

0 个答案:

没有答案