2017-12-20 12 views
-3

を移動してください:ように私はMathWorks社のMATLABで心を作ることができた心がアップ/下/左/右

n=100; 
x=linspace(-3,3,n); 
y=linspace(-3,3,n); 
z=linspace(-3,3,n); 
[X,Y,Z]=ndgrid(x,y,z); 
F=((-(X.^2) .* (Z.^3) -(9/80).*(Y.^2).*(Z.^3)) + ((X.^2) + (9/4).* (Y.^2) + (Z.^2)-1).^3); 
isosurface(F,0) 
lighting phong 
axis equal 

のは、表示した後(すなわち1S)私はちょうど今それを上に移動したいとしましょう図。つまり、第1ステップは心臓を示し、第2ステップはそれを移動することです。上(または下/左/右)に移動します。どんなアプローチが取られるだろうか?

答えて

0

あなたは1秒

n=100; 
x=linspace(-3,3,n); 
y=linspace(-3,3,n); 
z=linspace(-3,3,n); 
[X,Y,Z]=ndgrid(x,y,z); 
F=((-(X.^2) .* (Z.^3) -(9/80).*(Y.^2).*(Z.^3)) + ((X.^2) + (9/4).* (Y.^2) + (Z.^2)-1).^3); 

[XX, YY, ZZ] = meshgrid(x,y,z); 
isosurface(XX,YY,ZZ,F,0); 

lighting phong 
axis equal 
axis manual 
ax = gca; 
k = 2; 

ax.XLim = ax.XLim*k; 
ax.YLim = ax.YLim*k; 
ax.ZLim = ax.ZLim*k; 

pause(1); 

TranslationVector = [0.5 0.5 0.5]; 

h = findobj('Parent',ax,'type','patch'); 
delete(h); 
isosurface(XX+TranslationVector(1),YY+TranslationVector(2),ZZ+TranslationVector(3),F,0) 
後に新しい座標を使用して等値面を再描画することができます
0

1つの方法はtranslation matrixを使用することです。基本的には、行列の乗算を使用して画像を任意に回転させたり平行移動(つまり「移動」)することができます。 、

d2r = pi/180; 
mat = @(angle_th, x_move, y_move)[cos(angle_th*d2r), -sin(angle_th*d2r), x_move; sin(angle_th*d2r), cos(angle_th*d2r), y_move; 0, 0, 1]; 
% now set up the multiply; this will move x and y by 1: 
XY = mat(0, 1, 1)*[x; y; ones(size(x))]; 
x_moved = XY(1, :); 
y_moved = XY(2, :); 
% now create your heart or whatever other image using x_moved and y_moved 

今、明らかにあなたは自分のyのx、X、またはYの値に1を追加することができます。私は今、MATLABへのアクセスを持っていないので、私はこれをテストすることはできませんが、ここでは要点であります翻訳マトリックスは一般的なアプローチです。

関連する問題