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

今天介绍的两个动画类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对单个图形的变换效果。

rust 复制代码
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. 多个图形顺时针变换

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

rust 复制代码
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对单个图形的逆时针变换功能。

rust 复制代码
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. 多个图形逆时针变换

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

rust 复制代码
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)

相关推荐
wang_yb2 天前
用Manim实现动态交点计算--从一个动点问题说起
databook·manim
wang_yb3 天前
从写代码到问问题:2026年,AI如何重构数据科学工作流
数据分析·databook
wang_yb7 天前
逃离SQL丛林:实用主义的数据救赎
数据分析·databook
wang_yb8 天前
理解PDF的设计哲学,省下一半的编辑时间
databook
wang_yb11 天前
理论都会,实战就废?7个分析模板,帮你打通任督二脉
数据分析·databook
wang_yb15 天前
AI价值:理性评估三维度
ai·databook
wang_yb18 天前
别让AI代码,变成明天的技术债
ai·databook
wang_yb23 天前
数据团队该醒醒了:AI智能体不是你的下一个仪表盘
ai·数据分析·databook
wang_yb1 个月前
当AI学会编程,我们还能做什么
ai·databook
wang_yb1 个月前
从直觉到算法:贝叶斯思维的技术底层与工程实现
ai·databook