manim边学边做--时针方向变换

news/2025/1/27 15:39:45/文章来源:https://www.cnblogs.com/wang_yb/p/18692631

今天介绍的两个动画类ClockwiseTransformCounterclockwiseTransform

用于将某一个元素按照时针方向变换为另一个对象。

  1. ClockwiseTransform:将一个对象以顺时针方向变换成另一个对象
  2. CounterclockwiseTransform:将一个对象以逆时针方向变换成另一个对象

1. 动画概述

1.1. ClockwiseTransform

在数学动画中,当你需要展示一个图形顺时针旋转并逐渐演变成另一个图形的过程时,就可以使用ClockwiseTransform

例如,在讲解几何图形的变换、函数图像的演变等场景中,这个动画能够直观地展示顺时针的变换过程,帮助观众更好地理解图形之间的关系。

顺时针变换是该动画类最显著的特点,它会使源对象以顺时针方向逐渐转变为目标对象。

它的参数主要有:

参数名称 类型 说明
mobject Mobject 起始的 Mobject
target_mobject Mobject 目标 Mobject
path_arc float 控制变换路径弧度的参数,用来确定对象在变换过程中所经过的顺时针弧线的弧度大小

1.2. CounterclockwiseTransform

CounterclockwiseTransformClockwiseTransform 类似,但它是将一个对象以逆时针方向变换成另一个对象。

在需要展示逆时针变换的场景中,如旋转木马的逆时针转动、几何图形的逆时针演变等,这个动画类就非常适用。

它的参数主要有:

参数名称 类型 说明
mobject Mobject 起始的 Mobject
target_mobject Mobject 目标 Mobject
path_arc float 控制变换路径弧度的参数,用来确定对象在变换过程中所经过的逆时针弧线的弧度大小

2. 使用示例

这两个类使用起来比较简单,也没什么参数,下面通过几个示例演示它们在实际动画中的一些可能的使用场景。

2.1. 图形顺时针变换

这个示例实现了一个三角形顺时针变换为正方形的动画,直观展示了ClockwiseTransform对单个图形的变换效果。

triangle = Triangle()
square = Square()
triangle.move_to(DOWN + LEFT * 2)
square.move_to(DOWN + RIGHT * 2)
self.add(triangle)
self.wait()
self.play(ClockwiseTransform(triangle, square))

2.2. 多个图形顺时针变换

这个示例创建了多个圆形,使其分别顺时针变换为正方形,展示了多个对象同时进行顺时针变换的场景。

circles = [Circle(radius=0.5) for i in range(3)
]
squares = [Square(side_length=1) for i in range(3)
]circles[0].move_to(2 * LEFT + UP)
squares[0].move_to(2 * RIGHT + UP)
circles[1].move_to(2 * LEFT)
squares[1].move_to(2 * RIGHT)
circles[2].move_to(2 * LEFT + DOWN)
squares[2].move_to(2 * RIGHT + DOWN)self.add(*circles)
self.wait()
animations = [ClockwiseTransform(circles[i], squares[i]) for i in range(3)]
self.play(*animations)

2.3. 图形逆时针变换

这个示例将五边形逆时针变换为八边形,体现了CounterclockwiseTransform对单个图形的逆时针变换功能。

pentagon = RegularPolygon(n=5)
hexagon = RegularPolygon(n=8)
pentagon.move_to(UP + LEFT * 2)
hexagon.move_to(UP + RIGHT * 2)
self.add(pentagon)
self.wait()
self.play(CounterclockwiseTransform(pentagon, hexagon))

2.4. 多个图形逆时针变换

这个示例实现了多个三角形逆时针变换为菱形的动画,呈现了多个对象同时进行逆时针变换的效果。

triangles = [Triangle() for i in range(3)]
rhombuses = [RegularPolygon(n=4) for i in range(3)]triangles[0].move_to(2 * LEFT + UP)
rhombuses[0].move_to(2 * RIGHT + UP)
triangles[1].move_to(2 * LEFT)
rhombuses[1].move_to(2 * RIGHT)
triangles[2].move_to(2 * LEFT + DOWN)
rhombuses[2].move_to(2 * RIGHT + DOWN)self.add(*triangles)
self.wait()
animations = [CounterclockwiseTransform(triangles[i], rhombuses[i]) for i in range(3)
]
self.play(*animations)

3. 附件

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

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

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

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

相关文章

ADALM-Pluto修改芯片类型为AD9364模式

ADALM-Pluto 使用芯片AD9363(325 MHz - 3.8 GHz),但可切换至 AD9364(70 MHz - 6 GHz)模式,此篇随笔将采用串口调试的方式将 Pluto 设置为 AD9364 芯片,进而提高接收信号频率范围,已包含FM广播信号的频率。ADALM-Pluto 使用芯片AD9363(325 MHz - 3.8 GHz),但可切换至…

java基础Day8 异常

一、简单分类 三种类型的异常Exception:检查性异常:最具代表性的检查性异常是用户错误或者问题引起的异常,这是程序员无法预见的。例如要打开一个不存在的文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。 运行时异常:运行时异常是可能被程序员避免的异常。与…

《CPython Internals》读后感

一、 为什么选择这本书? Python 是本人工作中最常用的开发语言,为了加深对 Python 的理解,更好的掌握 Python 这门语言,所以想对 Python 解释器有所了解,看看是怎么使用C语言来实现Python的,以期达到对 Python语言的掌握达到精通的程度,。 关于 Python 解释器的书不多—…

文档智能扫描,提升无纸化办公效率

随着无纸化办公的推广和移动设备的普及,用户迫切需要将纸质文档快速、准确地转换成电子格式,以提高工作效率和信息管理的便捷性。同时,用户将文档扫描成电子版后,可以自行通过加密和访问控制提高电子文档的安全性,以满足法律和合规要求。 HarmonyOS SDK 场景化视觉服务(V…

Grafana快速入门指南上篇

一.Grafana安装 1.下载grafana我们课堂实验均以Grafana 9.X版本实验的,更高版也可以实验,但是部分插件可能兼容性不太友好。下载地址:https://grafana.com/grafana/download/9.5.212.安装grafana apt-get install -y adduser libfontconfig1 muslwget https://dl.grafana.com…

dvwa靶场-----靶场搭建

dvwa靶场-----靶场搭建 一.环境准备: 第一步:下载PHPstudy: 找到PHPstudy官网,下载windows版小皮面板,然后安装。官网下载地址:https://www.xp.cn/PHPstudy第二步:安装PHPstudy并配置环境: 安装好小皮面板后打开Apache和MySQL, 访问127.0.0.1得到如下界面就是建立成功二.DVWA…

API Hooking

一、介绍 API hook(钩取)是一种用来拦截和修改 API 函数行为的技术。它常用于调试、逆向工程和游戏作弊。API 钩取涉及用一个自定义版本替换 API 函数的原始实现,该自定义版本在调用原始函数之前或之后执行一些附加动作。这允许人们在不修改程序源代码的情况下修改其行为 。…

杨立昆谈 Deepseek:开源正在超越私有;SpeechGPT 2.0-preview:情景智能拟人化实时交互系统

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文章 」、「有看点的 会议 」,但内容仅代表编辑…

【nginx】界面化管理Nginx站点的两种方式

前言 之前在文章🧲NginxUI:界面化管理Nginx的工具中简单介绍了NginxUI工具和搭建,本文则探讨怎么使用NginxUI来做界面化的站点管理。 使用docker启一个nginx-ui用于测试,启动命令: docker run -dit \--name=nginx-ui \--restart=always \-e TZ=Asia/Shanghai \-v /mnt/us…

20250127_C++高级编程

对象初始化1 类的4个常见的构造函数1.1 类对象初始化的3个函数1.1.1 默认构造函数 FunctionClass(int data = 10) :m_data(data) {cout << "FunctionClass(int)" << endl; }1.1.2 拷贝构造函数 FunctionClass::FunctionClass(const FunctionClass&…

vsCreator笔记_I/O控制

1, I/O接口端子说明 2, I/O接口功能分配 3, 以上为默认设置, 也可通过vsCreator环境设置\I/O端子设置 4, 输入信号接线示意图5, 输出信号接线示意图