Manim教程:第七章 坐标系统

#什么是坐标系统?特点是什么?

坐标系统是一个用于确定空间中点位置的数学工具。它通过一组数值(坐标)来描述一个点在某个空间中的位置。不同类型的坐标系统可以用于不同的应用场景,最常见的包括:

  1. 笛卡尔坐标系:使用直角坐标系,通常用坐标轴(如x轴和y轴)来表示二维空间中的位置。三维空间则使用x、y和z轴。

  2. 极坐标系:在二维空间中,使用一个角度和一个距离来描述点的位置。极坐标系特别适合于处理与圆形或周期性相关的问题。

  3. 球坐标系和柱坐标系:用于描述三维空间中的点,分别适用于球形和柱形对称的情况。

  4. 其他坐标系:如地理坐标系(用于地球表面的定位)、同伦坐标系等### 坐标系统在数学和科学界的影响力

  5. 几何学:坐标系统使得几何问题可以转化为代数问题,便于分析和解决。通过坐标,可以更容易地进行图形的绘制、变换和计算。

  6. 物理学:在物理学中,坐标系统用于描述物体的位置、速度和加速度等。例如,在经典力学中,运动方程常常需要在特定的坐标系统中进行分析。

  7. 工程学:各种工程设计和分析(如CAD软件)都依赖于坐标系统来定义和操作设计对象。

. 计算机科学:计算机图形学、机器学习和数据科学等领域广泛使用坐标系统来处理和分析数据。

  1. 天文学:天文学家使用坐标系统(如赤道坐标系)来定位天体,帮助我们理解宇宙的结构和动态。

7.1在Manim中坐标系的创建和使用

1.创建坐标轴

Axes(x_range=None, y_range=None, x_length=12, y_length=6, axis_config=None, 
x_axis_config=None, y_axis_config=None, tips=True, **kwargs)

  Axes 是一个用于创建坐标轴的函数,通常用于数学可视化或动画库中,比如 Manim。这个函数定义了一个坐标系,并允许用户自定义各种参数以满足特定的可视化需求。以下是各个参数的详细解释:

  • x_range:设置 x 轴的范围,通常是一个包含两个元素的元组,例如 (xmin, xmax)。这将确定绘图时 x 轴的起始和结束值。

  • y_range:设置 y 轴的范围。类似于 x_range,也是一个包含两个元素的元组,例如 (ymin, ymax)

  • x_length:设定 x 轴的长度(通常以单位为长度的像素或任意其他度量单位)。

  • y_length:设定 y 轴的长度。

  • axis_config:一个字典,用于定义整个坐标轴的通用配置选项,比如颜色、线条样式等。

  • x_axis_config:一个字典,用于定义 x 轴的特定配置选项,例如轴线颜色、刻度的样式等。

  • y_axis_config:一个字典,用于定义 y 轴的特定配置选项,设置与 y_axis_config 类似。

  • tips:布尔值,指示是否在轴的末端添加箭头(tip)。默认情况下为 True

  • **kwargs:其他关键字参数,可以传入更多配置选项,用于更进一步自定义 Axes 对象的外观和行为。

示例1:

  • from manim import *  
    
    class LogScalingExample(Scene):  
        def construct(self):  
            ax = Axes(  
                x_range=[0, 10, 1],  
                y_range=[-2, 6, 1],  
                tips=False,  
                axis_config={"include_numbers": True, "stroke_color": WHITE},  # 这里设置坐标轴颜色  
                y_axis_config={"scaling": LogBase(), "stroke_color": GREEN},  # y轴颜色设置  
            )  
    
            # 设置 x 轴和 y 轴的标签  
            x_label = ax.get_x_axis_label("X")  
            y_label = ax.get_y_axis_label("Y")  
            
            # 手动设置标签颜色  
            x_label.set_color(BLUE)  # 设置 x 轴标签的颜色  
            y_label.set_color(YELLOW)  # 设置 y 轴标签的颜色  
            
            # x_min must be > 0 because log is undefined at 0.  
            graph = ax.plot(lambda x: x ** 2, x_range=[0.001, 10], use_smoothing=False, color=ORANGE)  # 设置图形的颜色  
    
            # 将坐标轴、标签和图形添加到场景  
            self.add(ax, graph, x_label, y_label)

    函数和参数解释:

    Axes 类:

    • x_range: 定义 x 轴的范围。第一个元素是起始值,第二个元素是结束值,第三个元素是步长。
    • y_range: 定义 y 轴的范围。参数意义同 x_range
    • tips: 设置为 False 时不显示坐标轴的箭头尾。
    • axis_config: 用于配置坐标轴的属性。这包括:
      • include_numbers: 如果设置为 True,坐标轴上将显示数字。
      • stroke_color: 设置坐标轴线的颜色。
    • y_axis_config: 用于单独配置 y 轴的属性,特别是这里使用了 scaling: LogBase() 来设置 y 轴为对数坐标。

    标签的获取和设置:

    • get_x_axis_label("X"): 获取 x 轴的标签,并设置其文本为 "X"。
    • get_y_axis_label("Y"): 获取 y 轴的标签,并设置其文本为 "Y"。
    • set_color(color): 此函数用于设置 Mobject 的颜色。在这里用来分别设置 x 和 y 轴标签的颜色。

    绘制图形:

    • ax.plot(): 根据给定的数学函数绘制图形,在这里是 lambda x: x ** 2,表示 y = x²。x_range 用于指定 x 的取值范围。
    • use_smoothing: 决定绘制的线条是否要进行平滑处理。
    • color: 设置绘制的图形颜色,此处为橙色。

    添加到场景:

    • self.add(...): 将创建的坐标轴(ax)、图形(graph)和标签(x_label 和 y_label)添加到场景中,从而在动画中显示。
     
      

    总结:

    这段代码实现了一个简单的坐标系,展示了一个对数刻度的 y 轴和一个抛物线函数(y = x²),同时还设置了坐标轴和标签的颜色。该示例展示了 Manim 中如何使用坐标轴和图形绘制以及自定义样式的基本用法。

     

     

运行结果:

 示例2:

class AxesWithDifferentTips(Scene):
    def construct(self):
        self.camera.background_color = WHITE
        ax = Axes(axis_config={'tip_shape': StealthTip,"stroke_color": BLACK})
        self.add(ax)

运行结果:

 2.Axes._create_axis(range_terms, axis_config, length)的使用

_create_axis(range_terms, axis_config, length) 是一个函数,用于在 Manim 中创建坐标轴。根据传入的参数,可以设置坐标轴的范围、风格(配置)和长度。

参数解释:

  1. range_terms

    • 这是关于坐标轴范围的序列,通常是一个长度为 2 或 3 的列表,定义了坐标轴的起始值、结束值和可选的步长(如果需要)。例如,[x_min, x_max] 或 [y_min, y_max, step]
  2. axis_config

    • 这是一个字典,用于定义坐标轴的样式和属性。典型的配置可能包括:
      • stroke_color: 指定坐标轴的颜色。
      • include_numbers: 指定是否在坐标轴上显示数字。
      • line_width: 坐标轴线的宽度等。
  3. length

    • 表示坐标轴的长度。它的值决定了坐标轴在屏幕上占用的视觉长度。

示例:

from manim import *  

class CreateAxes(Scene):  
    def construct(self):  
        # 创建x轴和y轴的范围  
        x_range = [-3, 3,0.5]  # x轴的范围从 -3 到 3  
        y_range = [-2, 2,0.5]  # y轴的范围从 -2 到 2  

        
        # 创建坐标系  
        x_axis = Axes( x_range=x_range,   y_range=y_range,   
            axis_config={  
                "stroke_color": BLUE,  
                "stroke_width": 2,  # 使用 stroke_width 替代 line_width  
                "include_numbers": True,}     
        )  
        
        # 添加坐标系到场景中  
        self.add(x_axis)  

        # 在坐标系中绘制 sin 函数  
        graph = x_axis.plot(lambda x: np.sin(x), color=ORANGE)  
        self.play(Create(graph))  

        # 显示场景  
        self.wait(2)  

 运行结果:

3. _origin_shift(axis_range)的使用方法

_origin_shift(axis_range) 是一个静态方法(static method),通常用于计算坐标轴的原点(origin)偏移量,其输入是 axis_range,而输出则是计算后得到的偏移量。虽然具体的实现和用法可能会因不同的库或 API 而异,通常来讲,axis_range 会是一个描述坐标轴显示范围的参数,如 [min, max]

解释

  • 函数作用: 该函数用于确定坐标轴的起点(0点)相对于其范围的位置。在某些情境下,可能需要对坐标轴进行偏移,以便更好地显示图形或数据。

  • 参数:

    • axis_range: 一般是一个列表或元组,包含两个元素,分别是坐标轴的最小值和最大值。例如,[-3, 3] 表示坐标轴的范围从 -3 到 3。

 示例:

from manim import *
import numpy as np

class OriginShift(Scene):
    def _origin_shift(self, axis_range):
        """根据给定的坐标轴范围计算原点的偏移量。"""
        if len(axis_range) != 3:  # 检查长度是否为3
            raise ValueError(f"Expected axis_range with 3 values, got {axis_range}")

        min_val, max_val, _ = axis_range  # 解构为三个值
        origin = (min_val + max_val) / 2
        offset = origin- min_val
        return offset

    def construct(self):
        self.add(Dot())
        # 创建坐标轴
        axes = Axes(x_range=[-3, 3, 1], y_range=[-2, 2, 1], axis_config={"color": BLUE})

        # 获取原点偏移
        x_offset = self._origin_shift(axes.x_range)  # [-3, 3, 1]
        print(f"x_range: {axes.x_range}")
        y_offset = self._origin_shift(axes.y_range)  # [-2, 2, 1]
        print(f"y_range: {axes.y_range}")

        # 设置坐标轴位置
        axes.shift(DOWN * y_offset + RIGHT * x_offset)

        # 创建正弦函数图形
        graph = axes.plot(lambda x: np.sin(x), color=ORANGE, x_range=[-3, 3])  # 指定 x_range
        graph_label = axes.get_graph_label(graph, label='\\sin(x)')

        # 添加坐标轴和图形到场景
        self.add(axes, graph, graph_label)

        # 显示场景
        self.wait(2)

运行结果:

4._original__init__() 的使用方法

构造函数

_original__init__(x_range=None, y_range=None, x_length=12, y_length=6,
 axis_config=None, x_axis_config=None, y_axis_config=None, tips=True, **kwargs)

 

参数说明

  1. x_range:

    • 类型: Sequence[float] (通常是一个列表或元组)
    • 描述: 定义 x 轴的范围,通常是 [x_min, x_max, x_step]x_min 是 x 轴的最小值,x_max 是最大值,x_step 是在绘制时使用的步长。
  2. y_range:

    • 类型: Sequence[float]
    • 描述: 定义 y 轴的范围,通常是 [y_min, y_max, y_step]。与 x_range 类似。
  3. x_length:

    • 类型: float
    • 描述: x 轴的长度,单位通常是场景的单位。
  4. y_length:

    • 类型: float
    • 描述: y 轴的长度。
  5. axis_config:

    • 类型: dict, 可选
    • 描述: 用于定义坐标轴的配置,例如颜色、线条样式等。可以在整体上应用于 x 轴和 y 轴。
  6. x_axis_config:

    • 类型: dict, 可选
    • 描述: 用于特定于 x 轴的配置设置,覆盖 axis_config 中的设置。
  7. y_axis_config:

    • 类型: dict, 可选
    • 描述: 用于特定于 y 轴的配置设置,覆盖 axis_config 中的设置。
  8. tips:

    • 类型: bool
    • 描述: 是否在轴的两端添加箭头(tips)。
  9. **kwargs:

    • 描述: 其他可选参数,可以用于进一步定制。

示例代码:

from manim import *

class QuadraticGraph01(Scene):
    def construct(self):
        # 创建坐标轴
        axes = Axes(
            x_range=[-3, 3, 1],  # x轴范围
            y_range=[0, 9, 1],   # y轴范围
            axis_config={"color": BLUE},  # 坐标轴颜色
            x_length=6,  # x轴长度
            y_length=4,  # y轴长度
        )

        # 创建二次函数的图形
        graph = axes.plot(lambda x: x**2, color=YELLOW)

        # 添加标签
        graph_label = axes.get_graph_label(graph, label='y=x^2')

        # 显示坐标轴
        self.play(Create(axes))
        self.play(Create(graph), Write(graph_label))

        # 添加提示信息
        if True:  # tips参数示例
            

            mt = MathTex(r"y=x^{2}")  # 创建数学文本
            tips_text = Text("Graph of ", font_size=24)  # 组合文本和数学表达式
            t10=VGroup(tips_text,mt).arrange(RIGHT)
            a1=t10.to_edge(UP)
            self.play(Write(a1))
            self.wait(2)
            self.play(FadeOut(tips_text))

        # 等待一段时间以便观看最终图形
        self.wait(2)

 运行结果:

 

7.2 用manim创建坐标系

1.Axes._update_default_configs()的使用

 构造函数:

static _update_default_configs(default_configs, passed_configs)

 

manim 是一个用于创建数学动画的 Python 库。static _update_default_configs(default_configs, passed_configs) 是 manim 中的一个静态方法,用于更新默认的配置参数。下面是对该函数及其参数的解释。

函数的目的

_update_default_configs 函数的主要目的是将用户传入的配置(passed_configs)合并到默认配置(default_configs)中。通过这种方式,用户可以覆盖默认的配置而不必完全重写它们。

参数说明

  1. default_configs:

    • 类型: 字典
    • 说明: 这是一个包含默认配置的字典。在 manim 中,许多对象和类都有一些默认的配置选项,例如颜色、大小、动画持续时间等。这个参数代表了这些默认值。
  2. passed_configs:

    • 类型: 字典
    • 说明: 这是用户传入的配置字典。用户可以通过这个字典提供自定义的配置选项,这些选项将会覆盖 default_configs 中对应的值。

函数的工作原理

  • 函数首先接收这两个字典。
  • 然后,它会遍历 passed_configs 中的每一个键值对。
  • 如果 passed_configs 中的键在 default_configs 中存在,那么 default_configs 对应的值将被更新为 passed_configs 中的值。
  • 如果某个键在 passed_configs 中存在但在 default_configs 中不存在,通常会将其添加到 default_configs 中。
  • 最终,函数返回更新后的 default_configs 字典。

2.Axes.coords_to_point()的使用

在 Manim 中,coords_to_point(*coords) 函数用于将给定的坐标转换为场景中的点。这个函数通常在 3D 场景中使用,它将 (x, y, z) 坐标直接转换为 Manim 可以处理的点。

下面是一个简单的 Manim 项目示例,展示如何使用 coords_to_point 函数来创建一个三维场景。在这个场景中,我们将绘制几个立方体,展示它们在不同坐标位置的效果。

示例1: 

class CoordsToPointExample(Scene):
    def construct(self):
        ax = Axes().add_coordinates()

        # a dot with respect to the axes
        dot_axes = Dot(ax.coords_to_point(2, 2,2), color=GREEN)
        lines = ax.get_lines_to_point(ax.c2p(2,2))

        # a dot with respect to the scene
        # the default plane corresponds to the coordinates of the scene.
        plane = NumberPlane()
        dot_scene = Dot((2,2,0), color=RED)

        self.add(plane, dot_scene, ax, dot_axes, lines)

 运行结果:

 示例2:

from manim import *  
import numpy as np  

class CoordsToPointScene0111(ThreeDScene):  
    def construct(self):  
        # 定义一些 3D 坐标  
        coords = [  
            (2, 1, 0),  
            (1, -2, 1),  
            (0, 0, 2),  
            (-1, 1, -1),  
            (-2, -1, 0),  
        ]  

        # 创建立方体并将其放置在指定坐标  
        cubes = []  
        for coord in coords:  
            cube = Cube(side_length=0.5, fill_color=BLUE, fill_opacity=1)  
            # 使用 np.array 将坐标转换为点  
            cube.move_to(np.array(coord))  
            cubes.append(cube)  

        # 将立方体添加到场景中  
        self.play(*[Create(cube) for cube in cubes])  
        self.wait(1)  

        # 旋转场景以观察立方体  
        self.move_camera(phi=60 * DEGREES, theta=60 * DEGREES, run_time=3)  
        self.wait(2)  

        # 转动立方体  
        self.play(*[Rotate(cube, angle=PI, axis=UP) for cube in cubes])  
        self.wait(2)  

 运行结果:

 

 7.3 复数坐标轴(平面)创建【ComplexPlane】

         复数平面即是z=a+bi ,它对应的坐标为(a,b),其中,a表示的是复平面内的横坐标,b表示的是复平面内的纵坐标,表示实数a的点都在x轴上,所以x轴又称为“实轴”;表示纯虚数bi的点都在y轴上,所以y轴又称为“虚轴”。y轴上有且仅有一个实点即为原点"0"。

class ComplexPlane(**kwargs)[source]

        构造函数 ComplexPlane(**kwargs) 的功能是定义一个复数平面模型,其中复数用形式 i表示,a是实部,b是虚部。复数平面的坐标系由两条轴组成:横轴(实轴)和纵轴(虚轴)。

复平面的基本概念:

  • 复数:复数是形如 的数,其中 a是实数(实部),b是实数(虚部),并且 i是虚数单位,满足 
  • 坐标表示法:在复平面中,复数 z可以视为平面内的一个点,具体坐标为 (a,b):
    • a表示横坐标,对应复平面的实轴(即 x轴)。
    • b 表示纵坐标,对应复平面的虚轴(即 y轴)。

坐标系的解读:

  • 实轴:所有的点都具有 b=0,即纯实数,表示为 z=a。
  • 虚轴:所有的点都具有 a=0,即纯虚数,表示为 z=bi。
  • 原点:点 (0,0) 或 z=0是实轴和虚轴的交点,表示复数的零值。

构造函数解释:

ComplexPlane(**kwargs) 构造函数中的 kwargs 表示可以接收任意数量的关键字参数,具体的参数可能用于进一步配置复数平面的属性,例如:

  • 坐标轴的范围
  • 网格的显示
  • 复数的绘制方式

示例:

from manim import *

class ComplexPlaneExample(Scene):
    def construct(self):
        plane = ComplexPlane().add_coordinates()
        self.add(plane)
        d1 = Dot(plane.n2p(2 + 1j), color=RED,radius=0.2)
        d2 = Dot(plane.n2p(-3 - 2j), color=YELLOW)
        label1 = MathTex("2+i").next_to(d1, UR, 0.1)
        label2 = MathTex("-3-2i").next_to(d2, UR, 0.1)
        self.add(d1,label1,d2,label2,)

 运行结果:

 point_to_coords(point)函数的使用

示例:

class PointToCoordsExample(Scene):
    def construct(self):
        ax = Axes(x_range=[0, 10, 2]).add_coordinates()
        circ = Circle(radius=0.5).shift(UR * 2)

        # get the coordinates of the circle with respect to the axes
        coords = np.around(ax.point_to_coords(circ.get_right()), decimals=5)

        label = (
            Matrix([[coords[0]], [coords[1]]]).scale(0.75).next_to(circ, RIGHT)
        )

        self.add(NumberPlane(color=GREEN),Dot(radius=0.25,color=RED),ax,
                 Dot(circ.get_center(),color=YELLOW,radius=0.15),circ, label, Dot(circ.get_right()))

 代码概述

这段代码的目的是在一个坐标轴上绘制一个圆,并标出圆的右边界点的坐标。下面是对代码的详细解释:

from manim import * 
class PointToCoordsExample(Scene): 
        def construct(self): ax = Axes(x_range=[0, 10, 2]).add_coordinates() 
  1. 引入 manim:首先,脚本引入了 manim 库,该库用于动画和数学可视化。

  2. 定义场景:创建一个名为 PointToCoordsExample 的 Scene 类,这将是一个动画场景。

  3. 创建坐标轴

    • Axes(x_range=[0, 10, 2]) 创建一个坐标轴对象 ax,其 x 轴范围从 0 到 10,步长为 2。
    • add_coordinates() 方法在坐标轴上添加坐标标签。
circ = Circle(radius=0.5).shift(UR * 2) 
  1. 创建圆Circle(radius=0.5) 创建一个半径为 0.5 的圆,然后使用 shift(UR * 2) 将圆移动到右上(UR 表示 "Up Right",即右上方向)两个单位的位置。
# get the coordinates of the circle with respect to the axes 
coords = np.around(ax.point_to_coords(circ.get_right()), decimals=2) 
  1. 获取圆的右边界的坐标
    • circ.get_right() 返回圆的右边缘的坐标点。这个点的具体位置是 (1, 2),这是因为圆的半径是 0.5,圆心在 (2, 2) 的位置。
    • ax.point_to_coords(...) 是一个关键的函数,它接受一个点并返回该点在坐标轴上的坐标值。在这里,它将圆的右边缘的点作为参数。
    • np.around(..., decimals=2) 将返回的坐标值四舍五入到小数点后两位。
label = ( Matrix([[coords[0]], [coords[1]]]).scale(0.75).next_to(circ, RIGHT) ) 
  1. 创建坐标标签
    • Matrix([[coords[0]], [coords[1]]]) 创建一个矩阵对象,表示坐标。这个矩阵是 2x1 的形式,包含 x 和 y 坐标。
    • scale(0.75) 将矩阵的大小缩小到 75%。
    • next_to(circ, RIGHT) 将矩阵(标签)放置在圆的右侧。
self.add(ax, circ, label, Dot(circ.get_right())) 
  1. 添加元素到场景
    • self.add(...) 将坐标轴 ax、圆 circ、坐标标签 label 和表示圆右边界的点的 Dot 加入到场景中。

总结

  • point_to_coords(point) 函数:这个函数取一个点(在本例中是圆的右边缘点),并返回相对于坐标轴的坐标值,使您能够轻松地在渲染中标记和使用该点的坐标。
  • 重要参数
    • circ.get_right(): 得到圆右边的点位置。
    • ax.point_to_coords(...): 将该点转换为坐标轴的坐标。

通过这种方式,该程序能够在动画中有效地展示几何对象及其坐标。

运行结果:

 

7.4实现在坐标轴上添加元素和获取元素

 Manim实现在坐标轴上添加元素和获取元素

1.坐标轴上获取元素

构造函数:

_get_axis_label(label, axis, edge, direction, buff=0.1)

函数 _get_axis_label 旨在为图形表示中的给定轴生成和定位标签(通常用于绘图或数学上下文中,可能是在某个创建动画或可视化的库内)。以下是该函数及其参数的详细说明:

参数:

  1. label (float | str | Mobject):

    • 这是要在轴上显示的标签内容,可以是数字(浮点数)、字符串或 Mobject(可能是用于创建数学对象的类)。如果提供的是字符串或浮点数,默认将其转换为 MathTex 对象,通常用于渲染数学表达式。
  2. axis (Mobject):

    • 该参数指定标签要附加到的轴。Mobject 类型表示这是一个图形化的轴表示。
  3. edge (Sequence[float]):

    • 这是一个浮点数序列(如列表或元组),定义标签应添加到的轴的边缘。例如,它可以指定将标签放置在轴的右侧(表示为 RIGHT)。
  4. direction (Sequence[float]):

    • 此参数允许进一步调整标签的位置。可以用于相对轴轻微移动标签。
  5. buff (float):

    • Buff 表示标签与轴线之间的距离(或缓冲空间)。默认值为 0.1,可以调整以提供更多或更少的空间。

 _get_axis_label 方法通常是 Manim 源代码中的一个内部方法,可能不属于公共 API,因此不建议直接使用。相反,你应该使用 Manim 提供的公共方法 get_x_axis_label() 和 get_y_axis_label() ,这样可以避免使用内部实现,并确保代码在未来的 Manim 更新中仍然有效。

示例:

from manim import *  

class SimpleAxis001(Scene):  
    def construct(self):  
        # 创建坐标轴  
        axes = Axes(  
            x_range=[0, 4, 1],  # x轴范围和步长  
            y_range=[0, 16, 4],  # y轴范围和步长  
            axis_config={"color": BLUE},  # 坐标轴颜色  
        )  
        
        # 添加坐标轴到场景  
        self.add(axes)  

        # 创建数据点 (0, 0), (1, 1), (2, 4), (3, 9), (4, 16)  
        points = [(x, x**2) for x in range(5)]  
        
        # 创建图形并添加到场景  
        graph = axes.plot(lambda x: x**2, color=YELLOW)  
        self.add(graph)  

        # 添加标签  
        x_label = axes.get_x_axis_label("X-axes",buff=0,)  
        y_label = axes.get_y_axis_label("Y-axes")  
        
        self.add(x_label, y_label)  

        # 添加标题  
        title = Text("简单的坐标图").to_edge(UP)  
        self.add(title)  

运行结果: 

 2.坐标轴上添加标签的函数

add_coordinates(*axes_numbers, **kwargs)[source]

 

add_coordinates 是 Manim 中一个用于在坐标轴上添加标签的函数,通常可以在绘制数学图形或函数图时使用。这个函数可以帮助你为坐标轴上的特定值添加注释或标签,使得图形更具可读性和解释性。

参数解释

  1. axes_numbers (Iterable[float] | None | dict[float, str | float | Mobject])

    • 这个参数可以是一个可迭代对象(如列表或元组),其中包含你希望添加坐标标签的数字。
    • 也可以是一个字典,键是坐标位置,值是对应的标签(字符串、数字或 Mobject)。
    • 如果它是 None,将不添加任何默认标签。
  2. kwargs (Any)

    • 这是一个可选参数,允许你传递额外的关键字参数,通常用于设置标签的样式,比如字体、颜色、大小等。

示例1:

from manim import *  

class AddCoordinatesExample01(Scene):  
    def construct(self):  
        # 创建坐标轴  
        ax = ThreeDAxes()
        x_labels = range(-4, 5)
        z_labels = range(-4, 4, 1)
        a=ax.add_coordinates(x_labels ,z_labels ,color=GREEN)  # default y labels, custom x & z labels
        b=ax.add_coordinates(x_labels,color=RED)  # only x labels
        self.add(a,b)

运行结果:

示例2: 

from manim import *  

class AddCoordinatesExample02(Scene):  
    def construct(self):  
        # 创建坐标轴  
        ax = Axes(x_range=[0, 7])
        x_pos = [x for x in range(1, 8)]

        # strings are automatically converted into a Tex mobject.
        x_vals = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
        x_dict = dict(zip(x_pos, x_vals))
        a=ax.add_coordinates(x_dict)
        self.add(a)

 代码分析:

  1. 创建坐标轴:

    ax = Axes(x_range=[0, 7]) 

    创建了一个 x 轴范围为0到7的坐标系。

  2. 创建 x 轴位置列表:

    x_pos = [x for x in range(1, 8)] 

    生成一个列表 x_pos,包含整数 1 到 7,代表每周的每一天。

  3. 字符串标签:

    x_vals = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"] 

    创建一个有七个元素的字符串列表 x_vals,每个元素对应星期几。

  4. 创建键值对字典:

    x_dict = dict(zip(x_pos, x_vals)) 

    使用 zip 函数将 x_pos 和 x_vals 配对,并转换为字典 x_dict,格式为 {1: "Monday", ..., 7: "Sunday"}

  5. 向坐标系添加坐标:

    a = ax.add_coordinates(x_dict) self.add(a) 

    尝试将这些字符串作为坐标添加到坐标系 ax 中。

 运行结果:

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yasen.M

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值