Manim文档及源码笔记-CE文档-示例库3使用Manim绘图

参考原文:
Manim Community Edition
Example Gallery

前言

笔记随想:
暂未发现官方中文版,自己实践代码的同时,顺便做翻译加深理解~
除了给出原文档中的展现效果及源码,我把实践代码过程的笔记也分享出来,另外最后设计出一些技能训练的内容,强化学校效果。行文格式:

示例-标号及名称
展现效果
操作拆解
源码直击
代码实践
技能训练

本示例库包含一系列最佳实践代码片段及其相应的视频/图像输出,展示了整个库的不同功能。这些都是在麻省理工学院的许可下,所以请随意复制并粘贴到您的项目中。享受这Manim的味道!

更新【new】:

  • 8月23日
    • “笔记随想”前后标注了“前言”与“正文”;
    • 本系列暂告段落,把“上一节”、“下一节”升级为系列目录,放到了文尾;
  • 后续更新备忘:文中“【建设中】”的内容;欢迎朋友们催更~

正文

使用Manim绘图,Plotting with Manim

示例1:SinAndCosFunctionPlot

展现效果1

操作拆解1

这节示例1开始,我们做直角坐标系及常见图像;

  • 坐标轴,轴上的取值范围;相应标注;
  • 画sin(x)曲线和cos(x)曲线;相应标注;
  • 在准确的位置画出黄色线段;

源码直击1

%%manim -v WARNING -qm SinAndCosFunctionPlot
from manim import *class SinAndCosFunctionPlot(Scene):def construct(self):axes = Axes(x_range=[-10, 10.3, 1],y_range=[-1.5, 1.5, 1],x_length=10,axis_config={"color": GREEN},x_axis_config={"numbers_to_include": np.arange(-10, 10.01, 2),"numbers_with_elongated_ticks": np.arange(-10, 10.01, 2),},tips=False,)axes_labels = axes.get_axis_labels()sin_graph = axes.plot(lambda x: np.sin(x), color=BLUE)cos_graph = axes.plot(lambda x: np.cos(x), color=RED)sin_label = axes.get_graph_label(sin_graph, "\\sin(x)", x_val=-10, direction=UP / 2)cos_label = axes.get_graph_label(cos_graph, label="\\cos(x)")vert_line = axes.get_vertical_line(axes.i2gp(TAU, cos_graph), color=YELLOW, line_func=Line)line_label = axes.get_graph_label(cos_graph, "x=2\pi", x_val=TAU, direction=UR, color=WHITE)plot = VGroup(axes, sin_graph, cos_graph, vert_line)labels = VGroup(axes_labels, sin_label, cos_label, line_label)self.add(plot, labels)

参考:coordinate_systems,MathTex,plot(),get_vertical_line_to_graph(),input_to_graph_point(),get_axis_labels()

代码实践1

技能训练1

单独整理到此【建设中】

示例2:ArgMinExample

展现效果2

ArgMinExample

操作拆解2

抛物线上的动点动画;

  • 建立坐标系;
  • 定义抛物线:2(x-5)^2;

源码直击2

%%manim -v WARNING -qm ArgMinExample
from manim import *class ArgMinExample(Scene):def construct(self):ax = Axes(x_range=[0, 10], y_range=[0, 100, 10], axis_config={"include_tip": False})labels = ax.get_axis_labels(x_label="x", y_label="f(x)")t = ValueTracker(0)def func(x):return 2 * (x - 5) ** 2graph = ax.plot(func, color=MAROON)initial_point = [ax.coords_to_point(t.get_value(), func(t.get_value()))]dot = Dot(point=initial_point)dot.add_updater(lambda x: x.move_to(ax.c2p(t.get_value(), func(t.get_value()))))x_space = np.linspace(*ax.x_range[:2],200)minimum_index = func(x_space).argmin()self.add(ax, labels, graph, dot)self.play(t.animate.set_value(x_space[minimum_index]))self.wait()

参考:(无)

代码实践2

技能训练2

单独整理到此【建设中】

示例3:GraphAreaPlot

展现效果3

操作拆解3

曲线与x轴之间的一部分面积,两曲线之间的一些面积;

  • 画坐标系;
  • 画2条曲线;
  • 面积阴影位置确定和画法;

源码直击3

%%manim -v WARNING -qm GraphAreaPlot
from manim import *class GraphAreaPlot(Scene):def construct(self):ax = Axes(x_range=[0, 5],y_range=[0, 6],x_axis_config={"numbers_to_include": [2, 3]},tips=False,)labels = ax.get_axis_labels()curve_1 = ax.plot(lambda x: 4 * x - x ** 2, x_range=[0, 4], color=BLUE_C)curve_2 = ax.plot(lambda x: 0.8 * x ** 2 - 3 * x + 4,x_range=[0, 4],color=GREEN_B,)line_1 = ax.get_vertical_line(ax.input_to_graph_point(2, curve_1), color=YELLOW)line_2 = ax.get_vertical_line(ax.i2gp(3, curve_1), color=YELLOW)riemann_area = ax.get_riemann_rectangles(curve_1, x_range=[0.3, 0.6], dx=0.03, color=BLUE, fill_opacity=0.5)area = ax.get_area(curve_2, [2, 3], bounded_graph=curve_1, color=GREY, opacity=0.5)self.add(ax, labels, curve_1, curve_2, line_1, line_2, riemann_area, area)

参考:coordinate_systems,plot(),get_vertical_line_to_graph(),get_area(),get_axis_labels()

代码实践3

技能训练3

单独整理到此【建设中】

示例4:PolygonOnAxes

展现效果4

PolygonOnAxes

操作拆解4

曲线动点横纵坐标与原点围成的面积;

  • 画坐标系;
  • 画曲线;
  • 曲线上的动点;
  • 面积出现并随动点改变两边长;

源码直击4

%%manim -v WARNING -qm PolygonOnAxes
from manim import *class PolygonOnAxes(Scene):def get_rectangle_corners(self, bottom_left, top_right):return [(top_right[0], top_right[1]),(bottom_left[0], top_right[1]),(bottom_left[0], bottom_left[0]),(top_right[0], bottom_left[0]),]def construct(self):ax = Axes(x_range=[0, 10],y_range=[0, 10],x_length=6,y_length=6,axis_config={"include_tip": False},)t = ValueTracker(5)k = 25graph = ax.plot(lambda x: k / x,color=YELLOW_D,x_range=[k / 10, 10.0, 0.01],use_smoothing=False,)def get_rectangle():polygon = Polygon(*[ax.c2p(*i)for i in self.get_rectangle_corners((0, 0), (t.get_value(), k / t.get_value()))])polygon.stroke_width = 1polygon.set_fill(BLUE, opacity=0.5)polygon.set_stroke(YELLOW_B)return polygonpolygon = always_redraw(get_rectangle)dot = Dot()dot.add_updater(lambda x: x.move_to(ax.c2p(t.get_value(), k / t.get_value())))dot.set_z_index(10)self.add(ax, graph, dot)self.play(Create(polygon))self.play(t.animate.set_value(10))self.play(t.animate.set_value(k / 10))self.play(t.animate.set_value(5))

参考:Axes,Polygon

代码实践4

技能训练4

单独整理到此【建设中】

示例5:HeatDiagramPlot

展现效果5

操作拆解5

  • 画坐标系
  • 做分段函数

源码直击5

%%manim -v WARNING -qm HeatDiagramPlot
from manim import *class HeatDiagramPlot(Scene):def construct(self):ax = Axes(x_range=[0, 40, 5],y_range=[-8, 32, 5],x_length=9,y_length=6,x_axis_config={"numbers_to_include": np.arange(0, 40, 5)},y_axis_config={"numbers_to_include": np.arange(-5, 34, 5)},tips=False,)labels = ax.get_axis_labels(x_label=Tex("$\Delta Q$"), y_label=Tex("T[$^\circ C$]"))x_vals = [0, 8, 38, 39]y_vals = [20, 0, 0, -5]graph = ax.plot_line_graph(x_values=x_vals, y_values=y_vals)self.add(ax, labels, graph)

代码实践5


参考:coordinate_systems,plot_line_graph(),get_axis_labels()

技能训练5

单独整理到此【建设中】

本系列目录【new】

Manim文档及源码笔记-CE文档-示例库1基本概念
Manim文档及源码笔记-CE文档-示例库2动画
Manim文档及源码笔记-CE文档-示例库3使用Manim绘图【本文】
Manim文档及源码笔记-CE文档-示例库4特殊摄像机设置
Manim文档及源码笔记-CE文档-示例库5进阶项目

Manim文档及源码笔记-CE文档-示例库3使用Manim绘图相关推荐

  1. Manim文档及源码笔记-CE文档-主题化指南3渲染文本和公式

    Rendering Text and Formulas 渲染文本和公式 有两种不同的方式可以在视频中渲染文本: 1.使用Pango(text_mobject) 2.使用乳胶(tex_mobject) ...

  2. spring aop原理_Spring知识点总结!已整理成142页离线文档(源码笔记+思维导图)...

    写在前面 由于Spring家族的东西很多,一次性写完也不太现实.所以这一次先更新Spring[最核心]的知识点:AOP和IOC 无论是入门还是面试,理解AOP和IOC都是非常重要的.在面试的时候,我没 ...

  3. redis源码笔记 - 刘浩de技术博客 - 博客园

    redis源码笔记 - 刘浩de技术博客 - 博客园 redis源码笔记 - 刘浩de技术博客 - 博客园 redis源码笔记 记录发现的一个hiredis的bug 摘要: hiredis是redis ...

  4. 【Windows 逆向】CheatEngine 工具 ( CheatEngine 简介 | 使用 Lazarus 编译 CE 源码 | CheatEngine 相关文档资料 )

    文章目录 一.CheatEngine 简介 二.使用 Lazarus 编译 CE 源码 三.CheatEngine 相关文档资料 一.CheatEngine 简介 CheatEngine 简称 CE ...

  5. Live555源码阅读笔记(一):源码介绍文档 及 源码目录结构

    目录 一.Live555介绍 1.Live555项目介绍 2.官网及帮助文档介绍 二.源码目录结构 1.UsageEnvironment 2.BasicUsageEnvironment 3.group ...

  6. 基于JAVA环巢湖区域旅游网站计算机毕业设计源码+数据库+lw文档+系统+部署

    基于JAVA环巢湖区域旅游网站计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVA环巢湖区域旅游网站计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: 项目架构:B/S架构 开 ...

  7. 基于JAVA工作流流程编辑OA系统计算机毕业设计源码+数据库+lw文档+系统+部署

    基于JAVA工作流流程编辑OA系统计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVA工作流流程编辑OA系统计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: 项目架构:B/S ...

  8. 基于JAVA博物馆交流平台计算机毕业设计源码+系统+lw文档+部署

    基于JAVA博物馆交流平台计算机毕业设计源码+系统+lw文档+部署 基于JAVA博物馆交流平台计算机毕业设计源码+系统+lw文档+部署 本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 开 ...

  9. 基于java的商城后台管理系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署

    基于java的商城后台管理系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 基于java的商城后台管理系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 本源码技术栈 ...

最新文章

  1. python入门到精通需要学多久-Python零基础入门到精通:一个月就够了
  2. 攻防世界Reverse第十二题maze
  3. C/C++ 为什么#ifndef 头文件 要用大写加下划线?(这就是一种约定俗成的规范)
  4. 数据结构学习笔记(三):队列(queue)
  5. Azure认知服务之表单识别器
  6. cad 怎么显示块句柄_cad怎么显示工具栏
  7. 论文浅尝 | PairRE: 通过成对的关系向量实现知识图谱嵌入
  8. elemenUI - 弹框组件alert - 宽度设置? - 疑问篇
  9. Debugging with GDB (6) gdb 命令
  10. 零基础转行web前端,如何高效的去学习web前端?
  11. jira导出HTML,JIRA Software 7.4.x 版本说明
  12. python变量、运算符、要求从键盘输入用户名和密码,校验格式是否符合规则,如果不符合,打印出不符合的原因,并提示重新输入练习
  13. Linux之父炮轰 “全球最大同性恋网站” GitHub:Merge制造了毫无用处的垃圾信息!...
  14. 南京大学俞扬:环境模型学习——让强化学习走出游戏
  15. 大数据可视化的价值意义
  16. mediastreamer使用教程
  17. win11锁屏壁纸不更新,且全黑的解决办法
  18. JAVA生成带图片带名称的二维码
  19. 羊皮卷的故事-第九章-羊皮卷之二
  20. spawn-fcgi php-fpm,白话php工作方式:mod_php、mod_fastcgi、php-fpm、spawn-fcgi

热门文章

  1. 如何使用redis做一个定时任务?
  2. docker _port is already allocated错误
  3. Windows中使用curl命令报错curl post [globbing] unmatched close brace/bracket in column 67
  4. 4g 控矿驱动 迪兰rx574_主流显卡之争 574/1065战怪猎:世界
  5. android闪存软件测试,谷歌商店上架一款软件:专门测试华为P10闪存,一秒出结果...
  6. 为什么面试要问hashmap 的原理
  7. 短单词汇总(2-4个字母)
  8. 二阶常系数非齐次线性微分方程特解的设定规则
  9. 多少秒算长镜头_一般时长为10秒以上镜头,就可称为长镜头。
  10. 数据库表的软硬关联_Jimmy的关系型数据库设计心得 第一版