4

私は非常に大規模なプロジェクトに取り組んでおり、かなり長い間抱えていた問題を再検討して解決しようとしています: 4x4 行列分解アルゴリズム.

商用ゲームとシミュレーション エンジンを書いています。これは、完全に C# で記述された API およびプラットフォームに依存しないエンジンです。DirectX バックエンドとして SlimDX を使用しており、OpenGL バックエンドにはおそらく OpenTK を使用するつもりです。DirectX や OpenGL の数学ライブラリやデータ型 (Vector2、Vector3、Quaternion、Matrix など) に依存できないため、エンジン用に独自の型を作成する必要があります。すべてが完成し、かなり最適化されました。私 (および他の多くの人々) は XNA の「感触」が好きで、非常にエレガントで強力だと感じたため、API は意味的に XNA に似ています。しかし、混乱しないでください。このプロジェクトは XNA を使用しておらず、関係もありません。とにかく、私は1つのことを除いてすべてを処理することができました.Matrix.Decompose!!!

問題は、私がこれで何をしているのかまったくわからないということです... 私は独学のプログラマーであり、事実上他のすべて (ビジネスファイナンス、デイトレード、ドイツ語など) を独学で学びました。それが私が学ぶ方法です。私は 1 年 1 学期しか大学に通っていなかったので、複雑な数学の正式な教育を受けていません。ウィキペディアに行って行列分解の式を見ると、私にはすべてギリシャ語のように思えます.... 私には何の意味もない面白い記号や図がたくさんあります (笑)。私はいつも数学が苦手な学生でした。数学を何か (ゲーム プログラミングなど) に実際に適用できない場合、数学は単純に忘れてしまうからです。たとえば、複雑な弾道物理シミュレーションを書くことはできますが、ガールフレンドの基本的な物理学と微積分の宿題を手伝うことさえできませんでした 笑。理論的な数学と私は実用性やプログラミングへのギャップを埋めることができません. だから私はただとても迷っていて、自分が何をしているのかわからず、非常にイライラしています...

具体的には、XNA Framework と DirectX にある Matrix.Decompose の機能を反映する必要があります。SlimDX のソースと OpenTK のソースで実装を探してみましたが、どちらも実装されていませんでした。SlimDX は作業をネイティブの DirectX ライブラリに任せるだけであり、OpenTK にはそれさえありません。このアルゴリズムは巨大で恐ろしく複雑な獣であるため、どちらの開発チームも独自のアルゴリズムを実装しようとはしませんでした。しかし私はしなければなりません。

ウィキペディアや他のサイトにある奇抜な数式を実用的な C# アルゴリズムに変えようとしましたが、うまくいきません。C、C++、または C# で実際に動作する実装を確認するか、疑似コードなどでこれを理解するのを手伝ってもらう必要があります。私はこれらの公式と「高度な」数学理論を理解することができません。何かお手伝いできることがあれば (リンク、実用的な実装、疑似コードなど)、大歓迎です。

4

2 に答える 2

-1

最善の策は、既存のマトリックス ライブラリを使用することです。たとえば、ILNumerics をチェックしてください。多くの一般的な行列分解をサポートしています (「行列分解」はありません): http://ilnumerics.net/$FeatureList.html

これは商用ライセンスですが、エンジンを販売しているので、おそらく問題にはならないでしょう。

無料のものはMath.NETですが、「分解と最小二乗問題」セクションが空であるため、まだ実装していないと思います。

于 2012-09-25T21:08:05.740 に答える