Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 4x4矩阵分解算法_C#_Algorithm_Matrix_Game Engine - Fatal编程技术网

C# 4x4矩阵分解算法

C# 4x4矩阵分解算法,c#,algorithm,matrix,game-engine,C#,Algorithm,Matrix,Game Engine,我正在做一个非常大的项目,我试图重新审视并解决一个我已经有很长时间的问题:一个4x4矩阵分解算法 我正在写一个商业游戏和模拟引擎。它是一个完全用C语言编写的API和平台无关引擎。它使用SlimDX作为DirectX后端,我可能会坚持使用OpenTK作为OpenGL后端。由于我不能依赖DirectX或OpenGL的数学库或数据类型(如Vector2、Vector3、四元数、矩阵等),因此我必须为引擎编写自己的类型。我已经完成了所有的工作,并进行了很好的优化;API在语义上与XNA相似,因为我(和其

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

我正在写一个商业游戏和模拟引擎。它是一个完全用C语言编写的API和平台无关引擎。它使用SlimDX作为DirectX后端,我可能会坚持使用OpenTK作为OpenGL后端。由于我不能依赖DirectX或OpenGL的数学库或数据类型(如Vector2、Vector3、四元数、矩阵等),因此我必须为引擎编写自己的类型。我已经完成了所有的工作,并进行了很好的优化;API在语义上与XNA相似,因为我(和其他许多人)喜欢XNA的“感觉”,觉得它非常优雅和强大。但不要困惑;该项目不使用XNA,也与XNA无关。不管怎样,除了一件事,我什么都能处理。。。矩阵。分解

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

具体来说,我需要做的是镜像Matrix.Decompose在XNA框架和DirectX中的功能。我试图在SlimDX的源代码和OpenTK的源代码中寻找实现,但都没有实现!SlimDX只是将工作推迟到本机DirectX库,而OpenTK根本没有。由于这个算法是一个庞大而复杂的庞然大物,所以我并不奇怪两个开发团队都不想实现自己的算法。但我必须这么做


我试着把维基百科和其他网站上那些古怪的公式转换成一个有效的C#算法,但我就是不知道它的头绪。我真的需要在C、C++或C语言中看到它的工作实现,或者有人用伪代码或其他东西帮助我理解这个。我就是不能掌握这些公式和“高级”数学理论。如果您能提供任何帮助(链接、工作实现、一些伪代码等),我们将不胜感激。

您最好使用现有的矩阵库。例如,查看ILNumerics。它支持许多常见的矩阵分解(没有一种“矩阵分解”):

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


免费的,但是“分解和最小二乘问题”部分是空的,这让我相信他们还没有实现它。

看看这是一个C#库,用于执行所有类型的矩阵变换,包括,我相信您正在寻找的。此外,它的免费源代码也包括在内

您是否尝试过用类似ILSpy的东西反编译XNA实现?它可能会给你一些见解。或者-你可以使用XNA的类。如果有人已经知道怎么做,为什么还要重新发明轮子呢?一般来说,在这类事情中,许多人共同努力,找到了一个我自己都无法找到的解决方案。有许多类型的矩阵分解。你可能会从哪一个?也许从3博客可以帮助。你也可以得到一些帮助,从子弹物理,这是一个C++库,包括把3x3矩阵变成四元数(函数GETORIN)。我必须实现我自己的…记住,平台不可知论是引擎设计的要点之一。使用任何XNA库都意味着该方法只能在安装XNA的Windows/XBox上工作。它引入了一种全新的依赖性…我的引擎根本不使用XNA。几年前我对XNA进行了反编译,最近我再次查看了他们的算法,但看起来那个特定的方法被弄糊涂了。它充满了一堆甚至都不是合法C#代码的废话,还有大量毫无意义的指针声明,比如“Vector3***something=undeclaredentifier”…就像我说的。。。具体来说,我需要镜像DirectX和XNA中的矩阵分解。我不确定是哪一个,因为文档没有给出任何提示。它只是说它将矩阵分解为平移、旋转和缩放组件。。。结果是用于位置的矢量3、用于X、Y、Z缩放的矢量3和用于旋转/方向的四元数。。。