iOS如何构建水滴的跳动
之前视觉给出了一个效果~ 需要跳动的水滴,思考了下如果是用动画去写的会调死人的。。(真.调死人的)。。
后来思考了下,可以快速的给出一个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 大家见谅 思路就是这样)