Manim的相机功能和动画方式的总结

2024-09-02 02:36

本文主要是介绍Manim的相机功能和动画方式的总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 相机功能

Manim中的相机功能允许用户控制场景的视角、缩放和背景等。相机的主要类是Camera,而Scene类则包含了对相机的封装。

1.1 相机类型

  • 标准相机:用于2D场景的基本相机。
  • 3D相机:用于3D场景的相机,提供了更复杂的视角控制。

1.2 相机属性

  • 背景颜色:可以设置相机的背景颜色。

    self.camera.background_color = "#FFFFFF" # 设置为白色背景 
  • 相机位置:可以通过move_toshift等方法移动相机。

    self.camera.move_to(UP) 
  • 缩放:可以通过scale方法缩放相机视图。

    self.camera.scale(0.5) # 缩小到原来的50% 

1.3 3D相机

在3D场景中,使用ThreeDScene类来创建相机。可以通过set_camera_orientation方法设置相机的方向。

class My3DScene(ThreeDScene): def construct(self): self.set_camera_orientation(phi=75 * DEGREES, theta=30 * DEGREES) 

1.4 相机动画

相机的动画可以通过self.play方法与相机的移动、缩放等结合使用。

self.play(self.camera.animate.move_to(UP)) 

2. 动画方式

Manim提供了多种动画方式来创建动态效果。动画的基本构成是通过self.play方法来执行。

 

1. 基本动画类型

1.0Write 动画

Write动画用于逐字显示文本或对象,通常用于在场景中引入文字或图形。这个动画会模拟手写的效果,使得对象逐渐显现出来。

使用方法

Write动画的基本用法如下:

self.play(Write(text)) 

Manim提供了多种基本动画类型,以下是一些常用的动画及其示例:

from manim import *  class WriteAnimationExample(Scene):  def construct(self):  # 创建文本对象  text = Text("Hello, Manim!")  # 使用 Write 动画逐字显示文本  self.play(Write(text))  # 等待一段时间  self.wait(1)  # 消失动画  self.play(FadeOut(text))  # 运行命令  
# manim -pql your_script.py WriteAnimationExample  

1.1 创建动画

用于创建对象并将其显示在场景中。

self.play(Create(circle)) 

1.2 消失动画

用于让对象逐渐消失。

self.play(FadeOut(circle)) 

1.3 变换动画

用于将一个对象变换为另一个对象。

self.play(Transform(circle, square)) 

1.4 移动动画

用于移动对象到新的位置。

self.play(circle.animate.move_to(UP)) 

1.5 旋转动画

用于旋转对象。

self.play(Rotate(circle, angle=PI)) # 旋转180度 

1.6 缩放动画

用于缩放对象的大小。

self.play(circle.animate.scale(2)) # 放大2倍 

1.7 颜色变化动画

用于改变对象的颜色。

self.play(circle.animate.set_color(RED)) # 改变颜色为红色 

1.8 透明度变化动画

用于改变对象的透明度。

self.play(circle.animate.set_opacity(0.5)) # 设置透明度为50% 

1.9 组合动画

可以同时播放多个动画。

self.play(Create(circle), FadeIn(text)) 

1.10 动画顺序

可以通过wait方法控制动画之间的停顿。

self.play(Create(circle)) self.wait(1) self.play(FadeOut(circle)) 

1.11 动画组

使用AnimationGroup可以将多个动画组合在一起。

self.play(AnimationGroup(Create(circle), Create(square), lag_ratio=0.5)) 

1.12 动画序列

使用Succession可以创建动画的顺序播放。

self.play(Succession(Create(circle), FadeOut(circle), run_time=2)) 

1.13 反向动画

可以使用reverse方法反向播放动画。

self.play(Create(circle)) self.play(FadeOut(circle).reverse()) 

1.14 路径动画

可以让对象沿着路径移动。

self.play(MoveAlongPath(circle, Line(ORIGIN, RIGHT))) 

1.15 震动动画

可以让对象震动。

self.play(circle.animate.shake()) 

1.151. 示例代码

以下是一个完整的示例,展示了多种基本动画的结合使用:

from manim import *  class ExtendedBasicAnimations(Scene):  def construct(self):  # 创建对象  circle = Circle(color=BLUE).shift(LEFT)  square = Square(color=RED).shift(RIGHT)  text = Text("Hello, Manim!").shift(UP)  # 创建动画  self.play(Create(circle))  self.play(Create(square))  self.play(Create(text))  # 移动动画  self.play(circle.animate.move_to(UP))  # 旋转动画  self.play(Rotate(square, angle=PI / 4))  # 旋转45度  # 变换动画  self.play(Transform(circle, square))  # 颜色变化动画  self.play(square.animate.set_color(GREEN))  # 透明度变化动画  self.play(square.animate.set_opacity(0.5))  # 消失动画  self.play(FadeOut(circle), FadeOut(square), FadeOut(text))  # 运行命令  
# manim -pql your_script.py ExtendedBasicAnimations  

1.16. 复杂动画

可以使用AnimationGroupSuccession来创建复杂的动画序列。

from manim import *  class ComplexAnimation(Scene):  def construct(self):  circle = Circle()  square = Square()  self.play(Create(circle))  self.play(Succession(  FadeOut(circle),  Create(square),  Rotate(square, angle=PI),  run_time=3  ))  

 

3. 示例代码

以下是一个完整的示例,展示了相机功能和动画方式的结合使用:

from manim import *  class CameraAndAnimationExample(Scene):  def construct(self):  # 设置背景颜色  self.camera.background_color = "#FFFFFF"  # 创建对象  circle = Circle(color=BLUE).shift(LEFT)  square = Square(color=RED).shift(RIGHT)  # 播放创建动画  self.play(Create(circle))  self.play(Create(square))  # 相机移动  self.play(self.camera.animate.move_to(UP))  # 变换动画  self.play(Transform(circle, square))  # 等待  self.wait(1)  # 消失动画  self.play(FadeOut(circle), FadeOut(square))  # 运行命令  
# manim -pql your_script.py CameraAndAnimationExample  

 

 

这篇关于Manim的相机功能和动画方式的总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1128760

相关文章

AJAX请求上传下载进度监控实现方式

《AJAX请求上传下载进度监控实现方式》在日常Web开发中,AJAX(AsynchronousJavaScriptandXML)被广泛用于异步请求数据,而无需刷新整个页面,:本文主要介绍AJAX请... 目录1. 前言2. 基于XMLHttpRequest的进度监控2.1 基础版文件上传监控2.2 增强版多

Mybatis 传参与排序模糊查询功能实现

《Mybatis传参与排序模糊查询功能实现》:本文主要介绍Mybatis传参与排序模糊查询功能实现,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、#{ }和${ }传参的区别二、排序三、like查询四、数据库连接池五、mysql 开发企业规范一、#{ }和${ }传参的

Docker镜像修改hosts及dockerfile修改hosts文件的实现方式

《Docker镜像修改hosts及dockerfile修改hosts文件的实现方式》:本文主要介绍Docker镜像修改hosts及dockerfile修改hosts文件的实现方式,具有很好的参考价... 目录docker镜像修改hosts及dockerfile修改hosts文件准备 dockerfile 文

Linux中的计划任务(crontab)使用方式

《Linux中的计划任务(crontab)使用方式》:本文主要介绍Linux中的计划任务(crontab)使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、前言1、linux的起源与发展2、什么是计划任务(crontab)二、crontab基础1、cro

Win11安装PostgreSQL数据库的两种方式详细步骤

《Win11安装PostgreSQL数据库的两种方式详细步骤》PostgreSQL是备受业界青睐的关系型数据库,尤其是在地理空间和移动领域,:本文主要介绍Win11安装PostgreSQL数据库的... 目录一、exe文件安装 (推荐)下载安装包1. 选择操作系统2. 跳转到EDB(PostgreSQL 的

Java枚举类实现Key-Value映射的多种实现方式

《Java枚举类实现Key-Value映射的多种实现方式》在Java开发中,枚举(Enum)是一种特殊的类,本文将详细介绍Java枚举类实现key-value映射的多种方式,有需要的小伙伴可以根据需要... 目录前言一、基础实现方式1.1 为枚举添加属性和构造方法二、http://www.cppcns.co

Java实现文件图片的预览和下载功能

《Java实现文件图片的预览和下载功能》这篇文章主要为大家详细介绍了如何使用Java实现文件图片的预览和下载功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... Java实现文件(图片)的预览和下载 @ApiOperation("访问文件") @GetMapping("

使用Sentinel自定义返回和实现区分来源方式

《使用Sentinel自定义返回和实现区分来源方式》:本文主要介绍使用Sentinel自定义返回和实现区分来源方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Sentinel自定义返回和实现区分来源1. 自定义错误返回2. 实现区分来源总结Sentinel自定

SpringKafka消息发布之KafkaTemplate与事务支持功能

《SpringKafka消息发布之KafkaTemplate与事务支持功能》通过本文介绍的基本用法、序列化选项、事务支持、错误处理和性能优化技术,开发者可以构建高效可靠的Kafka消息发布系统,事务支... 目录引言一、KafkaTemplate基础二、消息序列化三、事务支持机制四、错误处理与重试五、性能优

SpringIntegration消息路由之Router的条件路由与过滤功能

《SpringIntegration消息路由之Router的条件路由与过滤功能》本文详细介绍了Router的基础概念、条件路由实现、基于消息头的路由、动态路由与路由表、消息过滤与选择性路由以及错误处理... 目录引言一、Router基础概念二、条件路由实现三、基于消息头的路由四、动态路由与路由表五、消息过滤