math - 一些数学和动画

标签 math animation

我有草纹理:

alt text

我在我的 2d 游戏中使用它。我想通过代码为其设置动画,而不需要任何预定义的动画。

草应该与风相互作用。所以当风较强时,草应该更多地向需要的一侧弯曲。

我使用正弦函数制作的动画的第一个版本,但是这样的动画有点难看,因为草的底部像图片的所有其他部分一样向左/向右移动。对于正弦曲线,我无法调节图像的弯曲。

alt text

有什么建议吗?

最佳答案

这是您可以通过移动像素轻松获得的结果:

alt text

尽管对您来说可能不是很有用,但这里有一个 Mathematica 程序:

f[l_, sh_] := Module[{c = l, k = (Dimensions@l)[[1]]},
  For[i = 1, i <= k, i++,
   c[[i]] = RotateRight[l[[i]], IntegerPart[(k + 1 - i)/sh]]];
  Return[c];]

b = ArrayPad[ImageData@a, {{40}, {40}, {0}}, {1, 1, 1}];
Export["c:\\anim.gif", 
 {Image@b, Image@f[b, 7],
  Image@f[b, 5], Image@f[b, 3],
  Image@f[b, 5], Image@f[b, 7], Image@b}, "DisplayDurations" -> .3]

编辑

但是通过应用圆形变换可以获得更好的效果:

alt text

b = Image@ArrayPad[ImageData@a, {{40, 0}, {40}, {0}}, {1, 1, 1}];
f[image_, angleMult_] := ImageForwardTransformation[image, (
    fi = ArcTan[Abs[#[[2]]/(#[[1]] - .5)]];
    fi1 = angleMult fi (#[[1]]^2 + #[[2]]^2)/2;
    {(1/2 - Sin[fi1] #[[2]] - Cos[fi1]/2 + 
       Cos[fi1] #[[1]]), -Sin[fi1]/2 + Sin[fi1] #[[1]] + 
      Cos[fi1] #[[2]]}) &]
t = Table[f[b, x], {x, 0, .2, .02}];
t1 = Reverse@t;
Export["c:\\anim.gif", Join[t, t1], "DisplayDurations" -> .15];
Import["c:\\anim.gif", "Animation"]

关于math - 一些数学和动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4706668/

相关文章:

java - 给定 "sub-grid"和 "cell-in-the-sub-grid"索引,如何获取数独二维数组索引?

c# - 在 C# 中舍入远离 0 的数字

algorithm - 生成 ai=1 的线性丢番图方程所有解的高效算法

math - 从四元数到欧拉角的错误转换

python - 使用python在终端上动画

javascript - 二进制转换程序

python - 如何使用 sprite 表中的多个图像创建行走角色

iphone - 如何在 iPhone 应用程序中导航时实现加载动画?

javascript - 将带有 calc 的 css 动画转换为 javascript animate

WPF - 使动画的执行以绑定(bind)数据项的属性为条件