単純なアニメーションを描くMATLAB

実験を行うために、通常はMathWorks社のMATLABと非常に普遍的なつまずいMATLABは、ビットおざなりに見えたし、今日は単純移動マップを行うために少し何かを学んだ、構文は非常に単純で、実用的にはすごい強い数学的なスキルを持っていることです!


まず、コサイン関数の動き

開くには、MATLAB、最初の演習に、簡単な手の仕事を練習し始めた、あなたはコサイン関数を行う必要があり、新しいファイルanimation1.mを作成し
、そのドメインXを定義し、その後、Y =罪(X)を作る、あなたが持つことができます次のような効果

X = -2*pi : 0.1 : 2*pi;
Y = sin(X);
plot(X,Y)

ここに画像を挿入説明
そして、我々はそれ、すべてのポイントが右にシフトし、実際にある、すべてのドメインがセットの使用を注意してくださいここでは、対応する値もそれに応じて変化し、0.1の規模の訳語としてここで定義され、変更される運動の効果を実現したいです関数drawnowは、この時間を表し、グラフを描きながら、もう一度、私たちの新しいXは、Yの値がhに割り当てられていること、新しい値を設定

    X = X + 0.1; 
    Y = sin(X);
    set(h, 'XData', X, 'YData', Y);
    drawnow;

我々はコサイングラフィックス0.1の翻訳を取得することができるように、それがされている変換する方法を、しばらく真を用いて実現することができ、彼はこのループをやり続けるようにすることです

while true
    X = X + 0.1;
    Y = sin(X);
    set(h, 'XData', X, 'YData', Y);
    drawnow;
end

取得した携帯電話の図。
ここでは、より簡単な方法を提供することにあります。

while true
    X = X + 0.1;
    Y = sin(X);
    plot(X,Y);
    getframe;
end

ここでは関数getframeは、関数の集合を達成することができます。

ここに画像を挿入説明
別のノートでは、我々のコードは、次のエラー、ない効果が得られます、実行を停止します。
ここに画像を挿入説明
これは、我々は、ウィンドウを閉じているためで、私たちのパラメータ、エラーのすべてを認識しないためにグラフィックスを描画します。


第二に、それは春を移動します

同様に、我々は可動バネ、それを行うにはどのようにらせん状をしない、私たちは、その後、3次元グラフを描く春より美しい形にするためにするために、余弦、正弦関数の2つの方向性を必要とする、が提供されます。その軸のスケール。

theta = -10*pi : 0.1 : 10*pi;
X = cos(theta);
Y = sin(theta);
Z = theta;

plot3(X, Y, Z);
axis( [-2, 2, -2, 2, -10*pi, 10*pi]);

ここに画像を挿入説明
Z軸はその高さを決定し、ここで注意してください。
圧縮のために、それが要因右圧縮時間を与えて維持するために、そして立ち直るためにあることにより、圧縮されたまま、のような係数を乗じて、それはの高さを増加させる目的を達成するために、当社の係数を分割する必要があります。

圧縮バネ

for i = 1: 100
        Z = 0.98*Z;
        set(h, 'XData', X, 'YData', Y, 'ZData', Z);
        drawnow;
end 

スプリングバック

for i = 1: 100
        Z = Z/0.98;
        set(h, 'XData', X, 'YData', Y, 'ZData', Z);
        drawnow;
end 

真のループは私たちのノンストップの鼓動を実現することができる2つの部分を含んでいるが、ここで100倍に選択された時間で、私たち、その後は合計を使用しています。
ここに画像を挿入説明
固定軸に設定する必要があります、または暴行効果が影響を受けることになります。


第三に、それは時計に変わります

做完两个是不是就已经套路是啥了呢,时钟就是确定原点为中心,画一个圆,一根会转的线,圆的话用我们的余弦函数就好了

t = 0 : pi/50 : 2*pi;
X = cos(t);
Y = sin(t);
plot(X,Y);
hold on;
axis equal;

注意这里时间的划分,是pi/50,跨度越小,越接近于完美的圆,同时说明两个地方的用法(如果这里跨度取0.1的话,会看到圆的右侧有个缺口)
hold on 帮助我们保持住我们的圆,不被我们后面要画的直线覆盖住
axis equal 保持我们的两个坐标轴刻度相同,使圆更圆

那我们接下来就是画线了,我们知道一条直线实际上就是一个向量,确定两个点就可以了,我们这里一个是原点,一个假定为(1,0),那我们就可以得到X轴上的线了

lineX = [0 ,1];
lineY = [0 ,0];
h = plot(lineX, lineY);

ここに画像を挿入説明
那如何让这根线转动呢,那就是要将我们的(1,0)坐标换成很多个与角度有关的点就可以了

theta = 0;
while true
    theta = theta + 0.1;
    lineX(2)= cos(theta);
    lineY(2)= sin(theta);
    set(h, 'XData', lineX, 'YData', lineY);
    drawnow;
end

先令角度theta为0,然后慢慢增加,令坐标为cos(theta)和sin(theta)即可,其余按套路来即可。注意这里的矩阵表示法lineX(2)和lineY(2)都是表示第二个元素。
效果图如下:
ここに画像を挿入説明
然后可以自己再加几根线上去,做成一个完整的时钟哦!


四、密集的三维波形图

这个图形密集恐惧症勿进哈!

X = -10 : 0.2 : 10;
Y = -10 : 0.2 : 10;

[X,Y] = meshgrid(X,Y);

Z = sin(X) + cos(Y);
h = surf(X,Y,Z);
axis([-10 , 10, -10, 10, -20, 20]);
while true
    for i = 1 : 100
        Z = Z*0.97;
        set(h, 'XData',  X, 'YData', Y, 'Zdata',  Z);
        drawnow;
    end

    for i = 1 : 100
        Z = Z/0.97;
        set(h, 'XData',  X, 'YData', Y, 'Zdata',  Z);
        drawnow;
    end
end

ここに画像を挿入説明
这里我们的meshgrid用来生成x,y平面即根据x y 生成网格得到坐标点集合(X, Y),surf用来绘制三个方向的图,其余和前面一样哦!可以先自己动手试试


五、可以吃的曲奇饼

话不多说,直接上饼来恰!

R1 = 2;
t = 0 : 0.1 : 10;

for n = 1: length(t)
theta = 0 : pi/50 : 2*pi;
phi = 0 : pi/50 : 2*pi;
[theta, phi] = meshgrid(theta, phi);

R2= 1+ 0.2*cos(8*(phi-theta-t(n)));
X = (R1 + R2.*cos(theta)).*cos(phi);
Y = (R1 + R2.*cos(theta)).*sin(phi);
Z = R2.*sin(theta);
surf(X, Y, Z);
axis equal;
axis([-3.5, 3.5, -3.5, 3.5, -1.5, 1.5]);
shading interp
M(n) = getframe;
end

ここに画像を挿入説明
提供一下思路:
做一个圆,使其围绕Z轴旋转,但要注意不是规则的旋转,故肯定会有两个角度,这和我们建立球坐标系原理是一样的,主要是X,Y,Z的坐标如何设定,然后为了让他运动,就要改变它的R2,使其随时间变化即可!


今天学完之后真开心!

公開された78元の記事 ウォンの賞賛179 ビュー8309

おすすめ

転載: blog.csdn.net/qq_44790423/article/details/104599054