座標がMATLABスタイル(X、Y、Zが異なる配列に保持されている)の場合、3軸のそれぞれの周りで3Dオブジェクトをどのように回転させますか?MATLAB 3Dオブジェクトの回転と作業
このコードは開始です。私はrotation matrix(xの周りのπ/ 2回転のために)を見つけたと思う、ここでそれはrotX90_2と呼ばれる。しかし、rotX90_2はX、Y、Z上でどのように動作しますか?
[X,Y,Z] = cylinder;
% rotX90_1 = makehgtform('xrotate',pi/2) gives
rotX90_1 = ...
[1 0 0 0;
0 0 -1 0;
0 1 0 0;
0 0 0 1];
rotX90_2 = rotX90_1(1:3, 1:3);
% Here rotX90_2 should operate on [X,Y,Z] in order to ...
% rotate it 90 degrees around x, but how is this done?
% == What code should be put here to rotate the cylinder? ==
surf(X,Y,Z);
私はMATLABを使い始めました。私が理解しているように、3Dグラフィックスを操作する基本的な方法は、ここではまたはのようにX、Y、Zのいずれかで操作するか、h = surf(X, Y, Z);
のようなグラフィックスルーチンを実行してからf.exを使用してグラフィックスオブジェクトを操作できます。 hgtransform。
X、Y、Zを使用して翻訳してスケールすると便利です。スカラを追加して乗算するだけです。しかし、私はどのように回転するかを理解するためにこの質問をする。
グラフィックオブジェクトで操作する場合は、hgtransform関数を使用できます。しかし、私は理解しているように、hgtransformはグラフィックオブジェクトに対して直接的に動作しないので、最初に他のオブジェクトを作成する必要があります。 (rotatex(h, angle)
。F.exのような機能を除いて、私は対応する "translatex(h、distance)"を見つけられませんでした。 簡単に、実用的なポインタをどのように簡単に回転、スケールおよびMATLABの3D座標/オブジェクト(座標系の軸の周り)を翻訳することができます。
編集:
以下Prakharの答え、作品によると、上記のギャップを埋めるために必要なコードは以下の通りです。ありがとう、Prakhar。
[row, col] = size(X);
coordinates = [reshape(X, [row*col, 1]), reshape(Y, [row*col, 1]), reshape(Z, [row*col, 1])];
rC = coordinates * rotX90_2;
X = reshape(rC(:, 1), [row, col]);
Y = reshape(rC(:, 2), [row, col]);
Z = reshape(rC(:, 3), [row, col]);
これは本当に質問に答えていません。それが立てているような問題は、本当に広すぎます。 – Suever
ご返信ありがとうございます。私はそれが有効になると確信していますが、私はどのようにそれを実装するのですか? 'R = rotX90_2'(私の例)を入力してコードを入力すると、「内部行列の次元は一致しなければならない」というエラーが表示されます。問題の例でこのソリューションをどのように実装する必要がありますか? –
X、Y、およびZが列ベクトルであることを確認してください。そうでない場合は、座標= [X 'Y' Z ']を使用します。代わりに。あなたの例では、X、Y、Zの各行をループするために使用します。 – Prakhar