我正在做一个非常大的项目,我试图重新审视和解决一个我已经有很长一段时间的问题:4x4矩阵分解算法。
我在写一个商业游戏和模拟引擎。它是一个api和平台无关的引擎,完全用c编写。它使用slimdx作为其directx后端,我可能会坚持使用opentk作为opengl后端。因为我不能依赖DirectX或OpenGL的数学库或数据类型(如Vector2、Vector3、四元数、矩阵等),所以我必须为引擎编写自己的类型我已经完成了所有的工作并进行了很好的优化;而且api在语义上与xna类似,因为我(和其他许多人)喜欢xna的“感觉”,觉得它非常优雅和强大。但是不要混淆;这个项目不使用,也与xna无关。不管怎样,除了一件事我什么都能处理…矩阵。分解!!!
问题是,我根本不知道我在做什么…我是一个自学成才的程序员,几乎在其他方面都自学成才(商业金融、日交易、德语等)。我就是这样学的我只上了一年零一个学期的大学,所以我没有接受过复杂数学的正规教育所以当我在维基百科上看到矩阵分解的公式时,对我来说都是希腊语……一堆有趣的符号和图表,对我来说毫无意义。哈哈。我一直是个数学差的学生,因为如果我不能把数学实际应用到某些东西上(比如游戏编程),数学就会让我逃之夭夭。例如,我可以写一个复杂的弹道物理模拟,但甚至不能帮助我女朋友完成她的基础物理和微积分作业lol,因为这是一堆“高水平”的理论数学,我无法弥合与实用性或编程之间的差距。所以我很迷茫,不知道自己在做什么,非常沮丧…
具体来说,我需要做的是镜像matrix.decompose在xna框架和directx中的功能。我试图在slimdx的源代码和opentk的源代码中寻找实现,但都没有实现!slimdx只是将工作推迟到本机directx库,而opentk甚至没有它。由于这个算法是一个巨大的,极其复杂的野兽,我并不惊讶于开发团队都不想实现自己的算法但我必须这么做。
我试过把维基百科和其他网站上那些古怪的公式变成一个有效的C算法,但我就是搞不清楚。我真的需要在C、C++或C语言中看到它的一个工作实现,或者有人帮助我用伪代码或其他东西来理解它。我只是不能掌握这些公式和“高级”数学理论。如果有什么可以帮忙的(一个链接、一个工作的实现、一些伪代码等等),我们将非常感激。
最佳答案
查看DotNetMatrix这是一个c库,用于执行所有类型的矩阵转换,包括Cholesky Decomposition,这是我相信您正在寻找的。此外,它的免费和源代码也包括在内!