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 日

相关推荐

  • IDEA中如何查看最近打开过的文件?

    前言 大家好,我是小徐啊。我们在Java开发的时候,最重要的是选择一款合适的开发工具,像eclipse,IDEA等。其中,IDEA是我平时在开发的时候,用的那一款工具,它功能十分强大。今天,我要来介绍下它的一个功能,就是查看下最近打开过的文件。 IDEA如何查看最近打开的文件 首先,我们需要先打开IDEA,然后按下键盘快捷键,Ctrl+E。 然后,就会弹出一…

    2025 年 1 月 16 日
    15500
  • Java-异常处理机制-try-catch

    Java-异常处理机制 一、异常概述 1、异常的抛出机制 2、如何对待异常 3、异常的体系结构 3.1、Throwable 3.2、Error和Exception 3.3、编译时异常和运行时异常 3.4、常见的异常有哪些? 二、异常的处理方式一 try-catch的使用 1、过程1:抛 2、过程2:抓 3、使用细节 4、运行时异常案例 5、编译型异常案例 6…

    2025 年 1 月 6 日
    15100
  • 《深入理解Mybatis原理》MyBatis事务管理机制

    概述 对数据库的事务而言,应该具有以下几点:创建(create)、提交(commit)、回滚(rollback)、关闭(close)。对应地,MyBatis将事务抽象成了Transaction接口: MyBatis的事务管理分为两种形式: 使用JDBC的事务管理机制 :即利用java.sql.Connection对象完成对事务的提交(commit())、回滚…

    2025 年 1 月 14 日
    14700
  • 深入理解 Java 接口的回调机制

    前言 回调是一种非常重要的编程技术,它广泛应用于事件驱动的编程、异步任务和框架设计中。在 Java 中,回调机制通常通过 接口 来实现。本篇博客将详细解析 Java 接口的回调原理、实现方式,以及实际开发中的应用场景。 泪崩了,期末JAVA编程考了回调,小编不会。 一、什么是回调? 回调(Callback) 是指通过将一个方法作为参数传递给另一个方法,在某些…

    2025 年 1 月 12 日
    7600
  • 【Java 学习】详讲代码块:控制流语句代码块、方法代码块、实例代码块(构造代码块)、静态代码块、同步代码块

    💬 欢迎讨论:如对文章内容有疑问或见解,欢迎在评论区留言,我需要您的帮助! 👍 点赞、收藏与分享:如果这篇文章对您有所帮助,请不吝点赞、收藏或分享,谢谢您的支持! 🚀 传播技术之美:期待您将这篇文章推荐给更多对需要学习Java语言、低代码开发感兴趣的朋友,让我们共同学习、成长! 1. 什么是代码块? 在学习各种语言的时候,有些语句需要使用{}将代码围起来,有…

    2025 年 1 月 17 日
    16300

发表回复

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

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

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

关注微信