三角函数与缓入缓出动画及C#实现(图文讲解) (2)

在实际程序实现时,一般是固定“时间”,只变化“距离”。此处的”时间“可以理解为”时间间隔“。即在时间间隔不变的情况下,需要考虑每个时间间隔内运行的距离。

那么在正弦曲线上的体现便是等x间隔下,y的取值。

(一)简单实现 (1)实现思路:

1,通过y=sin(x)的曲线可知:y值的范围是(-1~+1)

2,将曲线上移,上移距离为1,即:y=sin(x)+1,此时y值的范围:(0~2)

3,为使y值范围变为(0~1),对函数除2,即:y=(sin(x)+1)/2

如图(蓝线为 y=sin(x)):

三角函数与缓入缓出动画及C#实现(图文讲解)

4,将y值乘以缓入缓出动画的摆动距离

(2)C#实现:

1,控件布局及属性

三角函数与缓入缓出动画及C#实现(图文讲解)

2,核心代码

三角函数与缓入缓出动画及C#实现(图文讲解)

三角函数与缓入缓出动画及C#实现(图文讲解)

1 void pShowD() 2 { 3 //i是度数,不是弧度 4 int i = 0; 5 //移动距离要减去滑块本身的宽度 6 double dMoveDistance = panel_Board.Width - panel_Slider.Width; 7 while (true) 8 { 9 i++; 10 if (i > 360) 11 { 12 //一个周期是360度 13 i = 0; 14 } 15 //固定时间间隔 16 Thread.Sleep(10); 17 //通过公式:弧度=度*π/180,将度数i转为Math.Sin()所需要的弧度数 18 double dz = dMoveDistance * (1 + Math.Sin(i * Math.PI / 180)) / 2; 19 pSetLeft(Convert.ToInt32(dz)); 20 21 } 22 } 23 24 void pSetLeft(int i) 25 { 26 if (panel_Slider.InvokeRequired) 27 { 28 panel_Slider.Invoke(new Action<int>(pSetLeft), new object[] { i }); 29 } 30 else 31 { 32 panel_Slider.Left = i; 33 } 34 }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsxfjd.html