manim边学边做--旋转

news/2024/12/20 13:13:43/文章来源:https://www.cnblogs.com/wang_yb/p/18619076

本篇介绍Manim中的两个旋转类的动画,名称差不多,分别是RotateRotating

Rotate类主要用于对图形对象进行指定角度、围绕特定点的精确旋转,适用于几何图形演示、物理模拟和机械运动展示等场景;

Rotating类则侧重于创建让对象围绕指定轴或点持续旋转的动画,用于动态图标、天体运动模拟和装饰性动态元素等场景。

1. 动画概述

1.1. Rotate

Rotate是一个用于对Mobject进行旋转的动画类。

它通过指定旋转角度、旋转轴等参数来实现精确的旋转效果,例如,它可以围绕特定点(如对象的中心或者自定义的点)进行旋转。

此外,还可以设置旋转的起始角度和终止角度,并且可以指定旋转的速率,通过控制动画运行的时间来调整旋转的快慢。

它的主要参数有:

参数名称 类型 说明
mobject Mobject 要旋转的Mobject对象
angle float 旋转角度,以弧度为单位指定
axis np.ndarray 旋转轴,用向量表示
about_point [float] 旋转中心
about_edge [float] 指定边界框点的方向作为旋转中心

about_pointabout_edge只有一个有效,当about_pointNone时,about_edge才生效。

1.2. Rotating

Rotating更侧重于创建一个持续旋转的动画效果。

它会使Mobject一直围绕指定的轴或点进行旋转,通常用于创建动态的、循环的旋转场景。

它可以设置旋转的方向(顺时针或逆时针),并且可以方便地控制旋转的速度。

它的主要参数有:

参数名称 类型 说明
mobject Mobject 要旋转的Mobject对象
radians np.ndarray 旋转的弧度值
axis np.ndarray 旋转轴
about_point [float] 旋转中心
about_edge [float] 指定边界框点的方向作为旋转中心
rate_func func 速率函数,用于控制动画在时间上的进展速度

1.3. 两种旋转的区别与联系

RotateRotating 有明显的区别和联系。

区别方面,Rotate 重点在于精确控制旋转,它有明确的起始和终止角度设定,可以精准地让 Mobject 从一个角度旋转到另一个角度,适合一次性的、角度明确的旋转操作。

例如,将一个三角形从初始位置旋转 30 度来展示特定的几何关系。

Rotating 是让 Mobject 持续旋转,没有终止角度的限制,只要动画持续,就会一直围绕指定轴或点循环旋转,更适合用于需要持续动态旋转的场景,如一个不停旋转的风车。

它们的联系之处在于都用于实现旋转动画,都依赖于图形对象Mobject)和旋转轴旋转中心这些基本要素。

而在一些复杂的动画场景中,还可以配合使用,比如先用 Rotate 将物体旋转到一个特定位置,再用 Rotating 让其在该位置持续旋转。

2. 使用示例

下面通过示例来演示RotateRotating动画的使用。

2.1. Rotate 时钟指针的旋转

该示例用箭头线段代表时钟指针,通过 Rotate 动画,围绕原点将指针从 12点位置旋转到 3点位置(即旋转 90 度,对应PI/2弧度)。

以此简单模拟时钟指针的转动情况,直观展现 Rotate 在模拟有明确角度变化场景下的应用。

d = Dot(color=BLUE)
c = Circle(color=YELLOW, radius=1)
self.add(d, c)
# 创建时钟指针(简单用线段表示)
hand = Arrow(ORIGIN, [0, 1, 0])
# 模拟时钟指针从 12 点位置旋转到 3 点位置
r_anim = Rotate(hand,angle=PI / 2,axis=IN,about_point=ORIGIN,
)
self.play(r_anim)

2.2. Rotating 风扇叶片旋转

以两个矩形表示风扇叶片,借助 Rotating 动画类,让叶片围绕其中心,沿着垂直屏幕向外的轴持续旋转,一圈又一圈,设定旋转一圈的时长为 4 秒。

很好地体现了 Rotating 用于创建持续旋转效果的功能,模拟风扇叶片不停转动的场景。

# 创建风扇叶片(用矩形表示)
b1 = Rectangle(height=0.2, width=2, color=BLUE_B)
b2 = Rectangle(height=2, width=0.2, color=BLUE_D)
vg = VGroup(b1, b2)
# 使用 Rotating 让风扇叶片持续绕中心旋转
r_anim = Rotating(vg,axis=OUT,radians=TAU,about_point=vg.get_center(),run_time=4,
)
self.play(r_anim)

2.3. Rotate 和 Rotating 旋转门

用矩形作为旋转门的一扇门叶,先通过 Rotate 将门叶从关闭位置旋转到一个位置,

随后使用 Rotating 让门叶在打开位置以小角度围绕其左下角持续摆动,还借助 wiggle 速率函数营造摆动效果。

以此模拟旋转门打开后受外界因素影响产生摆动的场景,展示了两个动画类结合使用的灵活性。

# 创建旋转门的一扇门叶(用矩形表示)
door = Rectangle(height=3,width=2,color=BLUE,fill_opacity=0.2,fill_color=YELLOW,
)
l = Line(UP * 2, DOWN * 2, stroke_width=1, color=GREEN)
self.add(door, l)
# 先使用 Rotate 将门叶从关闭位置旋转到打开 90 度位置
rotate_to_open = Rotate(door,axis=UP,angle=PI / 4 + PI,about_point=door.get_bottom(),rate_func=rush_into,
)
# 然后使用 Rotating 让门叶在打开位置持续小角度摆动(模拟风或其他因素影响)
rotating_at_open = Rotating(door,axis=UP,radians=PI / 8,about_point=door.get_bottom(),run_time=3,rate_func=wiggle,
)
self.play(rotate_to_open)
self.play(rotating_at_open)

3. 附件

文中的代码只是关键部分的截取,完整的代码共享在网盘中(rotate.py),

下载地址: 完整代码 (访问密码: 6872)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/855807.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【日记】什么叫做偷感十足哈哈哈哈哈哈哈哈哈(962 字)

正文今天只有一件比较有意思的事情。晚上应酬,提前庆祝冬至,吃的羊肉汤。我也不知道为什么自上了大学之后,去过的每一个地方都很重视冬至。或许因为快过年了?行领导,市分行检查组,还有一个客户。分了两桌,底层员工一桌,领导和客户一桌。来了三个人来我们这打圈…… 酒过…

博弈论+ybt题解

NIM游戏及其证明 题目描述即为T1,不多赘述有向图游戏及SG函数而对于由\(n\)个有向图游戏组成的组合游戏,设它们的起点分别为\(S_1, S_2, \ldots, S_n\),则有定理: 当且仅当\(\text{SG}(s_1) \oplus \text{SG}(s_2) \oplus \ldots \oplus \text{SG}(s_n) \neq 0\)时,这个游…

MapperScannerConfigurer 配置出错造成没有读取 db.properties 文件中的数据库连接参数

MyBatis 和 Spring 集成中,MapperScannerConfigurer 配置出错造成没有读取 db.properties 文件中的数据库连接参数,进而加载不到正确的 JDBC 驱动,本文记录了问题表现和问题分析。MyBatis-Spring 实现 MyBatis 和 Spring 框架集成。 问题现象 在配置中碰到不能加载 MySQL JD…

聊一聊坑人的 C# MySql.Data SDK

一:背景 1. 讲故事 为什么说这东西比较坑人呢?是因为最近一个月接到了两个dump,都反应程序卡死无响应,最后分析下来是因为线程饥饿导致,那什么原因导致的线程饥饿呢?进一步分析发现罪魁祸首是 MySql.Data,这就让人无语了,并且反馈都是升级了MySql.Data驱动引发,接下来…

如何提高测试过程效率?

前几天写了一篇文章,分享了一些工作汇报的方法和案例,详情见《如何编写年度工作汇报PPT》。 后台有同学留言,对质量度量和测试提效部分提了几个问题,核心集中在如何提高测试过程效率方面。 我在前面写过几篇关于测试提效的文章,分别聊到了影响测试效率的因素,测试团队要提…

真保姆级——在VMware的Ubuntukylin上进行Hadoop单机_伪分布式安装时安装VMware_Tools后虚拟机与物理机之间无法传输文件和复制粘贴的问题(附Ubuntu更改默认登录用户)

目录一、前言二、版本信息三、hadoop用户创建1.创建hadoop用户2.在创建hadoop用户后对系统进行重启四、解决办法4.1 更改默认登陆用户4.2 安装VMware Tools4.3 验证VMware Tools是否安装成功4.4 KO!!!4.4.1 卸载安装的Vmware Tools4.4.2 安装VMware Tools所需的组件五、可能…

菱形计数与最值问题

菱形计数与最值问题题面你有一个边长为 \(n\) 的正六边形。它被划分成了若干个边长为 \(1\) 的小等边三角形。 我们希望通过合并若干对有公共边的三角形,把这个六边形变成若干个边长为 \(1\) 的菱形的划分。对于每对三角形之间,它们合并有一个代价,问最小的总代价是多少。 例…

钉钉机器人 自动化发版

开发机器人接收消息并调用构建接口, 实现自动化发版 发送指令 -> 机器人接收指令 -> 调用jenkins-job远程构建与部署钉钉机器人 自动化发版 #1 简介开发机器人接收消息并调用构建接口, 实现自动化发版 发送指令 -> 机器人接收指令 -> 调用jenkins-job远程构建与部…

ChCore-Lab4

lab 4: 多核调度与IPC 结合IPADS OS Lab Manual一起阅读,风味更佳!多核启动支持:使ChCore通过树莓派厂商所提供的固件唤醒多核执行 多核调度: 使ChCore实现在多核上进行round-robin调度。 IPC:使ChCore支持进程间通信 IPC调优:为ChCore的IPC针对测试的特点进行调优。踩坑1…

DNS 服务器是什么?有什么作用?

DNS 服务器是什么?有什么作用 一、DNS 服务器的定义 DNS 服务器即域名系统(Domain Name System)服务器。它是一种在互联网基础设施中扮演关键角色的服务器。在互联网的世界里,每台设备(如服务器、计算机等)都有一个唯一的 IP 地址,就像每部电话都有一个电话号码一样。但…

spring-boot-starter-security放行全部请求

Spring Boot项目中加了spring-boot-starter-security默认会把全部请求设置要求登录。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId> </dependency>系统自动建一个user…

提升分析效率的秘密:电商团队用它打破数据孤岛!

高效团队协作:电商团队如何用在线协同工具重塑商品数据分析流程 在如今竞争激烈的电商行业中,商品数据分析的重要性不言而喻。销售数据、库存情况、用户反馈等信息都可能成为制胜关键。然而,这些数据往往分散在不同系统中,导致团队协作效率低下。尤其是在电商团队中,数据分…