在 Matlab 中制作球动画

Animating a ball in Matlab

我对这两个方程很感兴趣: x(t) = v0*cos(α)*t 和 y(t) = h + v0*sin(α)*t− 1/2 gt^2 , 其中 t ∈ [0,t final] 是时间变量,h是高度,v0为初始速度,α为v0与水平面的夹角,g = 9.8 m/s^2。地板在 y(x) = 0.

我需要画一个球在剧情上移动的小动画。我现在应该使用 for, plot, drawnow,但我不知道该怎么做。

你能告诉我如何获得这个动画吗?

首先,这里有一些测试变量,包括重力加速度:

g = 9.8; %// m/s^2
v0 = 2; %// m/s
alpha = pi/6; %// Radians
h = 30; %// Start at 30 metres
t_final = 4.5; %// Seconds
t_vector = 0 : 0.01 : t_final;
最后一行代码中的

t_vector 创建了一个点矢量,从 t = 0 的初始时间到我们的结束时间,步长为 0.01。有了这些定义,我们的工作就是遍历向量中的每个点并绘制我们的球。接下来,让我们为每个 xy 创建匿名函数以使我们的绘图更容易:

x = @(t) v0*cos(alpha)*t;
y = @(t) h + v0*sin(alpha)*t - 0.5*g*t.^2;

接下来你可以做的是使用 for 循环并遍历 t_vector 的每个值直到 t_final 并绘制单个点。你可能应该把重点放大,这样我们才能真正看到球的样子:

close all;
figure; hold on;
for t = t_vector
    plot(x(t), y(t), 'b.', 'MarkerSize', 16);
    axis([0 t_final 0 h]);
    pause(0.01);
end

上面的代码将首先关闭我们打开的任何图形,生成一个新的 figure 并使用 hold on 以便我们可以多次调用 plot 并将点附加到图形没有它每次擦除。然后,对于每个时间点,我们将图形上的位置绘制为蓝点,然后将点的大小设置为 16。我们还通过强制执行 [=15= 来确保轴不会自动调整自身] 值限制在 t = 0t = t_final 之间。我们还将 y 值从 y = 0 限制到初始起始高度,在我的示例中为 30。在每个点,我们暂停 0.01 毫秒,以便您可以看到点的绘图。

作为奖励,这就是人物动画的样子 gif: