新闻详情

新闻详情

首页 / 资讯中心 / 详情

ManimCE 坐标系统完全指南:Axes、NumberPlane 与坐标转换实战

发布时间:2026/9/10 15:04:23来源:尧图网络
ManimCE 坐标系统完全指南:Axes、NumberPlane 与坐标转换实战
ManimCE 坐标系统完全指南Axes、NumberPlane 与坐标转换实战【免费下载链接】OpenMontageWorlds first open-source, agentic video production system. 12 production pipelines, 100 tools, 700 agent skill and production-knowledge files. Turn your AI coding assistant into a full video production studio.项目地址: https://gitcode.com/GitHub_Trending/op/OpenMontageManimManim Community Edition中所有数学可视化都建立在坐标系之上无论是绘制函数曲线、标注点与向量还是构建三维场景都需要先理解Axes、NumberPlane、ComplexPlane、NumberLine和ThreeDAxes这一族坐标 Mobject 的用法与差异。本文以 OpenMontage 仓库中 manimce-best-practices 技能 的 axes 规则文件 为核心骨架结合仓库内的 graph_plotting.py 完整示例 与 graphing 规则、3d 规则 等配套文档系统讲解坐标系的创建、定制、坐标转换与绘图实践帮助你在一开始就建立正确的坐标心智模型避免“坐标系画歪、坐标换算出错”这类最常见的 Manim 入门坑。一、ManimCE 坐标系统家族一览在 ManimCE 中坐标类都继承自CoordinateSystem抽象基类它们负责在“数学坐标”与“屏幕坐标”之间建立映射。按使用场景可分为五类类名用途典型场景Axes2D 坐标轴仅轴线无网格绘制函数图像、标注数据点NumberPlane带网格线的坐标平面展示向量、线性变换、平移缩放等几何操作ComplexPlane复平面NumberPlane的子类可视化复数、复变函数NumberLine单条数轴一维区间、数列、时间轴ThreeDAxes3D 坐标轴三维曲面、空间曲线、向量场它们共享同一套核心机制用x_range/y_range/z_range定义数学取值区间用x_length/y_length/z_length定义屏幕上的物理长度。Manim 据此计算每个数学坐标对应的屏幕像素位置你后续用c2p等转换方法做的所有坐标运算都基于这套映射。注意本技能针对的是Manim Communityfrom manim import *、CLI 为manim并非 3b1b 的 ManimGLfrom manimlib import *、CLI 为manimgl。两者的坐标类 API 差异很大阅读任何教程前请先确认版本归属详见 SKILL.md。二、Axes最基础的二维坐标轴Axes是最常用的坐标类只绘制两条轴线默认不画网格。创建一个默认坐标轴只需两行代码from manim import * class AxesExample(Scene): def construct(self): # 默认轴x 范围 [-config.frame_x_radius, config.frame_x_radius] # y 范围同理刻度步长为 1长度自动适配画布 axes Axes() self.add(axes)默认Axes()会使用画布半宽/半高作为坐标范围且不显示数字刻度。在真实项目中几乎总是需要显式定制见下一节。三、定制 Axes区间、长度与轴配置Axes的全部关键参数都可以通过构造函数传入class CustomAxes(Scene): def construct(self): axes Axes( x_range[-5, 5, 1], # [min, max, step]x 从 -5 到 5步长 1 y_range[-3, 3, 1], # y 从 -3 到 3步长 1 x_length10, # 轴在屏幕上的物理长度单位Manim 长度单位 y_length6, axis_config{ color: BLUE, # 轴线颜色 include_tip: True, # 是否在轴末端画箭头 include_numbers: True, # 是否显示刻度数字 }, x_axis_config{ numbers_to_include: [-4, -2, 0, 2, 4], # 只显示这些刻度 }, y_axis_config{ numbers_to_include: [-2, 0, 2], }, ) self.add(axes)参数说明x_range/y_range三元列表[min, max, step]决定数学区间与刻度密度。step省略时默认为 1也可以只给[min, max]。x_length/y_length坐标轴在屏幕上的物理长度。Manim 坐标单位中标准 16:9 画布横向半宽约为 7.11因此x_length10是一条较宽的轴。axis_config同时应用于 x 轴与 y 轴的公共配置字典支持color、include_tip、include_numbers、tip_width、tip_height、stroke_width、font_size等。x_axis_config/y_axis_config分别覆盖单条轴的配置可进一步细化numbers_to_include只显示指定刻度、number_scale_value等。仓库中的完整示例 graph_plotting.py 里的BasicAxes场景展示了与上述等价的生产级写法并配合Create(axes)动画入场axes Axes( x_range[-3, 3, 1], y_range[-2, 2, 1], x_length8, y_length5, axis_config{include_tip: True, include_numbers: True}, ) self.play(Create(axes), Write(x_label), Write(y_label))关于 include_numbers 与 numbers_to_include 的取舍include_numbersTrue会给每个 step 位置生成刻度数字。当区间大、步长小时刻度数字会挤成一团。两个常用的节制手段增大step例如x_range[-5, 5, 2]用numbers_to_include白名单只显示关键刻度。这正是 axes.md 最佳实践第 5 条“数字宁可少而精”的落地方式。四、添加轴标签坐标轴本身只是线数学含义要靠标签传达。Axes提供get_x_axis_label与get_y_axis_label两个方法可直接传入字符串或MathTex/Tex对象class AxesLabels(Scene): def construct(self): axes Axes(x_range[-5, 5], y_range[-3, 3]) # 方法一普通字符串标签 x_label axes.get_x_axis_label(x) y_label axes.get_y_axis_label(y) # 方法二LaTeX 数学标签推荐用于公式类符号 x_label axes.get_x_axis_label(MathTex(r\theta)) y_label axes.get_y_axis_label(MathTex(rf(\theta))) self.add(axes, x_label, y_label)两个方法还支持edge、direction、buff等参数用于微调标签相对轴端的位置。在 graph_plotting.py 中BasicAxes场景将标签与轴的创建动画组合在一起让 x/y 标签随坐标轴一起Write进场视觉上更连贯。对于函数图像本身的标注则应使用get_graph_label见第七节。五、NumberPlane带网格的坐标平面NumberPlane在坐标轴之外额外绘制背景网格线是展示“空间变换”的首选——网格一旦发生弯曲或拉伸观众能立刻感知到变换的几何效果这正是 axes.md 最佳实践第 3 条推荐“变换用 NumberPlane”的原因。class NumberPlaneExample(Scene): def construct(self): # 默认平面网格覆盖整个画布轴线为白色 plane NumberPlane() self.add(plane)定制 NumberPlaneclass CustomPlane(Scene): def construct(self): plane NumberPlane( x_range[-4, 4, 1], y_range[-3, 3, 1], x_length8, y_length6, background_line_style{ stroke_color: BLUE_D, # 网格线颜色 stroke_width: 1, # 细网格线 stroke_opacity: 0.5, # 半透明避免抢主线风头 }, axis_config{ color: WHITE, # 主轴仍用白色 }, ) self.add(plane)关键配置点background_line_style控制网格线的样式典型做法是“细、半透明、低饱和颜色”让轴线在视觉上比网格更突出。axis_config主轴配置通常比网格更醒目。除background_line_style外NumberPlane还支持faded_line_style、faded_line_ratio次要网格线淡化比例等参数。仓库示例 graph_plotting.py 的NumberPlaneExample场景给出了一个完整的生产用法在平面上用plane.c2p(2, 3)定位点、用Arrow(plane.c2p(0,0), plane.c2p(2,3))画从原点到该点的向量同时用Write(point_label)标注坐标(2, 3)——网格的存在让向量方向与长度一目了然plane NumberPlane( x_range[-7, 7, 1], y_range[-4, 4, 1], background_line_style{ stroke_color: BLUE_D, stroke_width: 1, stroke_opacity: 0.5, }, ) point Dot(plane.c2p(2, 3), colorRED, radius0.15) vector Arrow(plane.c2p(0, 0), plane.c2p(2, 3), buff0, colorYELLOW)六、ComplexPlane 与 NumberLine复平面与单条数轴ComplexPlaneComplexPlane继承自NumberPlane语义上把坐标平面当作复平面。它最大的价值在于提供了复数与屏幕位置的直接换算方法n2p/p2nclass ComplexPlaneExample(Scene): def construct(self): plane ComplexPlane() # 绘制复数 z 2 i z complex(2, 1) # 2 i dot Dot(plane.n2p(z), colorYELLOW) # n2p: 复数 - 屏幕点 label MathTex(2i).next_to(dot, UR) self.add(plane, dot, label)plane.n2p(z)接收一个 Pythoncomplex对象如complex(2, 1)表示 2i返回屏幕坐标点反过来plane.p2n(point)把屏幕点还原为复数。写复变函数可视化时这套转换是标配。NumberLineNumberLine是单条一维数轴适合展示数列、区间、时间轴等一维信息class NumberLineExample(Scene): def construct(self): line NumberLine( x_range[-5, 5, 1], # 一维区间 length10, # 屏幕长度 include_numbersTrue, # 显示刻度数字 include_tipTrue, # 末端箭头 ) self.add(line)NumberLine同样支持numbers_to_include、number_scale_value等刻度控制参数且沿用它自身的n2p/p2n方法在数值与屏幕位置之间转换。七、坐标转换c2p / p2c / i2gp / n2p / p2n所有坐标类的核心能力都是“数学坐标 ↔ 屏幕坐标”的双向转换。这套 API 是 Manim 坐标体系的命脉务必熟练掌握class CoordinateConversion(Scene): def construct(self): axes Axes(x_range[-5, 5], y_range[-3, 3]) # 数学坐标 - 屏幕位置 point axes.c2p(2, 1) # coords_to_point: (2, 1) - 屏幕点 # 屏幕位置 - 数学坐标 coords axes.p2c(point) # point_to_coords: 屏幕点 - (x, y) dot Dot(point, colorRED) self.add(axes, dot)速记方法对照表方法全称作用适用类c2p(x, y)coords_to_point数学坐标 → 屏幕点Axes、NumberPlane 等p2c(point)point_to_coords屏幕点 → 数学坐标Axes、NumberPlane 等i2gp(x, graph)input_to_graph_point给定 x求函数图像上的屏幕点所有带 graph 的坐标系n2p(complex)number_to_point复数 → 屏幕点NumberPlane、ComplexPlane、NumberLinep2n(point)point_to_number屏幕点 → 复数/数值NumberPlane、ComplexPlane、NumberLine为什么必须用 c2p 而不是手算Manim 的画布并非“1 坐标 1 像素”坐标范围、物理长度、画布宽高比都会影响换算结果。axes.md 最佳实践第 4 条明确要求“所有坐标工作都走 c2p不要手动换算”——自己用x * scale offset算位置一旦调整x_range或x_length就会全盘错位而c2p永远与当前坐标系一致。i2gp 的典型应用让点沿函数曲线滑动graphing.md 中有一个非常实用的组合用ValueTracker驱动参数、always_redrawi2gp让点实时吸附在曲线上class MovingPointOnGraph(Scene): def construct(self): axes Axes(x_range[-3, 3], y_range[-2, 2]) graph axes.plot(lambda x: np.sin(x), colorBLUE) x_tracker ValueTracker(-3) # 点始终位于曲线上 x_tracker 对应的位置 dot always_redraw(lambda: Dot( axes.i2gp(x_tracker.get_value(), graph), colorYELLOW )) self.add(axes, graph, dot) self.play(x_tracker.animate.set_value(3), run_time4)i2gp(x, graph)接收 x 值与该图像对象返回曲线上对应点的屏幕坐标配合always_redraw实现“动点沿曲线移动”的动态效果这也是 updaters 规则 中动态可视化模式的基础。八、ThreeDAxes三维坐标轴三维可视化使用ThreeDAxes继承自Axes在 x/y 之外增加 z 轴。它必须搭配ThreeDScene使用并通过set_camera_orientation设置观察角度class ThreeDAxesExample(ThreeDScene): def construct(self): axes ThreeDAxes( x_range[-4, 4, 1], y_range[-4, 4, 1], z_range[-4, 4, 1], x_length8, y_length8, z_length6, ) # phi: 从 z 轴正方向看下的俯仰角0 为俯视90 为平视 # theta: 绕 z 轴的水平旋转角 self.set_camera_orientation(phi75 * DEGREES, theta-45 * DEGREES) self.add(axes)要点三个方向都用[min, max, step]与对应的*_length定义注意 x/y/z 的物理长度比会直接影响 3D 视觉比例3d 规则 建议区间与长度比匹配避免立体图形被拉伸变形。不设置set_camera_orientation时默认视角几乎看不到三维感因此 3d.md 的最佳实践第一条就是“永远显式设置相机朝向”。ThreeDAxes同样提供get_x_axis_label/get_y_axis_label/get_z_axis_label三轴标签方法。在三维坐标系上可以继续调用plot_surface绘制曲面z f(x,y)配合colorscale用颜色表示高度变化完整示例见 3d.md 的SurfacePlot场景。九、在坐标系上绘图plot 与配套方法坐标系建好后graphing.md 提供了与坐标系配套的一整套绘图 API它们是坐标系的直接受益者class FunctionPlotting(Scene): def construct(self): axes Axes(x_range[-3, 3, 1], y_range[-1, 9, 2], x_length8, y_length5, axis_config{include_numbers: True}) # 绘制 y x^2 parabola axes.plot(lambda x: x ** 2, colorBLUE, x_range[-3, 3]) # 用 LaTeX 标注函数 label MathTex(ry x^2, colorBLUE).next_to(parabola, UR) self.play(Create(axes)) self.play(Create(parabola), Write(label)) self.wait()常用绘图方法速查方法作用关键参数axes.plot(func, x_range, color, stroke_width)绘制显式函数 yf(x)x_range限制定义域可避开断点axes.plot_parametric_curve(func, t_range, color)绘制参数曲线如圆、Lissajous 曲线、心形线func返回np.array([x, y, z])axes.get_graph_label(graph, label, x_val, direction)在曲线上某点标注公式x_val指定标注横坐标axes.get_area(graph, x_range, color, opacity)填充曲线与 x 轴之间的面积常用于积分可视化axes.get_riemann_rectangles(graph, x_range, dx, ...)生成黎曼和矩形dx越小越逼近面积axes.plot_surface(func, u_range, v_range, colorscale)绘制三维曲面仅ThreeDAxes实战组合积分可视化graph_plotting.py 的AreaUnderCurve场景把“坐标系 函数 面积 公式”完整串起来是教科书式的组合示例class AreaUnderCurve(Scene): def construct(self): axes Axes(x_range[0, 5, 1], y_range[0, 10, 2], x_length8, y_length5) func axes.plot(lambda x: 0.5 * x ** 2, colorBLUE, x_range[0, 4]) # 填充 x1 到 x3 的曲边梯形 area axes.get_area(func, x_range[1, 3], colorBLUE, opacity0.3) integral MathTex(r\int_1^3 \frac{x^2}{2} \, dx, font_size48).to_corner(UR) self.play(Create(axes), Create(func), FadeIn(area), Write(integral)) self.wait()同一文件中还包含TangentLine切线斜率标注、RiemannSumdx 从 1 细化到 0.25 的黎曼和逼近、AnimatedGraphValueTracker驱动振幅实时重绘等可直接运行参考的场景建议完整阅读后作为自己项目的模板。十、坐标与画布让坐标系自适应坐标系是“数学空间”画布是“物理空间”二者通过config关联。Manim 的默认画布为 16:9pixel_width1920, pixel_height1080半宽config.frame_width/2约 7.11半高约 4.0。坐标轴的x_length/y_length就是在该物理画布上占据的长度设置时应留出标签与标题的空间。如需统一调整项目级渲染参数可在manim.cfg中配置详见 config 规则[CLI] quality high_quality frame_rate 60 pixel_width 1920 pixel_height 1080 [renderer] background_color #0d1117渲染命令编写完场景后用 CLI 渲染细节见 cli 规则# 开发期低质量 自动预览快速迭代 manim -pql my_scene.py CustomAxes # 成片期高质量渲染 manim -pqh my_scene.py CustomAxes也可以参考 basic_scene.py 模板 的组织方式construct内按 SETUP / ANIMATION / CLEANUP 三段组织代码。十一、坐标系最佳实践清单综合 axes.md 与仓库配套规则在使用坐标系统时请遵循以下原则设置恰当的区间Set appropriate rangesx_range/y_range只覆盖数据需要的范围不要包含大片无意义的空白区域否则画面空荡、内容过小。x_length/y_length 与区间比例匹配Match length to range ratio若 x 区间为 10 而 y 区间为 2却让两轴物理长度相等图形会被垂直拉伸失真。合理的做法是让物理长度比近似等于区间比或按展示重点有意调整并知晓其视觉效果。变换场景用 NumberPlaneUse NumberPlane for transformations网格能直观展示平移、缩放、剪切等线性变换造成的形变纯Axes没有网格参照变换效果难以感知。所有坐标换算走 c2pUse c2p for all coordinate work不要手动计算屏幕位置c2p/n2p/i2gp会随着坐标配置自动保持正确。刻度数字宁缺毋滥Include numbers sparingly用step和numbers_to_include控制刻度密度数字过多会淹没图形本身。十二、小结ManimCE 的坐标系统是整个可视化管线的地基Axes负责干净利落的 2D 函数绘图NumberPlane承担网格参照下的变换展示ComplexPlane服务复数运算NumberLine处理一维序列ThreeDAxes通向三维空间。而c2p/p2c/i2gp/n2p/p2n这套转换方法则像“通用语言”把数学世界与屏幕世界无缝衔接。掌握它们之后再结合 graphing.md 的绘图 API 与 3d.md 的三维扩展就能系统性地构建从函数图像到立体曲面的各类数学动画。本技能所属的 OpenMontage 项目还提供了 manim-usage 创意技能 与其他数学动画工具链如 math_animate.py 工具 及其 测试用例可以作为 Manim 落地到实际视频生产流程的延伸参考。建议将本文中的示例保存为.py文件后逐一渲染亲手感受坐标系配置对成片效果的影响。【免费下载链接】OpenMontageWorlds first open-source, agentic video production system. 12 production pipelines, 100 tools, 700 agent skill and production-knowledge files. Turn your AI coding assistant into a full video production studio.项目地址: https://gitcode.com/GitHub_Trending/op/OpenMontage创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

InvokeAI 默认工作流(Default Workflows)机制全解析:同步原理、JSON 规范与发布校验 2026/9/10 15:53:15

InvokeAI 默认工作流(Default Workflows)机制全解析:同步原理、JSON 规范与发布校验

InvokeAI 默认工作流(Default Workflows)机制全解析:同步原理、JSON 规范与发布校验 【免费下载链接】InvokeAI Invoke is a leading creative engine for Stable Diffusion models, empowering professionals, artists, and enthusiasts to …

阅读更多 →
Linux下SQLite3在线词典数据库设计与优化实践 2026/9/10 15:53:15

Linux下SQLite3在线词典数据库设计与优化实践

1. 项目概述在Linux环境下开发一个在线词典应用,数据库的实现是整个系统的核心模块。这个看似简单的功能背后,涉及到数据库选型、表结构设计、查询优化等一系列关键技术点。作为一名长期从事Linux应用开发的工程师,我发现很多初学者在实现这类…

阅读更多 →
计算机数制系统:二进制、十六进制转换与应用 2026/9/10 15:53:15

计算机数制系统:二进制、十六进制转换与应用

1. 数制系统基础概念解析数制系统(Number System)是数学和计算机科学中最基础的框架之一,它定义了如何用有限的符号组合来表示无限的数字世界。就像不同国家使用不同语言交流一样,数字世界也存在多种"方言"——十进制、…

阅读更多 →
昇腾GE销毁AIPP配置接口 2026/9/10 15:53:15

昇腾GE销毁AIPP配置接口

aclmdlDestroyAIPP 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、TensorF…

阅读更多 →
51单片机计算器完整工程:从Keil编程到PCB制板全流程 2026/9/10 15:53:15

51单片机计算器完整工程:从Keil编程到PCB制板全流程

简介:本资源是一套面向电子类专业学生与单片机初学者的51单片机实践项目资料,聚焦嵌入式系统开发全流程训练,解决从理论设计到实物调试的落地难题。压缩包为RAR格式,共含完整工程文件,涵盖Altium Designer绘制的PCB原理…

阅读更多 →
JAVA计算机毕设之基于 SpringBoot 与 Vue 的小区智能停车管理系统的设计与开发 基于 SpringBoot 架构的停车场信息管理系统(完整前后端代码+说明文档+LW,调试定制等) 2026/9/10 15:50:12

JAVA计算机毕设之基于 SpringBoot 与 Vue 的小区智能停车管理系统的设计与开发 基于 SpringBoot 架构的停车场信息管理系统(完整前后端代码+说明文档+LW,调试定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞