#什么是坐标系统?特点是什么?
坐标系统是一个用于确定空间中点位置的数学工具。它通过一组数值(坐标)来描述一个点在某个空间中的位置。不同类型的坐标系统可以用于不同的应用场景,最常见的包括:
笛卡尔坐标系:使用直角坐标系,通常用坐标轴(如x轴和y轴)来表示二维空间中的位置。三维空间则使用x、y和z轴。
极坐标系:在二维空间中,使用一个角度和一个距离来描述点的位置。极坐标系特别适合于处理与圆形或周期性相关的问题。
球坐标系和柱坐标系:用于描述三维空间中的点,分别适用于球形和柱形对称的情况。
其他坐标系:如地理坐标系(用于地球表面的定位)、同伦坐标系等### 坐标系统在数学和科学界的影响力
几何学:坐标系统使得几何问题可以转化为代数问题,便于分析和解决。通过坐标,可以更容易地进行图形的绘制、变换和计算。
物理学:在物理学中,坐标系统用于描述物体的位置、速度和加速度等。例如,在经典力学中,运动方程常常需要在特定的坐标系统中进行分析。
工程学:各种工程设计和分析(如CAD软件)都依赖于坐标系统来定义和操作设计对象。
. 计算机科学:计算机图形学、机器学习和数据科学等领域广泛使用坐标系统来处理和分析数据。
- 天文学:天文学家使用坐标系统(如赤道坐标系)来定位天体,帮助我们理解宇宙的结构和动态。
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 中创建坐标轴。根据传入的参数,可以设置坐标轴的范围、风格(配置)和长度。
参数解释:
-
range_terms
- 这是关于坐标轴范围的序列,通常是一个长度为 2 或 3 的列表,定义了坐标轴的起始值、结束值和可选的步长(如果需要)。例如,
[x_min, x_max]
或[y_min, y_max, step]
。
- 这是关于坐标轴范围的序列,通常是一个长度为 2 或 3 的列表,定义了坐标轴的起始值、结束值和可选的步长(如果需要)。例如,
-
axis_config
- 这是一个字典,用于定义坐标轴的样式和属性。典型的配置可能包括:
stroke_color
: 指定坐标轴的颜色。include_numbers
: 指定是否在坐标轴上显示数字。line_width
: 坐标轴线的宽度等。
- 这是一个字典,用于定义坐标轴的样式和属性。典型的配置可能包括:
-
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)
参数说明
-
x_range
:- 类型:
Sequence[float]
(通常是一个列表或元组) - 描述: 定义 x 轴的范围,通常是
[x_min, x_max, x_step]
。x_min
是 x 轴的最小值,x_max
是最大值,x_step
是在绘制时使用的步长。
- 类型:
-
y_range
:- 类型:
Sequence[float]
- 描述: 定义 y 轴的范围,通常是
[y_min, y_max, y_step]
。与x_range
类似。
- 类型:
-
x_length
:- 类型:
float
- 描述: x 轴的长度,单位通常是场景的单位。
- 类型:
-
y_length
:- 类型:
float
- 描述: y 轴的长度。
- 类型:
-
axis_config
:- 类型:
dict
, 可选 - 描述: 用于定义坐标轴的配置,例如颜色、线条样式等。可以在整体上应用于 x 轴和 y 轴。
- 类型:
-
x_axis_config
:- 类型:
dict
, 可选 - 描述: 用于特定于 x 轴的配置设置,覆盖
axis_config
中的设置。
- 类型:
-
y_axis_config
:- 类型:
dict
, 可选 - 描述: 用于特定于 y 轴的配置设置,覆盖
axis_config
中的设置。
- 类型:
-
tips
:- 类型:
bool
- 描述: 是否在轴的两端添加箭头(tips)。
- 类型:
-
**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
)中。通过这种方式,用户可以覆盖默认的配置而不必完全重写它们。
参数说明
-
default_configs:
- 类型: 字典
- 说明: 这是一个包含默认配置的字典。在
manim
中,许多对象和类都有一些默认的配置选项,例如颜色、大小、动画持续时间等。这个参数代表了这些默认值。
-
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()
-
引入
manim
:首先,脚本引入了manim
库,该库用于动画和数学可视化。 -
定义场景:创建一个名为
PointToCoordsExample
的Scene
类,这将是一个动画场景。 -
创建坐标轴:
Axes(x_range=[0, 10, 2])
创建一个坐标轴对象ax
,其 x 轴范围从 0 到 10,步长为 2。add_coordinates()
方法在坐标轴上添加坐标标签。
circ = Circle(radius=0.5).shift(UR * 2)
- 创建圆:
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)
- 获取圆的右边界的坐标:
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) )
- 创建坐标标签:
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()))
- 添加元素到场景:
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
旨在为图形表示中的给定轴生成和定位标签(通常用于绘图或数学上下文中,可能是在某个创建动画或可视化的库内)。以下是该函数及其参数的详细说明:
参数:
-
label (float | str | Mobject):
- 这是要在轴上显示的标签内容,可以是数字(浮点数)、字符串或
Mobject
(可能是用于创建数学对象的类)。如果提供的是字符串或浮点数,默认将其转换为MathTex
对象,通常用于渲染数学表达式。
- 这是要在轴上显示的标签内容,可以是数字(浮点数)、字符串或
-
axis (Mobject):
- 该参数指定标签要附加到的轴。
Mobject
类型表示这是一个图形化的轴表示。
- 该参数指定标签要附加到的轴。
-
edge (Sequence[float]):
- 这是一个浮点数序列(如列表或元组),定义标签应添加到的轴的边缘。例如,它可以指定将标签放置在轴的右侧(表示为
RIGHT
)。
- 这是一个浮点数序列(如列表或元组),定义标签应添加到的轴的边缘。例如,它可以指定将标签放置在轴的右侧(表示为
-
direction (Sequence[float]):
- 此参数允许进一步调整标签的位置。可以用于相对轴轻微移动标签。
-
buff (float):
- Buff 表示标签与轴线之间的距离(或缓冲空间)。默认值为
0.1
,可以调整以提供更多或更少的空间。
- Buff 表示标签与轴线之间的距离(或缓冲空间)。默认值为
_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 中一个用于在坐标轴上添加标签的函数,通常可以在绘制数学图形或函数图时使用。这个函数可以帮助你为坐标轴上的特定值添加注释或标签,使得图形更具可读性和解释性。
参数解释
-
axes_numbers (Iterable[float] | None | dict[float, str | float | Mobject]):
- 这个参数可以是一个可迭代对象(如列表或元组),其中包含你希望添加坐标标签的数字。
- 也可以是一个字典,键是坐标位置,值是对应的标签(字符串、数字或
Mobject
)。 - 如果它是
None
,将不添加任何默认标签。
-
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)
代码分析:
-
创建坐标轴:
ax = Axes(x_range=[0, 7])
创建了一个 x 轴范围为0到7的坐标系。
-
创建 x 轴位置列表:
x_pos = [x for x in range(1, 8)]
生成一个列表
x_pos
,包含整数 1 到 7,代表每周的每一天。 -
字符串标签:
x_vals = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
创建一个有七个元素的字符串列表
x_vals
,每个元素对应星期几。 -
创建键值对字典:
x_dict = dict(zip(x_pos, x_vals))
使用
zip
函数将x_pos
和x_vals
配对,并转换为字典x_dict
,格式为{1: "Monday", ..., 7: "Sunday"}
。 -
向坐标系添加坐标:
a = ax.add_coordinates(x_dict) self.add(a)
尝试将这些字符串作为坐标添加到坐标系
ax
中。
运行结果: