使用 Manim 创建一个二维坐标平面【NumberPlane】

NumberPlane 是 Manim 中用于创建一个二维坐标平面的类。它可以帮助用户在场景中可视化坐标轴、网格线以及其他数学概念。具体来说,它的功能包括:

  1. 坐标轴NumberPlane 提供了 x 轴和 y 轴,通常是中心对称的,允许用户清楚地看到坐标系的划分。

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

  3. 自定义范围:用户可以定义坐标平面的范围,比如 x 和 y 值的最小和最大值。

  4. 坐标标签:可以为坐标轴添加标签,以便更好地标识坐标系中的具体值。

  5. 与其他对象的交互 :可以将其他形状、函数或动画放置在 NumberPlane 上,从而在动画中展示数学概念。

接下来我看看一下构造函数:

构造函数

复制代码
class NumberPlane(x_range=(-7.111111111111111, 7.111111111111111, 1), y_range=(-4.0, 4.0,
 1), x_length=None, y_length=None, background_line_style=None, faded_line_style=None,
 faded_line_ratio=1, make_smooth_after_applying_functions=True, **kwargs)

NumberPlane 类的构造函数允许你创建一个二维坐标平面。以下是参数的详细说明:

参数详解

  1. x_range (tuple):

    • 用于定义 x 轴的范围。
    • 格式为 (min, max, step),其中 min 是最小值,max 是最大值,step 是每个网格线之间的间距。
    • 示例:(-7, 7, 1) 表示 x 轴从 -7 到 7,网格线间隔为 1。
  2. y_range (tuple):

    • 用于定义 y 轴的范围,格式与 x_range 相同。
    • 示例:(-4, 4, 1) 表示 y 轴从 -4 到 4,网格线间隔为 1。
  3. x_length (floatNone):

    • 可选参数,定义 x 轴的长度(像素或单位长度)。
    • 如果设置为 None,则会根据 x_range 自动计算。
  4. y_length (floatNone):

    • 可选参数,定义 y 轴的长度(像素或单位长度)。
    • 如果设置为 None,则会根据 y_range 自动计算。
  5. background_line_style (dictNone):

    • 用于定义背景网格线的样式,如颜色、透明度等。
    • 示例:{'stroke_color': BLUE, 'stroke_width': 2}
  6. faded_line_style (dictNone):

    • 定义淡化网格线的样式。这些线条通常用于绘制更淡的背景线。
    • 示例:{'stroke_color': GRAY, 'stroke_opacity': 0.3}
  7. faded_line_ratio (float):

    • 定义淡化线条与标准线条的比例。
    • 默认值是 1,表示淡化线和背景线会有相同的长度比率。
  8. make_smooth_after_applying_functions (bool):

    • 如果设置为 True,在应用变换函数后会对图形进行平滑处理。
  9. kwargs:

    • 其他参数,可用于进一步的自定义。

示例1:

python 复制代码
from manim import *  

class NumberPlaneExample01(Scene):  
    def construct(self):  
        number_plane = NumberPlane(  
            x_range=(-7, 7, 1),  # x轴范围  
            y_range=(-4, 4, 1),  # y轴范围  
            x_length=10,         # x轴长度  
            y_length=6,          # y轴长度  
            background_line_style={  
                "stroke_color": TEAL,  
                "stroke_width": 4,  
                "stroke_opacity": 0.6  
            },  
            faded_line_style={  
                "stroke_color": GRAY,  
                "stroke_opacity": 0.3  
            },  
            faded_line_ratio=0.8,  # 淡化线与背景线的比例  
            make_smooth_after_applying_functions=True  # 启用平滑处理  
        )  

        # 添加 NumberPlane 到场景  
        self.add(number_plane)  

        # 展示一些文字  
        title = Text("Number Plane Example").to_edge(UP)  
        self.add(title)  

        # 稍等一会儿,以便观看结果  
        self.wait(2)  
参数说明
  • x_range: 设置 x 轴的范围为 -7 到 7,步长为 1。
  • y_range: 设置 y 轴的范围为 -4 到 4,步长为 1。
  • x_length: 设置 x 轴的长度为 10(单位像素)。
  • y_length: 设置 y 轴的长度为 6(单位像素)。
  • background_line_style: 设置背景线的样式,包含颜色、宽度和透明度。
  • faded_line_style: 设置淡化线的样式,通常用于更淡的背景线。
  • faded_line_ratio: 比例设置为 0.8,表示淡化线条与标准线条长度的关系。
  • make_smooth_after_applying_functions: 启用对应用函数后的平滑处理。

运行结果:

示例2:

python 复制代码
from manim import *

class NumberPlaneExample(Scene):
    def construct(self):
        number_plane = NumberPlane(
            background_line_style={
                "stroke_color": TEAL,
                "stroke_width": 4,
                "stroke_opacity": 0.6
            }
        )
        self.add(number_plane)

运行结果:

示例3:

python 复制代码
class NumberPlaneScaled(Scene):
    def construct(self):
        number_plane = NumberPlane(
            x_range=(-4, 11, 1),
            y_range=(-3, 13, 1),
            x_length=5,
            y_length=5,
        ).move_to(LEFT*3)

        number_plane_scaled_y = NumberPlane(
            x_range=(-4, 11, 1),
            x_length=5,
            y_length=4,
        ).move_to(RIGHT*3)

        self.add(number_plane)
        self.add(number_plane_scaled_y)

运行结果:

相关推荐
隐于花海,等待花开11 小时前
9. Python 文件与输入输出 深度解析
python
BullSmall12 小时前
Promtheus和Alertmanager 之间是通过管理平面还是业务层面IP交互
网络协议·tcp/ip·平面
小江的记录本12 小时前
【Java基础】反射与注解:核心原理、自定义注解、注解解析方式(附《思维导图》+《面试高频考点清单》)
java·数据结构·python·mysql·spring·面试·maven
梦想不只是梦与想12 小时前
Python中 Pydantic数据验证库
python·pydantic
008爬虫实战录12 小时前
【码上爬】 题十:魔改算法 堆栈分析,找加密值过程详解
前端·python·算法
人道领域12 小时前
Java基础热门八股总结:八种基本数据类型 + 装箱拆箱 + 缓存机制,(90%的Java新手都搞不清的装箱拆箱问题)
java·开发语言·python
机汇五金_12 小时前
专业的电脑机箱厂商
python
smileNicky13 小时前
Spring框架懒加载怎么实现?
python·spring·rpc
熊猫_豆豆13 小时前
麦克斯韦方程组(电磁效应Python展示)
开发语言·python·电磁感应·麦克斯韦方程组
SilentSamsara13 小时前
属性查找顺序:实例 → 类 → 父类的完整 MRO
开发语言·python·算法·青少年编程