C ++で行列をどのように表す必要がありますか?
私は自分に3D数学を教えており、その過程で自分の基本的なエンジン(一種)を構築しています。私のC ++マトリックスクラスを構造化する最良の方法は何だろうと思っていました。いくつかのオプションがあります: 個別のメンバー変数: struct Mat4 { float m11, m12, m13, m14, m21, m22, m23, m24, m31, m32, m33, m34, m41, m42, m43, m44; // methods } 多次元配列: struct Mat4 { float[4][4] m; // methods } ベクトルの配列 struct Mat4 { Vec4[4] m; // methods } それぞれに良い面と悪い面があると思います。 以下からのグラフィックスとゲーム開発のための3D数学入門、第2版の P.155: 行列は1ベースのインデックスを使用するため、最初の行と列には1の番号が付けられます。たとえば、a12(a「a12」ではなく「1つ2つ」と読む)は、最初の行、2列目の要素です。これは、0ベースの配列インデックスを使用するC ++やJavaなどのプログラミング言語とは異なることに注意してください。行列には列0または行0がありません。実際の配列データ型を使用して行列が格納されている場合、このインデックスの違いにより混乱が生じる可能性があります。このため、幾何学的な目的で使用される型の固定サイズの小さな行列を格納するクラスでは、float a11floatなどの言語のネイティブ配列サポートを使用する代わりに、各要素にのような独自の名前付きメンバー変数を与えるのが一般的ですelem[3][3]。 …