今天介绍的两个动画类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)

manim边学边做--时针方向变换的更多相关文章

  1. 学EE做硬件找工作不如学CS做软件,为什么会这样?

    学EE做硬件找工作不如学CS做软件,为什么会这样? 电子工程(EE)就业最好的方向居然是转计算机,也许让有的人觉得很不公平,EE也是很重要的学科,我们学习也很努力,为什么就业会不如CS?也有的人好奇, ...

  2. 牛腩学Kotlin做Android应用

    牛腩学Kotlin做Android应用,蹭热度视频,边学边做, 01-kotlin插件安装及hello world 02-kotlin基础语法速览 哔哩哔哩观看地址:http://www.bilibi ...

  3. php实现记忆化递归--以斐波那契数列为例(还是以边学边做为主,注重练习)

    php实现记忆化递归--以斐波那契数列为例(还是以边学边做为主,注重练习) 一.总结 1.递归不优化的话,30层开外就有点吃力了 2.php因为定义变量的时候不用定义变量类型,所以数组里面的类型也是p ...

  4. html5-3 html5标签(热点地图如何实现)(边学边做)

    html5-3 html5标签(热点地图如何实现)(边学边做) 一.总结 一句话总结:热点地图用绝对定位实现. 1.自定义列表怎么弄? dl  自定义列表dt  自定义标题dd  自定义列表内容 2. ...

  5. 第一份开发工作,边学边做android

    我刚刚毕业,在培训学校学的Java web开发,虽然学的没有大学生那么丰富细致,没有他们理论基础扎实,但是这是我学习软件开发的唯一方式了. 从小学我学习就是倒数2.3等,所有人都认为我是个没法学习的孩 ...

  6. 边学边做,简单的 GraphQL 实例

    项目中有功能要调用 API,对方 API 用的是 GraphQL 实现,就简单学了下,感叹技术进步真快,Facebook 发明的这玩意儿咋这么牛逼,使前端开发人员变得主动起来,想要什么接口.返回什么结 ...

  7. LabVIEW Actor Framwork (2)________ 边学边做server&client

    回顾下初始需求: 现在要做一个类似聊天的demo,一个server端,若干个client端:首先是server启动,通过server可以打开若干个client端,然后每个client可以独立给serv ...

  8. STM32F103VET6 ADC采集64点做FFT变换

    http://www.stmcu.org/module/forum/thread-598459-1-11.html http://bbs.21ic.com/icview-589756-1-1.html ...

  9. 牛腩学ASP.NET CORE做博客(视频)

    牛腩学习ASP.NET CORE做的项目,边学边做. 目录: 01-dotnetcore网站部署到centos7系统上(时长 2:03:16) 02-前期准备及项目搭建 (时长:0:23:35) 03 ...

  10. 牛腩学用MUI做手机APP

    斗鱼直播间直播学习撸码,最终目标是用MUI做一个手机APP(暂定android平台,攒钱买IPHONE 7SE!!!),直播内容含整个软件APP的制作过程(含后台接口的制作,放到自己买的阿里云服务器, ...

随机推荐

  1. TIKZ——LaTeX基本绘图

    TIKZ是LaTeX的一个绘图包,可以绘制其他软件很难画出来的图像. 基本用法 直线.垂足.矩形.椭圆 代码: \documentclass{article} \usepackage{tikz} \u ...

  2. JavaScript 编写的迷你 Lisp 解释器

    感谢@李欲纯 的热心翻译.如果其他朋友也有不错的原创或译文,可以尝试推荐给伯乐在线.] Little Lisp是一个解释器,支持函数调用.lambda表达式. 变量绑定(let).数字.字符串.几个库 ...

  3. Java单例对象同步问题探讨

    在本文中,作者向大家讲述了Single Call 模式的原理,同时也介绍了Single Call 模式的实现问题.  评论: 邓明 (dengming@cn.ibm.com), 高级信息系统工程师, ...

  4. Clickhouse之表函数

    remote, remoteSecure 允许访问远程服务器, 而无需穿件Distributed表, remoteSecure - 与 remote 相同,但是会使用加密链接. 语法: remote( ...

  5. Graylog之基本使用

    文档:https://docs.graylog.org/en/3.0/ Graylog Sidecar是一个轻量级配置管理系统,适用于不同的日志收集器,也称为后端.Graylog节点充当包含日志收集器 ...

  6. Javascript 构造函数和类

    1.构造函数 含义:所谓"构造函数",就是专门用来生成实例对象的函数.它就是对象的模板,描述实例对象的基本结构.一个构造函数,可以生成多个实例对象,这些实例对象都有相同的结构 写法 ...

  7. ksmbd 条件竞争漏洞挖掘:思路与案例

    ksmbd 条件竞争漏洞挖掘:思路与案例 ksmbd 条件竞争漏洞挖掘:思路与案例.drawio 本文介绍从代码审计的角度分析.挖掘条件竞争.UAF 漏洞思路,并以 ksmbd 为实例介绍审计的过程和 ...

  8. 当年的毕设-cpf (一个简易的协议 fuzzer)

    整理文件时发现了这个,看是否有人需要... https://github.com/hac425xxx/cpf/ cpf 一个简单的协议Fuzz工具. 毕设答辩胶片&演示视频 https://g ...

  9. NVM管理多个Node版本

    ​在项目中,我们常常会遇到node版本问题的一些报错,像是vue 3需要node10以上版本,不同的 node-sass 版本需要安装不同的 node.js 版本,为了统一管理node版本,我们需要用 ...

  10. nginx的子路径重写替换

    ​在nginx中配置proxy_pass代理转发时,如果在proxy_pass后面的url加/,表示绝对根路径:如果没有/,表示相对路径,把匹配的路径部分也给代理走. 假设下面四种情况分别用 http ...