【问题标题】:Some math and animation一些数学和动画
【发布时间】:2011-01-16 16:51:27
【问题描述】:

我有一个草纹理:

我在我的 2d 游戏中使用它。我想通过代码对其进行动画处理,没有任何预定义的动画。

草应该与风相互作用。因此,当风更大时,草应该更多地向需要的一侧弯腰。

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

有什么建议吗?

【问题讨论】:

    标签: math animation


    【解决方案1】:

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

    虽然可能对您不是很有用,但这里有一个 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]
    

    编辑

    但是你可以通过应用循环变换来获得更好的效果:

    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"]
    

    【讨论】:

    • 语言不重要。结果是。谢谢,我会看看这个。
    • @belisarius 我喜欢 Mathematica。我得到它来学习一些东西。第二个代码的唯一问题是如何加载a 变量(图像)。我试过:a = Image['path in system.png']a = Imprt['path.png']。但是第一次我得到了很多错误,第二次我得到了一个静态图像,但仍然有很多错误。
    • @Ockonal 将您的图像复制到剪贴板并输入 Mma "a=" 然后粘贴。或等效的 a = Import["c:\\anim.gif"] 在我的代码的最后一行。见reference.wolfram.com/mathematica/ref/Import.html
    • @Ockonal 将其作为问题发布在 Mathematica 标签下。有一个非常有帮助的社区,肯定会帮助你。我没有在 Linux 下使用 Mma 的经验。对不起。
    • @Ockonal 对于每个轴,您必须写下两个方程式。 Xshade= A * Xmath + B. 对于图像上的任意两个点,然后求解 A 和 B。这就是你的新坐标系
    【解决方案2】:

    您可以只移动行,例如从底部开始,每 3 行向右移动 1px。

    【讨论】:

      【解决方案3】:

      你是如何显示纹理的?使用广告牌时,您可以操纵广告牌的顶点,甚至对广告牌进行三角测量以获得更多控制。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-20
        • 1970-01-01
        • 1970-01-01
        • 2011-02-19
        • 1970-01-01
        • 2022-09-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多