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 日

相关推荐

  • MySQL 安装部署

    概述 本文主要介绍如何在 Linux 中以 RPM 包的方式安装 MySQL 并进行相关的初始化配置,文中方案均已实践验证。 操作系统 CentOS 7.6 数据库版本 MySQL 8.4.3 LTS [!NOTE] 说明 本文主要介绍 RPM 包的安装方式,其他安装方法可查阅官网:MySQL :: MySQL 8.4 Reference Manual ::…

    未分类 2025 年 1 月 13 日
    47800
  • Java的栈与队列以及代码实现

    Java中的栈与队列 栈的基本概念(Stack) 栈的实现方式 栈的代码实现 队列(Queue) 队列的模拟实现(双链表) 循环队列(循环数组实现) 使用队列实现栈 使用栈实现队列 总结 栈的基本概念(Stack) 栈是一种基本的线性数据结构,遵循后进先出(LIFO)的原则。这意味着最后加入的元素将是第一个被移除的。栈的应用非常广泛,包括内存分配、表达式求值…

    2024 年 12 月 27 日
    45300
  • 架构-初识BFF

    引言 晚上公司开了一个技术分享会,主要内容就是公司的项目架构,会中讲解了项目整体架构是BFF架构,就是在微服务之上多加了一层。 除此之外,还讲解了DDD设计思想,主要用于各个业务中台,如订单中台、用户中台等。 这是我的架构第一课,听得有些似懂非懂,于是浅浅地整理一下。 BFF 是什么 BFF是服务于前端的后端,全称Backend For Frontend。B…

    2024 年 12 月 30 日
    45000
  • Java内存泄漏问题的高效排查与优化指南

    目录导航1. 系统化诊断与优化框架2. 内存快照获取技术2.1 自动生成堆转储文件2.2 手动创建堆转储文件3. 专业分析工具应用3.1 内存分析工具MAT3.2 性能分析工具JProfiler3.3 企业级专用工具4. 深度排查内存泄漏4.1 内存差异对比分析4.2 可疑泄漏对象检测4.3 内存占用大户识别4.4 不可达对象追踪5. 问题确认与验证6. 代…

    2025 年 5 月 13 日
    29200
  • 微软开源!Office 文档轻松转 Markdown!

    大家好,我是 Java陈序员。 今天,给大家介绍一款微软开源的文档转 Markdown 工具。 关注微信公众号:【Java陈序员】,获取开源项目分享、AI副业分享、超200本经典计算机电子书籍等。 项目介绍 MarkItDown —— 微软开源的 Python 工具,能够将多种常见的文件格式(如 PDF、PowerPoint、Word、Excel、图像、音频…

    2025 年 1 月 10 日
    48800

发表回复

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

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

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

关注微信