iOS如何构建水滴的跳动

作者: 飞机飞机 | 来源:发表于2016-03-15 22:47 被阅读1813次

    之前视觉给出了一个效果~ 需要跳动的水滴,思考了下如果是用动画去写的会调死人的。。(真.调死人的)。。 

    后来思考了下,可以快速的给出一个demo  让视觉调出满意的参数我们再入手.

    这是最后成型的效果

    图1

    //##############分割线###############//

    现在我们来说下怎么做出这个效果

    1:所需要的物理知识

    牛顿第二定律,胡克定律

    2:如何分工

    在这里的我们把 水滴看成是一个有质量的球  而水面就是弹簧 (当然有人对我说 要用波动方程 算出来的水波才是最完美。。。 无奈我是学渣。。当然感谢某土豪策划的指导)

    先来说下球的部分---------------------- 

    图2

    (这里水平方向 我们是没有阻力的 就是这样的理想情况 啦啦啦啦)

    为了不让小球能飞出水面 我们要先计算好 小球开始点和结束点 以及能飞到最高点

    知道了重力g 和高度h 之后 我们可以计算出 小球的整个过程所用的时间  (公式 △S=at^2 ) 可以得到

    (h = gt^2)  所以可以求出 小球飞行需要的时间 t1 

    (公式 V0=at  和 △S = V0t)

    那么根据时间t1 可以求出垂直方向的速度 v1 = g*t1/2;

    同样的也可以求出水平方向的 v2 = s/t1  

    根据公式我们就很容易的获取 在某一时刻时候小球飞行达到的点了 比如在某个时间点 tx 

    那么小球的 x = v2 * tx , y = g * tx^2; 小球的点就是(x,y) 

    (这里需要注意下  上升和下降)

    接下来说下水波的部分----------------------

    图3

    用图2的点 p1 的出水点 我们可以 轻松的获取p1出水点的 垂直方向的加速度 a1

    (F=-k·x )  (F = ma)    (m是小球的质量  k是弹性系数) 有了这些 我们就可以求出 水波的最高点

    以及水波从p1 到 最高点的 时间.  关于弹动的次数 我们可以自己随意定 (这里就不考虑阻尼了衰减次数随我们自己定义了 ) 

    所以在特定的时刻 我们可以获取水波中心处于哪个位置.  当获得最高点时候 让两边的水波按sin曲线往两边算,这样就看起来是一个平滑的水波了.

    (图略丑 请见谅。)

    最后我们看下效果 然后就可以把demo扔给 视觉去调了

    图3

    下面给出demo地址 demo  (代码比较ugly  大家见谅 思路就是这样)  

    相关文章

      网友评论

      • C_HPY:大哥请收下我的膝盖
      • brother_jia:非常喜欢你做的demo,虽然比较ugly,但是瑕不掩瑜,在飞行的过程中有变形,以及水波动的具体思路可以赐教吗?
        飞机飞机:@brother_jia 形变只是根据受力方向和力度 在后面加了个球, 具体可以参考 手机QQ消息消除的红点的实现 . 水波只是每个像素点化成了一条线,不同位置的像素点受到不同的力位于的高度 ,然后再连线起来

      本文标题:iOS如何构建水滴的跳动

      本文链接:https://www.haomeiwen.com/subject/ihdekttx.html