4x4矩阵分解算法

时间:2012-09-25 20:45:13

标签: c# algorithm matrix game-engine

我正在开展一个非常大的项目,我正在尝试重新审视并解决我已经存在很长一段时间的问题: 4x4矩阵分解算法

我正在写一个商业游戏&模拟引擎。它是一个完全用C#编写的API和平台无关的引擎。它使用SlimDX作为其DirectX后端,我可能会坚持使用OpenTK作为OpenGL后端。由于我不能依赖DirectX或OpenGL的数学库或数据类型(例如,Vector2,Vector3,Quaternion,Matrix等),我不得不为引擎编写自己的类型。我已经把所有东西都完成了并且非常优化; API在语义上与XNA类似,因为我(和许多其他人)喜欢XNA的“感觉”,觉得它非常优雅和强大。但不要混淆;这个项目不使用,与XNA无关。无论如何,我能够处理除了一件事之外的一切...... Matrix.Decompose !!!

问题是,我根本不知道我在做什么...我是一名自学成才的程序员,几乎在其他任何事情上都是自学成才(商业金融,日间交易,德语等)。这就是我学习的方式。我只有一年零一个学期,所以我没有正规的复杂数学教育。因此,当我继续维基百科并查看矩阵分解的公式时,它对我来说都是希腊语......一堆有趣的符号和图表对我来说毫无意义。我一直是一个可怜的数学学生,因为如果我不能将它实际应用于某些东西(比如游戏编程),数学就会让我失望。例如,我可以写一个复杂的弹道物理模拟,但甚至无法用她的基本物理和微积分作业帮助我的女朋友,因为它是一堆“高级”理论数学,我无法弥合实用性或编程的差距。所以我很失落,不知道我在做什么,非常沮丧......

具体来说,我需要做的是反映XNA Framework和DirectX中的Matrix.Decompose的功能。我试图在SlimDX的源代码和OpenTK的源代码中寻找实现,但它都没有实现! SlimDX只是将工作推迟到本机DirectX库,而OpenTK甚至没有它。由于这个算法是一个巨大的,非常复杂的野兽,我并不感到惊讶,开发团队也不想实现自己的。但我不得不。

我已经尝试将维基百科和其他网站上的那些笨拙的公式变成一个有效的C#算法但我无法做出正面或反面。我真的需要在C,C ++或C#中看到它的工作实现,或者有人帮我用伪代码或其他东西来理解它。我只是无法掌握这些公式和“高级”数学理论。如果您可以做任何事情来帮助(链接,工作实现,一些伪代码等),我们将不胜感激。

2 个答案:

答案 0 :(得分:0)

查看DotNetMatrix这是一个C#库,用于执行所有类型的矩阵转换,包括Cholesky Decomposition,这是我认为您正在寻找的。此外,还包括免费和源代码!

答案 1 :(得分:-1)

您最好的选择是使用现有的矩阵库。例如,查看ILNumerics。它支持许多常见的矩阵分解(没有一个'矩阵分解'):http://ilnumerics.net/$FeatureList.html

这是一个商业许可证,但因为你在销售引擎,也许这对你来说不是问题。

免费的是Math.NET,但是'分解&最小二乘问题部分是空的,这让我相信他们还没有实现它。