2012-01-31 5 views
5

IはMATLABでデータの3次元マトリックスを有するが、私は、その行列からのデータの任意の回転スライスを抽出して2次元マトリクス、私ができるようにそれを保存しますアクセス。スライス()関数がどのような角度でスライスされたデータを表示するのと同様ですが、配列のようにデータを表示したり変更することができます。抽出物を任意の2次元アレイとして3Dアレイからデータの平面を回転

Iが平面のピボット点の座標、並びに(X、YおよびZ軸方向に)、Iは、フォーム内の平面の方程式を算出した回転の角度を有する:

Ax + By + Cz = D 

とその平面に落ちるだけデータを含む3Dマトリックスを抽出することができ、私は、単純な2次元配列にそれを変換する方法がわかりません。

これを実行する別の方法は、ソース・マトリックスを平面の角度の反対方向に回転させて、データ平面をXY軸と整列させ、単にマトリックスのその部分を抽出することですしかし、そのような行列を回転できるかどうかはわかりません。

私は一日中、それをグーグルでてきた、これは他の場所で回答されていない願っていますが、問題はどれも正確に地雷と一致するように見えるん。

ありがとう

+0

飛行機のデータは***(ちょうどデータポイントのデータ量が非常に少なくなります)か、データを補間したいのですか? – yohai

+0

補間は後で考えられるが、補間の代わりに最も近いセルを返すようにする –

+0

3つのindeces 'A [i、j、k] = a_ijk'を持つ行列があり、2の配列を作成したいb、u、vは、i、j、kの世界の平面/スライス上の座標である。 (そしてすべての文字は整数です)また、 'ijk'が' u = 1'と 'v = 1'に対応する規則がありますか? – ja72

答えて

1

あなたはthe code hereを見てみることができますとしてこれを承認します。私はその機能があなたが解決しようとしているものに似ていると思います。すなわち、平面の大きさ、平面の中心点、及び面法線、[A、B、C]所与

function extracts an arbitrary plane from a volume。また、平面上の各ピクセルの容積指数および座標も出力します。

0

Aha!自分で解決したかもしれません。

(1,0,0) //step in the x direction of our 2D array 

(0,1,0) //step in the y direction of our 2D array 
:回転行列を用いて、私は(0,0,1)の法線ベクトルを回転平面方程式を生成した後、私は、次のベクトルを回転させる場合D.を見つけるために

IはX、Y、Zの私の座標が、私は私の配列で、または次の行に次の列にステップの前に変更する必要がどのくらい示す勾配があるでしょう。

私はできるだけ早くこれをモックアップし、それが

EDIT動作するかどうかの答えとしてマークされます:私は私のベクトルを回転させていたときに[OK]をわずかに変更し、私はまた、XYZを表し、3D空間内の点を回転させる必要がありますx = 0、y = 0、z = 0の座標(構造の中心を中心に回転していますが、実際には-sizeex/2、-sizey/2、-sizez/2です。データを作成し、次に回転後の各座標にサイズ/ 2を加えて、それをどこに戻すかを単に変換します)。

これで、2D座標系のx座標を大きくし、y座標を大きくするとグラデーションが変化するので、可能なすべてのx座標とy座標をループすることができます50x50x50アレイの場合は50x50であるため、2D配列では不規則なサイズのために最終的に解決する必要があるかどうかはわかりません)、結果として得られた3D座標がデータ内に計算されます。回転したコーナーの値が出発点になります。やめ!

ただ、すべての角度を網羅する、このための良いテストを動作するようになったし、私は答え