【问题标题】:Animating a ball in Matlab在 Matlab 中对球进行动画处理
【发布时间】:2015-01-02 19:20:11
【问题描述】:

我有一个包含这两个方程的球: 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、drawow,但我不知道该怎么做。

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

【问题讨论】:

  • 有关使用事件检测的数值积分的更多高级版本,请参阅ballode 演示。在命令窗口中键入 edit ballode。您需要稍微调整动画以满足您的需要。

标签: matlab matlab-figure


【解决方案1】:

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

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。我们还确保轴不会通过强制 x 值自动调整自身限制在 t = 0t = t_final 之间。我们还将y 的值从y = 0 限制到初始起始高度,在我的示例中为30。在每个点,我们都会暂停 0.01 毫秒,以便您可以看到点的绘制。

作为奖励,这就是动画gif 中的人物形象:

【讨论】:

  • @3abcDEF3 很高兴!这很有趣。祝你好运!
  • @chappjc 哈哈哈 OMG。我过去常常不停地玩那个游戏。这样的回忆!感谢您的支持 :) 还:classicdosgames.com/online/scorch15.html !!!
猜你喜欢
  • 2013-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多