在 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。有了这些定义,我们的工作就是遍历向量中的每个点并绘制我们的球。接下来,让我们为每个 x
和 y
创建匿名函数以使我们的绘图更容易:
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 = 0
到 t = t_final
之间。我们还将 y
值从 y = 0
限制到初始起始高度,在我的示例中为 30。在每个点,我们暂停 0.01 毫秒,以便您可以看到点的绘图。
作为奖励,这就是人物动画的样子 gif
:
我对这两个方程很感兴趣: 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。有了这些定义,我们的工作就是遍历向量中的每个点并绘制我们的球。接下来,让我们为每个 x
和 y
创建匿名函数以使我们的绘图更容易:
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 = 0
到 t = t_final
之间。我们还将 y
值从 y = 0
限制到初始起始高度,在我的示例中为 30。在每个点,我们暂停 0.01 毫秒,以便您可以看到点的绘图。
作为奖励,这就是人物动画的样子 gif
: