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