manim边学边做–旋转

本篇文章将深入探讨Manim库中的两种旋转动画类:RotateRotating,它们虽然名称相似,但在功能和应用场景上各有千秋。

Rotate类专注于对图形对象进行精确的旋转操作,它允许用户指定旋转的角度、轴心点等,非常适合于几何图形的演示、物理模拟以及机械运动的展示等场合。

相对而言,Rotating类则致力于创建一个持续旋转的效果,使对象围绕一个轴或点不断旋转,这在动态图标、天体运动模拟以及装饰性动态元素中尤为常见。

1. 动画概览

1.1. Rotate

Rotate动画类是Manim中用于旋转Mobject对象的工具。

通过设定旋转的角度、轴心等参数,Rotate能够实现精确的旋转效果。用户可以指定旋转的起始和终止角度,并调整旋转的速度,从而控制动画的播放速率。

以下是Rotate的主要参数:

参数名称 类型 说明
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对象能够围绕指定的轴或点持续旋转,通常用于创建动态的、循环的旋转场景。

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

以下是Rotating的主要参数:

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

1.3. 两种旋转的差异与联系

RotateRotating在功能上有明显的差异,同时也存在一定的联系。

在差异方面,Rotate专注于精确控制旋转,具有明确的起始和终止角度,适合于需要一次性、角度明确的旋转操作,例如将一个三角形旋转30度以展示特定的几何关系。

Rotating则允许Mobject对象持续旋转,没有终止角度的限制,适合于需要持续动态旋转的场景,如一个持续旋转的风车。

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

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

2. 使用示例

接下来,我们将通过几个示例来展示RotateRotating动画的使用。

2.1. Rotate 时钟指针旋转

在这个示例中,我们使用箭头线段来代表时钟指针,并通过Rotate动画,使其围绕原点从12点位置旋转到3点位置(即旋转90度,对应π/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)

Rotate 时钟指针旋转

2.2. Rotating 风扇叶片旋转

在这个示例中,我们用两个矩形来表示风扇叶片,并使用Rotating动画类,使叶片围绕其中心,沿着垂直屏幕向外的轴持续旋转,一圈又一圈,

文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/4386.html

(0)
LomuLomu
上一篇 2024 年 12 月 26 日
下一篇 2024 年 12 月 26 日

相关推荐

  • 多租户解析与Demo

    在做Saas应用时,多租户解析往往是很重要的组成部分,也是用户访问网站最先处理的逻辑。 文前介绍: 多租户的数据库实现方式主要有三种: 单一数据库实现,每条数据标识租户Id进行识别数据属于哪个租户 一租户一个数据库,能够做到完全的数据隔离 混合模式,部分数据在一张表上,主要是一些基础数据;其他业务数据分库存储。 无论是哪种方式都要知道租户是谁才能查询数据库。…

    2024 年 12 月 30 日
    39500
  • 【实战指南】基于JavaScript的五子棋AI开发:从原理到实现全解析

    🔍【实战指南】基于JavaScript的五子棋AI开发:从原理到实现全解析🔍 📖 开篇:当古典棋类邂逅现代编程 作为中国传统智力游戏的瑰宝,五子棋以其简洁规则蕴含复杂策略。本教程将带领开发者使用纯前端技术构建具备AI对战功能的五子棋系统,并深入剖析背后的算法原理。该项目既是前端工程师提升算法能力的优质案例,也是计算机博弈理论的实践典范。技术架构:原生HTML…

    2025 年 5 月 13 日
    67700
  • 华为OD机试E卷 –英文输入法–24年OD统一考试(Java & JS & Python & C & C++)

    文章目录 题目描述 输入描述 输出描述 用例 JS算法源码 Java算法源码 python算法源码 c算法源码 c++算法源码 题目描述 主管期望你来实现英文输入法单词联想功能。需求如下:• 依据用户输入的单词前缀,从已输入的英文语句中联想出用户想输入的单词,按字典序输出联想到的单词序列,• 如果联想不到,请输出用户输入的单词前缀。 注意: 英文单词联想时,…

    未分类 2025 年 1 月 15 日
    60300
  • 利用Java实现SSE流式通信及前端动态展示效果

    技术概览 1.1 SSE技术解析 服务端推送事件(SSE)SSE是一种轻量级的实时通信协议,支持服务端主动向客户端推送数据更新。该技术基于标准HTTP协议建立持久连接,适用于需要持续数据更新的场景,如金融行情推送、即时通讯等。与传统轮询相比,SSE能显著降低网络开销并提升响应速度。 1.2 流式通信方案对比 SSE与长轮询(Long Polling)是两种常…

    未分类 2025 年 5 月 15 日
    72300
  • Java List 集合详解:基础用法、常见实现类与高频面试题解析

    正文 在 Java 集合框架中,List 是一个非常重要的接口,广泛用于存储有序的元素集合。本文将带你深入了解 List 接口的基本用法、常见实现类及其扩展,同时通过实际代码示例帮助你快速掌握这些知识。 👉点击获取2024Java学习资料 1. 什么是 List? List 是 Java 集合框架中的一个接口,它继承了 Collection 接口,用于存储一…

    未分类 2025 年 1 月 1 日
    42400

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信