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 Slow Query Log

    1. 问题概述 在分析 Slow Query Log 时,记录下的SQL语句,明明会对一张表执行全表扫描,可为什么慢日志中的 Rows_sent 、Rows_examined 和表的真实记录数也是不一样,甚至相差N多倍。还有一个细节就是上述的SQL语句,执行多次,在慢日志中记录下多条记录,记录之间Rows_sent 、Rows_examined也差别明显。 …

    未分类 2025 年 1 月 16 日
    58900
  • Java 零基础入门学习(小白也能看懂!)

    📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 |《Web世界探险家》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️ 🙏小杨水平有限,欢迎各位大佬指点,相互学习进步! 小杨近些在学习人工智能方面的知识,发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默…

    2025 年 1 月 14 日
    43200
  • python SQLAlchemy ORM——从零开始学习 01 安装库

    01基础库 1-1安装 依赖库:sqlalchemy “`python pip install sqlalchemy #直接安装即可 “` 1-2导入使用 这里讲解思路【个人的理解】,具体写其实就是这个框架: 导入必要的接口【有创建engine以及declarative_base】 通过create_engine接口创建engine,根据翻译可以翻译成引…

    2025 年 1 月 12 日
    46700
  • JavaScript 延迟加载的方法( 7种 )

    JavaScript脚本的延迟加载(也称为懒加载)是指在网页的主要内容已经加载并显示给用户之后,再加载或执行额外的JavaScript代码。这样做可以加快页面的初始加载速度,改善用户体验,并减少服务器的压力。 以下是几种常见的延迟加载JavaScript的方法: defer 属性: 使用 async 属性: async 属性告诉浏览器立即开始下载脚本,并且在…

    2025 年 1 月 5 日
    52500
  • 架构-初识BFF

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

    2024 年 12 月 30 日
    50800

发表回复

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

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

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

关注微信