私は3D点群をプロットしていますが、図をある姿勢に回転させるのは難しいです。例えば図形の視点をベクトルに沿って3dの位置に移動するにはどうすればいいですか?
、
figure; hold on;
z = linspace(0,3*pi,250);
x = 2*cos(z) + rand(1,250);
y = 2*sin(z) + rand(1,250);
plot3(x, y, z, 'b.', 'MarkerSize', 20);
plot3(x(1), y(1), z(1), 'kx', 'MarkerSize', 20);
plot3([x(1) x(end)], [y(1) y(end)], [z(1) z(end)], '-k');
デフォルトの視点は、私が 'X' の位置から黒い線に沿って見てみたい
です。私は手動でGUIコントロールを持つ図形を回転させることができる、と私は方位角96高さに最も近い得ることが判明-46
Iは
view(96, -46);
を使用して、この位置にビューを回転させることができるが視点は実際には「X」の上には配置されません。 「X」は、視点の前のある距離です。さらに、私はこのコードを呼び出すたびに異なるベクトルを持っているので、毎回同じ方位角と仰角を使うことはできません。
ベクトルから方位角と仰角を計算できるはずです。私の試み、
x_dif = x(end)- x(1);
y_dif = y(end)-y(1);
z_dif = z(end)-z(1);
azimuth = (atan(x_dif/y_dif))*180/pi;
elevation = (atan(z_dif/sqrt(x_dif^2+y_dif^2)))*180/pi;
view(azimuth, elevation);
これは、不正な解決策を生成します。方位角と仰角がプロットボックスの中心に対して相対的でなければならないと考えられます。 (view
documentation)。私はこれを行う方法がわかりません。
どのようにベクトルを与えられた図に回転を計算して適用できますか?
私はドキュメントでこれを見落としました。良い発見! – Cecilia
ドキュメントには心配はありません。私は 'atan()* 180/pi()'ではなく 'atand()'を使うべきですが、あなたの '[alt、az]'コードも 'axis equal'で動作していると思います。 –