首页 > 其他分享 >manim边做边学--直角平面

manim边做边学--直角平面

时间:2024-10-20 09:09:59浏览次数:3  
标签:NumberPlane -- length 边学 网格线 range 坐标轴 line manim

直角平面NumberPlaneManim库中用于创建二维坐标平面的对象,它可以帮助用户在场景中可视化坐标轴以及网格线。

通过坐标轴、网格线以及刻度,它能够动态地展示函数曲线、几何图形以及它们的变换过程,使得复杂的数学概念变得直观易懂。

NumberPlane提供了x轴y轴,通常是中心对称的,

默认情况下,NumberPlane会显示背景网格,这对于展示数学函数、几何形状等非常有帮助。

我们可以定义坐标平面的范围,为坐标轴添加标签,并将其他形状、函数或动画放置在NumberPlane上,从而在动画中展示数学概念。

下面将介绍Manim中的NumberPlane对象以及一些常用的使用示例。

1. 主要参数

NumberPlane的主要参数有:

参数名称 类型 说明
x_range Sequence[float] 直角平面的横坐标轴范围,间隔
y_range Sequence[float] 直角平面的纵坐标轴范围,间隔
x_length float 直角平面宽度
y_length float 直角平面高度
background_line_style dict 直角平面背景网格线的样式
faded_line_style dict 淡化网格线的样式,用于辅助背景网格线
faded_line_ratio int 定义淡化网格线与背景网格线的比例
make_smooth_after_applying_functions bool 应用函数后是否进行平滑处理

直角平面中,常见的是坐标轴和背景网格线,其样式通过background_line_style参数来设置。

此外,NumberPlane中还有个faded_line_style参数,它用于定义淡化网格线的样式,

这些淡化网格线通常用于辅助背景网格线,以提供更细致的视觉效果或帮助区分不同的坐标区域。

一般情况下,不需要使用faded_line_stylefaded_line_ratio

2. 主要方法

Manim中的坐标系统CoordinateSystem类提供了很多方法,包括:

  1. 获取和设置坐标系统属性的方法
  2. 坐标系中坐标和屏幕上坐标转换的方法
  3. 坐标系中绘制图形(点,线,面等等)的方法

后续介绍各种坐标系统时会用在示例中用到其中的方法,这里不再一一介绍。

NumberPlane继承自CoordinateSystem类,所以可以直接使用它的各种方法。

3. 使用示例

下面通过几个示例展示NumberPlane的功能。

3.1. 基础二维坐标平面

默认情况下,NumberPlane显示坐标轴和背景网格线,帮助用户清晰地看到坐标系的划分。

坐标轴默认是白色的,背景网格线默认是蓝色的。

下面的示例展示一个标准的二维坐标平面,包含x轴y轴

x轴y轴的范围分别设置为-7~7-4~4,网格线间隔为1

plane = NumberPlane(
    x_range=[-7, 7],
    y_range=[-4, 4],
    x_length=6,
    y_length=4,
)

3.2. 自定义网格线样式

NumberPlane的背景网格线和淡化网格线的样式都可以自定义,

下面的示例对背景网格线淡化网格线的颜色、宽度和透明度进行了设置。

背景网格线是青色,淡化网格线是灰色。

plane = NumberPlane(
    x_range=[-7, 7],
    y_range=[-4, 4],
    x_length=6,
    y_length=4,
    background_line_style={
        "stroke_color": TEAL,
        "stroke_width": 4,
        "stroke_opacity": 0.6,
    },
    faded_line_style={
        "stroke_color": GREY,
        "stroke_opacity": 0.3,
    },
    faded_line_ratio=2,
)

注意,这里还设置了faded_line_ratio=2,意思是每1格背景网格线相当于2格的淡化网格线

3.3. 不同比例的坐标轴

默认情况下,NumberPlaneX轴Y轴的间隔是相等的,

实际上,通过设置不同的坐标范围和显示范围,可以创建不同比例的坐标轴。

也就是Y轴的间隔可以大于X轴的间隔,也可以小于X轴的间隔。

# Y轴的间隔大于X轴的间隔
plane1 = NumberPlane(
    x_range=[-7, 7],
    y_range=[-3, 3],
    x_length=3,
    y_length=3,
)

# Y轴的间隔小于X轴的间隔
plane2 = NumberPlane(
    x_range=[-3, 3],
    y_range=[-7, 7],
    x_length=3,
    y_length=3,
)

3.4. 绘制函数图像

使用NumberPlane最大的用途就在于可以在其中绘制函数图像,在坐标系中绘制图像或几何图形,

可以更方便的定位它们的位置,调整它们之间的变换关系。

下面的示例在坐标系中绘制了2个函数,使用了坐标系基类提供的绘图方法:plot_parametric_curve

plane = NumberPlane(
    x_range=[-4, 4],
    y_range=[-16, 16],
    x_length=6,
    y_length=4,
)

g1 = plane.plot_parametric_curve(
    lambda x: [x, x**2],
    t_range=[-3.5, 3.5, 0.01],
)
g2 = plane.plot_parametric_curve(
    lambda x: [x, x**3],
    t_range=[-2.5, 2.5, 0.01],
)

4. 附件

文中的代码只是关键部分的截取,完整的代码共享在网盘中(number_plane.py),

下载地址: 完整代码 (访问密码: 6872)

标签:NumberPlane,--,length,边学,网格线,range,坐标轴,line,manim
From: https://www.cnblogs.com/wang_yb/p/18486929

相关文章

  • 一文彻底弄懂MySQL的MVCC多版本控制器
    InnoDB的MVCC(Multi-VersionConcurrencyControl,多版本并发控制)是MySQL实现高并发事务处理的一种机制。通过MVCC,InnoDB可以在高并发环境下支持事务隔离,并提供非阻塞的读操作,从而避免锁定所有读操作带来的性能瓶颈。MVCC允许事务在不加锁的情况下读取数据,保证了性能和一......
  • 沃顿商学院商业人工智能笔记-一-
    沃顿商学院商业人工智能笔记(一)P38:4_向上游移动客户体验.zh_en-GPT中英字幕课程资源-BV1Ju4y157dK在这个模块中,我们将讨论一些令人兴奋的内容。这是关于公司如何在客户旅程中向上游移动。现在我们谈到了预测客户旅程,使其更短。让我们尝试对比一下。首先以一个例子开始。......
  • 自动驾驶路面分类数据集,不同道路不同天气条件,干燥、湿润、水上、新雪、融化雪和冰。包
    自动驾驶路面分类数据集,按照不同的天气条件,即干燥、湿润、水上、新雪、融化的雪和冰。不同的道路材料属性包括沥青、混凝土、泥浆和碎石。不同的道路平整性分为光滑、轻微不平和严重不平。共27类,37万张图像,13GB数据自动驾驶路面分类数据集类别:图像分类用途:用于训练和评估......
  • 重构大师-四-
    重构大师(四)原文:www.gongtongchu.cn引入参数对象原文:refactoringguru.cn/introduce-parameter-object问题您的方法中包含一组重复的参数。解决方案用一个对象替换这些参数。之前!引入参数对象-之前之后!引入参数对象-之后为什么重构相同的参数组常常在多个方法中出......
  • Matlab使用LSTM或BiLSTM对一维信号(语音信号、心电信号等)进行二分类源程序。也可以改
     Matlab使用LSTM或BiLSTM对一维信号(语音信号、心电信号等)进行二分类源程序。也可以改成多分类。包含数据和代码,数据可以直接替换为自己的数据。如果用BiLSTM,程序中只需要把lstmlayer改为bilstmlayer即为BiLSTM网络,其他地方不需要任何改动。工作如下:1、加载数据集,一共为......
  • 重构大师-三-
    重构大师(三)原文:www.gongtongchu.cn用状态/策略替换类型代码原文:refactoringguru.cn/replace-type-code-with-state-strategy什么是类型代码?类型代码是指,当你不是使用单独的数据类型,而是有一组数字或字符串形成某个实体的允许值列表时。通常,这些特定的数字和字符串通过常量......
  • 重构大师-二-
    重构大师(二)原文:www.gongtongchu.cn移除对参数的赋值原文:refactoringguru.cn/remove-assignments-to-parameters问题一些值在方法体内被赋给参数。解决方案使用局部变量代替参数。之前intdiscount(intinputVal,intquantity){if(quantity>50){inputVa......
  • 智源大会-2023-笔记-一-
    智源大会2023笔记(一)[2023北京智源大会]AI生命科学-P1-Mercurialzs-BV1KV4y117m5welcometothesymposiuaiforlifescience,i'msunny,i,thanktheorganersforgivingme。thehonortochthis,imposing,imposi,wehaveachangeintheprogram。unfortunatelyforper......
  • 基于双路神经网络的滚动轴承故障诊断融合了原始振动信号 和 二维信号时频图像 的多输
    基于双路神经网络的滚动轴承故障诊断融合了原始振动信号和二维信号时频图像的多输入(多通道)故障诊断方法单路和双路都可时频图像算法可选小波变换,短时傅里叶变换,马尔可夫变迁场,格拉姆角场,S变换,递归图,灰度图等基于双路神经网络的滚动轴承故障诊断融合了原始振动信号和......
  • C++ -string -常见用法4
    博客主页:【夜泉_ly】本文专栏:【C++】欢迎点赞......