欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 金融 > 在Manim中坐标系的创建和使用

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

2024/10/24 21:21:12 来源:https://blog.csdn.net/qq_45449625/article/details/140826482  浏览:    关键词:在Manim中坐标系的创建和使用

在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 = WHITEax = 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 npclass OriginShift(Scene):def _origin_shift(self, axis_range):"""根据给定的坐标轴范围计算原点的偏移量。"""if len(axis_range) != 3:  # 检查长度是否为3raise ValueError(f"Expected axis_range with 3 values, got {axis_range}")min_val, max_val, _ = axis_range  # 解构为三个值origin = (min_val + max_val) / 2offset = origin- min_valreturn offsetdef 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_rangegraph_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)

 运行结果:

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com