本文主要是介绍Manim实现目标的移动和出现速度控制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一,介绍
缓动函数 自定义参数随时间变化的速率。 现实生活中,物体并不是突然启动或者停止, 当然也不可能一直保持匀速移动。就像我们 打开抽屉的过程那样,刚开始拉的那一下动作很快, 但是当抽屉被拉出来之后我们会不自觉的放慢动作。 或是掉落在地板上的物体,一开始下降的速度很快, 接着就会在地板上来回反弹直到停止。 这个页面将帮助你选择正确
速率函数的选择,即动画的速度曲线。
接下啦看看非标准的速率函数有那些:
示例代码:
缓动函数(Easing Functions)是用于控制动画过程中对象变化速度的重要工具。它们决定了动画的速率变化,通常以曲线的形式表示。这些函数可以帮助创建更自然和流畅的动画效果。
二,标准缓动函数
线性(Linear):动画的变化速度保持不变,适用于简单的动画。
示例代码:
from manim import *class RateFunctions1Example10(Scene):def construct(self):line1 = Line(3*LEFT, 3*RIGHT).shift(UP).set_color(RED)line2 = Line(3*LEFT, 3*RIGHT).set_color(GREEN)line3 = Line(3*LEFT, 3*RIGHT).shift(DOWN).set_color(BLUE)dot1 = Dot().move_to(line1.get_left())dot2 = Dot().move_to(line2.get_left())dot3 = Dot().move_to(line3.get_left())label1 = Tex("Linear").next_to(line1, RIGHT)label2 = Tex("Sigmoid").next_to(line2, RIGHT)label3 = Tex("Smooth").next_to(line3, RIGHT)self.play(FadeIn(VGroup(line1, line2, line3)),FadeIn(VGroup(dot1, dot2, dot3)),Write(VGroup(label1, label2, label3)),)self.play(MoveAlongPath(dot1, line1, rate_func=rate_functions.linear),MoveAlongPath(dot2, line2, rate_func=rate_functions.sigmoid),MoveAlongPath(dot3, line3, rate_func=rate_functions.smooth),run_time=10)self.wait()
二次方缓动(Quad):
- Ease In:开始慢,之后加速。
- Ease Out:开始快,随后减速。
- Ease In Out:开始和结束时慢,中间加速。
标准函数不会导出,因此要使用它们,您可以执行以下操作:
rate_func=rate_functions.ease_in_sine
另一方面,比较常用的非标准函数被导出,可以直接使用。
标准速率函数的示例代码:
from manim import *class RateFunctions1Example(Scene):def construct(self):self.camera.background_color =WHITEline1 = Line(3*LEFT, 3*RIGHT).shift(UP).set_color(RED)line2 = Line(3*LEFT, 3*RIGHT).set_color(GREEN)line3 = Line(3*LEFT, 3*RIGHT).shift(DOWN).set_color(BLUE)dot1 = Dot(color=BLACK,radius=0.12).move_to(line1.get_left())dot2 = Dot(color=BLACK,radius=0.12).move_to(line2.get_left())dot3 = Dot(color=BLACK,radius=0.12).move_to(line3.get_left())label1 = Tex("Ease In",color=BLACK).next_to(line1, RIGHT)label2 = Tex("Ease out",color=BLACK).next_to(line2, RIGHT)label3 = Tex("Ease In Out",color=BLACK).next_to(line3, RIGHT)self.play(FadeIn(VGroup(line1, line2, line3)),FadeIn(VGroup(dot1, dot2, dot3)),Write(VGroup(label1, label2, label3)),)self.play(MoveAlongPath(dot1, line1, rate_func=rate_functions.ease_in_sine),MoveAlongPath(dot2, line2, rate_func=rate_functions.ease_out_sine),MoveAlongPath(dot3, line3, rate_func=rate_functions.ease_in_out_sine),run_time=7)self.wait()
三次方缓动(Cubic):
- 动画变化较二次方函数更为明显,同样分为Ease In、Ease Out和Ease In Out。
-
示例代码
-
from manim import *class RateFunctionsCubic(Scene):def construct(self):line1 = Line(3*LEFT, 3*RIGHT).shift(UP).set_color(RED)line2 = Line(3*LEFT, 3*RIGHT).set_color(GREEN)line3 = Line(3*LEFT, 3*RIGHT).shift(DOWN).set_color(BLUE)dot1 = Dot().move_to(line1.get_left())dot2 = Dot().move_to(line2.get_left())dot3 = Dot().move_to(line3.get_left())label1 = Tex("Ease In Cubic").next_to(line1, RIGHT)label2 = Tex("Ease out Cubic").next_to(line2, RIGHT)label3 = Tex("Ease In Out Cubic").next_to(line3, RIGHT,buff=0).scale(0.8)self.play(FadeIn(VGroup(line1, line2, line3)),FadeIn(VGroup(dot1, dot2, dot3)),Write(VGroup(label1, label2, label3)),)self.play(MoveAlongPath(dot1, line1, rate_func=rate_functions.ease_in_cubic),MoveAlongPath(dot2, line2, rate_func=rate_functions.ease_out_cubic),MoveAlongPath(dot3, line3, rate_func=rate_functions.ease_in_out_cubic),run_time=7)self.wait()
指数缓动(Exponential):在动画的初始和结束阶段变化平滑,适合需要快速响应和缓冲的效果。
圆形缓动(Circular):通过圆形路径来实现加速和减速,表现得更为柔和自然。
三,非标准缓动函数
非标准缓动函数通常是开发者自定义的,或是基于标准函数修改而来。它们能够更好地满足特定动画的需求,例如:
-
弹性缓动(Elastic):动画像弹簧一样反复震荡,给人一种回弹的感觉。
-
回弹缓动(Back):在结束前稍微向外突出一下,再回到目标位置,给人一种“回退”的感觉。
-
摩擦缓动(Bounce):模拟弹跳效果,动画到达终点时会有多次回弹的动作。
示例代码:
from manim import *class RateFunctionsNOTlinear(Scene):def construct(self):line1 = Line(3*LEFT, 3*RIGHT).shift(UP).set_color(RED)line2 = Line(3*LEFT, 3*RIGHT).set_color(GREEN)line3 = Line(3*LEFT, 3*RIGHT).shift(DOWN).set_color(BLUE)dot1 = Dot().move_to(line1.get_left())dot2 = Dot().move_to(line2.get_left())dot3 = Dot().move_to(line3.get_left())label1 = Tex("Ease In Bounce").next_to(line1, RIGHT)label2 = Tex("Ease out Bounce").next_to(line2, RIGHT)label3 = Tex("Ease In Out Bounce").next_to(line3, RIGHT,buff=0).scale(0.8)self.play(FadeIn(VGroup(line1, line2, line3)),FadeIn(VGroup(dot1, dot2, dot3)),Write(VGroup(label1, label2, label3)),)self.play(MoveAlongPath(dot1, line1, rate_func=rate_functions.ease_in_bounce),MoveAlongPath(dot2, line2, rate_func=rate_functions.ease_out_bounce),MoveAlongPath(dot3, line3, rate_func=rate_functions.ease_in_out_bounce),run_time=7)self.wait()
缓动函数是为了让动画更加生动、真实,适当选择和应用这些函数能够提高用户体验。
这篇关于Manim实现目标的移动和出现速度控制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!