3

C# で 3D エンジン用の 4x4 マトリックス クラスを作成する必要があります。次のように、単一の浮動小数点メンバー変数/フィールドにマトリックス値を格納する他のエンジンを見てきました。

float m11, m12, m13, m14
float m21, m22, m23, m24
float m31, m32, m33, m34
float m41, m42, m43, m44

ただし、行列を使用した変換/計算には、それらを 2 次元配列に格納する方が便利だと思いました。

float[4][4];

1次元配列も考えましたが、それは自明ではないように見え、最初のオプションよりも利点がありません。

float[16];

C++ では、私は常に "union" キーワードを使用して、上記のすべての可能性を一度に格納しました。ただし、C# にはこのキーワードがないようなので、どちらを使用するかを決めなければなりません。

変換などを適用するときに 4x4 マトリックスを保存する最速の方法は何ですか? ユーザビリティを考えるとき、どのオプションを選択しますか?

4

3 に答える 3

3

2 次元配列を使用できます。

float[,] matrix = new float[4,4];

これはジャグ配列とは異なります。

float[][] matrix = new float[][4];

2 次元配列は、その下に 1 つの大きな 1 次元配列として格納されます。このクラスは単純にそれを抽象化し、2 つ (またはそれ以上) の次元を提供するアクセサーを提供します。バックエンドで 1 次元配列として格納されるため、キャッシュ/メモリの局所性が維持されます。

于 2012-10-23T16:54:05.137 に答える
3

Efficient Matrix Programming in C#CodeProject.comという記事をご覧ください。

独自のデータ構造を定義するためのさまざまなオプションについては、配列の宣言 (Visual C#)を参照することもできます。Matrix

于 2012-10-23T16:56:04.057 に答える
1

unsafe最速の方法は、キーワードとともにポインターを使用することです。しかし、これはキーワードが示すように安全ではありません。

C# のポインターの詳細については、こちらを参照してください。

于 2012-10-23T16:54:40.827 に答える