首页学校入驻客服中心网站导航

手机版

400-6263-721咨询热线

新闻详情

正弦插值 缓动在Scratch中的实现

来源:自贡童程童美少儿编程培训中心 时间:2016-05-30

  很多Scratcher都有这样一个烦恼——系统自带的移动动画太生硬,做贝塞尔插值又太麻烦…

  作为一个经验丰富Scratch爱好者,本作者在一番苦思后,终于找到了贝塞尔插值的平替——正弦插值。

  相信大部分Scratcher都是学过一点点数学的,那么众所周知,sin(x)的函数图像是一条平滑的曲线。

  补充一个小知识:线性插值↓

  P=((x2-x1)t+x1, (y2-y1)t+y1)那么我们把sin(t)输入线性插值中的t,就得到了一次丝滑的正弦缓动:

  ((x2-x1)sin(t)+x1, (y2-y1)sin(t)+y1)

  让我们插入速率v:

  ((x2-x1)sin(vt)+x1, (y2-y1)sin(vt)+y1)

  再加入系数k和偏移b:

  ((x2-x1)k*sin(vt)+b+x1, (y2-y1)k*sin(vt)+b+y1)

  我们的公式已经基本完善了。为了应对更多应用情景,我们定义0≤t≤1,再使t在min和max之间变化(做min和max的线性插值):

  t1=(max-min)*t+min

  让我们再把t1代入原公式中的t:

  //简化公式((x2-x1)ksin(v((max-min)t+min))+b+x1, (y2-y1)ksin(v((max-min)t+min))+b+y1)//完整公式((x2-x1)*k*sin(v*((max-min)*t+min))+b+x1, (y2-y1)*k*sin(v*((max-min)*t+min))+b+y1)

  大功告成!你还可以在Scratch中设置变量tick和总数ticktotal并将t设为tick/ticktotal,然后重复循环改变位置并增加tick即可。

求学登记
相关学校更多>>

全国分站|网站地图|关于我们|联系我们

版权所有: 郑州天华信息技术有限公司