manim
未读
相机(Camera)在二维的场景下使用不多,一般在3D场景中提及的比较多。 相机相当于我们看动画的视角,简单来理解的话,相当于我们的眼睛(实际情况会复杂一些,相机还有其他一些辅助功能)。默认的相机焦点在屏幕的中心位置,相机默认是以俯视的视角查看所有的元素。
之前的介绍的常用动画效果和高级动画效果,都没有对相机进行调整过,所以,是通过移动和变换各个元素来实现动画效果。
本篇介绍的相机,则是另一种制作动画的方式,它不改变元素在屏幕或者说在坐标系中的位置, 通过改变相机的位置和角度来实现动画效果。
举个现实世界中的简单例子,如果有个杯子,我们可以通过转动杯子来从各个角度观察杯子; 而如果是一栋楼的话,我们无法移动它,只能围着楼走一圈来观察它,这个过程就相当于移动相机。
下面通过一些实例来看看移动相机带来的不一样的动画效果。
1. 相机移动相机移动常用的两种方式:
移动焦点:改变相机的焦点,焦点在那个元素,那个元素就会在屏幕中心
改变视野:改变相机与元素的距离,离得越远,物体越小。
1.1 移动焦点manim中移动焦点要继承 MovingCameraScene类, 然后通过 self. ...
manim
未读
在常用的动画效果中,介绍了一些元素的创建,销毁,移动和变换的方法,这些方法都是针对单个动画的。 如果需要多个动画互相关联,或者元素需要有更复杂的运动方式,那么,仅仅依靠常用的动画效果可能就无法满足要求了。
本篇的高级动画效果主要介绍一些更加灵活的元素运动方式,如何组合多个动画,以及如何联动多个动画的方式。 掌握了这些方法,就能够表达出更加复杂的数学几何动画。
1. 沿着路径运动常用的动画一般都是直线运动或者圆弧运动,而 MoveAlongPath 可以让元素沿着任意的函数轨迹来运动。下面的示例是一个点沿着一个较为复杂的三角函数形成的路径运动。
1234567cos_func = FunctionGraph( lambda t: np.cos(t) + 0.5 * np.cos(7 * t) + (1 / 7) * np.cos(14 * t), color=RED,)sc.add(cos_func)d1 = dot(cos_func.get_start())sc.play(MoveAlongPath(d1, cos_func), rate_func=linear, run ...
manim
未读
本篇介绍Manim中的两个旋转类的动画,名称差不多,分别是Rotate和Rotating。
Rotate类主要用于对图形对象进行指定角度、围绕特定点的精确旋转,适用于几何图形演示、物理模拟和机械运动展示等场景;
Rotating类则侧重于创建让对象围绕指定轴或点持续旋转的动画,用于动态图标、天体运动模拟和装饰性动态元素等场景。
1. 动画概述1.1. RotateRotate是一个用于对Mobject进行旋转的动画类。
它通过指定旋转角度、旋转轴等参数来实现精确的旋转效果,例如,它可以围绕特定点(如对象的中心或者自定义的点)进行旋转。
此外,还可以设置旋转的起始角度和终止角度,并且可以指定旋转的速率,通过控制动画运行的时间来调整旋转的快慢。
它的主要参数有:
参数名称
类型
说明
mobject
Mobject
要旋转的Mobject对象
angle
float
旋转角度,以弧度为单位指定
axis
np.ndarray
旋转轴,用向量表示
about_point
[float]
旋转中心
about_edge
[float]
指定边界框点的方向作为旋转中 ...
manim
未读manim的主要功能就是制作动画,因此它提供了各类丰富的动画效果,本篇主要介绍其中最常用的几种动画效果。至于特殊的动画效果,以及自定义动画效果的方法以后再另外介绍。
1. 创建效果展示某个元素或者文字时,一下子就全显示出来会显得比较突兀,通过创建效果的动画,让各个元素的出现更加的自然。 常用的创建效果动画主要有:Create,Write和FadeIn三个方法。
1.1 CreateCreate一般用在创建图形上,绘制时图形逐步显示出来。 比如:
12s = Square(side_length=2, color=BLUE)self.play(Create(s))
运行效果:
1.2 WriteWrite用在文字的创建上,绘制文字时逐个显示文字。 比如:
123456t = Text( "Welcome to Manim", t2c={"Welcome": BLUE, "Manim": RED}, t2f={"Manim": "STCaiyun& ...
做 Hexo 博客有一个避免不了的问题,就是如何更快更好地发布到网站上,因为 Hexo 是本地静态博客,发布到网站上就需要与服务器链接,常见的链接种类很多但是最常用的还是 Git 链接,毕竟安全有效,可问题如果使用 Git 链接发布,就需要给服务器创建 Git账户 并给与相关的权限。
今天这篇文章,主要是介绍如何给服务器创建` Git账户 ,和利用宝塔面板创建 Hexo 博客网站。
1.配置SSH配置SSH密钥,实现免密登录(首次提交时仍需要验证密码),如之前配过可跳过此步。首先是使用本地的Git软件,桌面右键选择Git Bash Here
1$ ssh-keygen -t rsa -C "邮箱地址"
设置好邮箱之后,就是连续敲回车确定,然后看到提示秘钥以保存在本地的xxx/用户/xxx路径下,如果没有出现提示就多敲几次回车,在提示路径下找到id_rsa文件,记住复制文件内容,下面配置Git时会用到。下图是使用服务器登录对话框创建公钥,同样需要记住公钥生成的文件路径,准备复制。
如果使用的服务器的SSH链接,这个文件路径是服务器的路径,此时复制文 ...
做Manim动画久了,你是否厌倦了那万年不变的黑色虚空?很多初学者(甚至老手)都想给动画加个背景图,但往往会遇到两个问题:
怎么加 是把图片放进去,还是设置相机?
看不清 背景花里胡哨,前面的文字公式瞬间“隐身”了。
今天,我们就来揭开Manim动画中一个简单却强大的技巧–为动画添加背景。通过几个小示例,分别演示两种完全不同的背景处理思路。
1. 舞台布景法使用ImageMobject类,这是最直观、最常用的方法。它的逻辑是:背景图片只是舞台上的一个普通演员,只是它长得特别大,而且站得特别靠后。
这种方式的特点是:
高度灵活:背景就是个对象(Mobject),所以它可以动!你可以让背景旋转、平移、缩放,甚至改变颜色。
层级管理:需要手动把它的 z_index 设低,或者最先添加它。
下面的第一个示例中,实现一个简单的动态背景,操作背景和操作一般的Mobject是一样的。
123456789101112131415161718192021222324252627class Method1ImageMobject(Scene): def construct(self): ...
我们在作几何图像的时候,难免会涉及两线垂直的情况,从几何常识的角度思考,此时我们就需要添加一个垂直符号,更加直观的告诉观察者,这两条线是垂直的位置关系,今天我们就来学习探究这个知识点,如何在相互垂直的两线交点处添加一个垂直符号。在Manim中,RightAngle 是用于绘制直角的几何对象。以下是关于它的详细说明:
1.参数说明123456789RightAngle( line1, # 第一条线段 line2, # 第二条线段 length=0.25, # 直角边长度(默认0.25) quadrant=(-1, 1), # 直角所在象限 stroke_width=2, # 线宽 color=WHITE, # 颜色 **kwargs)
2.参数分析从参数来看,直角所在的象限理解起来有点问题,互联网查了查资料,发现这个象限,并不是笛卡尔坐标系的象限,在数学常识中,笛卡尔坐标系的象限是
第一象限:x>0, y>0(右上)
第二象限:x<0, y>0(左上)
第三象限:x&l ...
manim
未读
在 Manim 动画制作中,Transform、TransformFromCopy、ReplacementTransform和Restore是四个通用的对象变换动画类。这几个类能够实现从一个对象到另一个对象的平滑过渡、复制并变换、直接替换以及状态恢复等多种效果。
Transform:将一个Mobject平滑地变换为另一个Mobject
TransformFromCopy:从一个对象复制出一个副本,并将该副本变换为目标对象
ReplacementTransform:将一个Mobject替换为另一个 Mobject,并且在变换过程中,原始对象会被目标对象完全替代
Restore:将一个Mobject恢复到其之前保存的状态时使用
通过这些动画类,我们可以清晰地展示对象之间的关系、强调变换过程、突出替换逻辑,以及灵活地在不同状态之间切换。它们在数学公式推导、图形变换、场景切换等场景中发挥着重要作用,为动画制作提供了强大的工具,帮助创作者以直观且富有表现力的方式呈现复杂的概念和过程。
1. 动画概述1.1. TransformTransform用于将一个Mobject平滑地变换为另一个Mo ...
manim
未读
做数学动画视频的软件还是比较丰富的,但是个人观点最酷的还是Manim,这款数学视频制作软件的使用难度也是很大的,需要一定的编程知识,制作数学视频时,各类几何图形是使用最频繁的。一般来说,常用的几何图形包括:点,线,圆以及多边形。
1. 点点是最简单图形,也是其他所有图形的基础。绘制其他任何图形时,都是用点来定位的。manim中生成一个点很方便,只要给定一个坐标即可。这里的坐标包含 [x, y, z]3个维度,如果绘制二维图形,将第三个坐标 z固定为 0。
1234567class DotSample(Scene): def construct(self): # 绘制 9个点 for x in range(-1, 2): for y in range(1, -2, -1): p = Dot([x, y, 0]) self.play(Create(p), run_time=0.5)
按照 3x3的格式绘制9个点
1manim -p .\samples.py DotSam ...
manim
未读
数轴是数学中的一个基本概念,它规定了原点、正方向和单位长度的直线。Manim中的NumberLine就是一个专门用来表示数轴的对象,它允许用户设置数轴的范围、间隔和显示长度等参数,从而灵活地在动画中展示数学中的一维数值变化。下面将介绍Manim中的NumberLine对象的基本功能到使用示例。
1. 主要参数NumberLine的参数很多,定制性很强,能够满足各式各样对于数轴显示的需求。
参数名称
类型
说明
x_range
Sequence[float]
数轴刻度的范围
length
float
数轴的长度
unit_size
float
刻度之间的距离
include_ticks
bool
是否包含刻度
tick_size
float
刻度标记的长度
numbers_with_elongated_ticks
Iterable[float]
拉伸的特殊刻度列表
longer_tick_multiple
int
被拉伸刻度的拉伸比例
rotation
float
数轴旋转的角度
stroke_width
float
数轴线的粗细
inc ...
manim
未读
本篇介绍Manim中两个和动画轨迹相关的类,AnimatedBoundary和TracedPath。AnimatedBoundary聚焦于图形边界的动态呈现,能精准控制边界绘制的每一帧,助力我们清晰展示几何图形的搭建流程。TracedPath则擅长实时追踪物体或点的运动轨迹,以直观且动态的方式呈现各类运动路径,为我们分析和展示复杂运动提供了强大支持 。
1. 动画概述1.1. AnimatedBoundary在讲解几何图形(如多边形、圆形等)的构造过程时,AnimatedBoundary可以逐帧展示图形边界的绘制,帮助我们理解图形是如何一步步形成的。
此外,当图形的边界随着某个参数或条件动态变化时,使用 AnimatedBoundary 也可以生动地呈现这种变化。
AnimatedBoundary动画的主要特点在于图形边界的绘制,它能够精确控制边界的出现顺序和方式。
这使得在展示几何图形的构建过程时,能够突出边界这一关键元素,更清楚地展示图形的轮廓是如何形成的。
它的参数主要有:
参数名称
类型
说明
vmobject
VMobject
要应用动画边界的 VMobject ...
manim
未读
在Manim中,ThreeDScene是一个专门为三维场景设计的类。它通过配置三维相机、支持复杂的相机运动以及管理物体与相机的交互关系,为科学可视化、工程仿真、数学教育等领域提供了强大的工具。典型应用场景包括:
三维几何图形的动态演示(如旋转立方体、莫比乌斯环)
物理过程的三维可视化(如分子运动、流体动力学)
交互式数学模型的构建(如曲面方程、向量场分析)
虚拟现实场景的原型开发
1. ThreeDScene概要ThreeDScene是Manim中用于处理三维场景的核心类。与普通的二维场景不同,ThreeDScene提供了对三维空间的全面支持,包括:
三维对象的创建和操作:可以轻松地在三维空间中放置和移动对象
相机的自由移动和旋转:通过调整相机的位置和方向,可以实现多种视角和动画效果
固定对象的显示:某些对象可以被设置为固定在相机帧中,即使相机移动,这些对象也不会改变位置或方向。
1.1. 主要参数ThreeDScene继承自Scene,所有Scene的参数都适用于ThreeDScene,
参数名称
类型
说明
camera_class
Camera
指定使用的相 ...
manim
未读
本文将介绍如何使用ManimCE框架实现镜面反射特效,让你的动画更加生动有趣。
1. 实现原理镜面成像最主要的问题还是需要借助Python,借助Python实现镜面成像,需要引入函数库文件
12from manim import *import numpy as np
1.1. 对称点计算实现镜面反射的核心是计算点关于直线的对称点。代码中的symmetry_point函数通过向量投影的方法计算对称点:
123456789101112131415161718def symmetry_point(p1, p2, p): """计算点p关于由两点p1和p2确定的直线的对称点""" # 转换为numpy数组确保计算正确 p1 = np.array(p1) p2 = np.array(p2) p = np.array(p) # 计算直线的方向向量 direction = p2 - p1 # 计算从p1到p的向量 vec_p1p = p - p1 # 计算投影长度(点p在直线 ...
manim
未读
Manim的线其实都是线段,绘制线只要提供两个点的坐标,Manim中的线主要分为以下几类,涵盖直线、带箭头的线、虚线及特殊类型线,下面我们逐一的进行分析,篇幅有点长,多看几遍,记得收藏。
1.线的一般表达式1234567891011121314Line( start: Sequence[float] = LEFT, end: Sequence[float] = RIGHT, path_arc: float = 0, angle=PI/4, color: Color = WHITE, stroke_width: float = DEFAULT_STROKE_WIDTH, stroke_opacity: float = 1.0, buff: float = 0, line_cap: np.ndarray = np.array([0, 0, 0]), joint_type: str = "auto", line_func: Callable[[np.ndarray, np.ndarray], np.nda ...






