ToB企服应用市场:ToB评测及商务社交产业平台

标题: manim边学边做--通用二维坐标系 [打印本页]

作者: 西河刘卡车医    时间: 2024-10-30 11:54
标题: manim边学边做--通用二维坐标系
Manim的Axes对象是通用的坐标系对象,之前几篇介绍的数轴和各种坐标平面都是继承Axes对象。
Axes对象的主要作用在于创建和管理二维坐标轴,以满意我们制作数学动画时的各种需求。
详细来说,Axes对象可以帮助我们:
1. 主要参数

Axes的主要参数有:
参数名称类型说明x_rangeSequence[float]横坐标轴范围,间隔y_rangeSequence[float]纵坐标轴范围,间隔x_lengthfloat横轴的宽度y_lengthfloat纵轴的高度axis_configdict坐标轴的通用配置选项x_axis_configdict横轴的配置选项y_axis_configdict纵轴的配置选项tipsbool横轴的右边和纵轴上边是否显示箭头参数axis_config和x_axis_config,y_axis_config中的可配置的项目类似,
区别在于axis_config是针对整个坐标轴的配置,
x_axis_config和y_axis_config是分别针对横轴和纵轴的配置。
如果它们设置了相同的项,那么x_axis_config和y_axis_config中的设置会覆盖axis_config中相应的设置。
可对坐标轴设置的项有很多,下面枚举了一些常用的。
2. 主要方法

Axes的方法主要是为了动态获取坐标轴上的各种信息,以及在坐标轴上绘制函数图形。
此中用的比较多的有:
名称说明coords_to_point将坐标转换为在屏幕上点的位置point_to_coords将屏幕上点的位置转换为坐标get_axes获取各个坐标轴的信息plot_line_graph在坐标轴中绘制函数图形3. 使用示例

下面通过由简单到复杂的示例,一步步演示怎样使用Axes对象。
3.1. 基本坐标系

使用Axes对象创建一个基本的二维坐标系,设置x轴y轴的范围,并显示坐标轴上的数字刻度线
下面的示例设置x轴范围[-5,5],y轴范围[-3,3],坐标轴上以1为间隔显示数字和刻度线。
  1. # x轴范围从-5到5,间隔为1
  2. # y轴范围从-3到3,间隔为1
  3. # 显示坐标轴上的数字
  4. Axes(
  5.     x_range=[-5, 5, 1],
  6.     y_range=[-3, 3, 1],
  7.     axis_config={"include_numbers": True},
  8. )
复制代码

3.2. 自界说坐标轴样式

自界说坐标轴的样式,包罗轴的颜色、线条宽度、刻度线的长度和是否显示箭头等。
下面的示例将x轴设置为红色,线条宽度为2;y轴设置为蓝色,线条宽度为1.5,且x轴y轴末端均显示差别的箭头。
  1. axes = Axes(
  2.     x_range=[-5, 5, 1],
  3.     y_range=[-3, 3, 1],
  4.     x_axis_config={
  5.         "color": RED,
  6.         "stroke_width": 5,
  7.         "include_tip": True,  # 显示箭头
  8.         "tip_shape": ArrowSquareTip,
  9.     },
  10.     y_axis_config={
  11.         "color": BLUE,
  12.         "stroke_width": 1.5,
  13.         "include_tip": True,
  14.         "tip_shape": StealthTip,
  15.     },
  16.     axis_config={
  17.         # 加长特定数字的刻度线
  18.         "numbers_with_elongated_ticks": [0, -3, 3],
  19.         "font_size": 20,
  20.     },  
  21. )
复制代码

3.3. 绘制函数曲线

坐标系上绘制一个函数曲线。
比如,下面的示例绘制一个抛物线($ y=x^2 \()和一个三角函数曲线(\) y=\sin(\theta) $)。
  1. axes = Axes(
  2.     x_range=[-5, 5, 1],
  3.     y_range=[-5, 5, 1],
  4.     x_axis_config={
  5.         "color": RED,
  6.     },
  7.     y_axis_config={
  8.         "color": BLUE,
  9.     },
  10.     axis_config={
  11.         "include_numbers": True,
  12.         "font_size": 20,
  13.         "include_tip": True,
  14.         "tip_shape": StealthTip,
  15.         "tip_length": 2,
  16.     },
  17. )
  18. # 抛物线
  19. func = lambda x: x**2
  20. graph = axes.plot(func, x_range=[-2, 2], color=GREEN)
  21. self.play(Create(graph), run_time=run_time)
  22. # 三角函数
  23. func = lambda x: np.sin(x)
  24. graph = axes.plot(func, x_range=[-5, 5], color=YELLOW)
  25. self.play(Create(graph), run_time=run_time)
复制代码

3.4. 添加标签和注释

在坐标轴上添加标签,并在函数曲线上添加注释,以表明图形的寄义。
下面的示例基于上一节的函数曲线,标出坐标轴名称x和y,并且选择抛物线上的一个点,标出点的坐标。
  1. axes = Axes(
  2.     x_range=[-5, 5, 1],
  3.     y_range=[-5, 5, 1],
  4.     x_axis_config={
  5.         "color": RED,
  6.     },
  7.     y_axis_config={
  8.         "color": BLUE,
  9.     },
  10.     axis_config={
  11.         "include_numbers": True,
  12.         "font_size": 20,
  13.         "include_tip": True,
  14.         "tip_shape": StealthTip,
  15.         "tip_length": 2,
  16.     },
  17. )
  18. # 绘制曲线
  19. func = lambda x: x**2
  20. graph = axes.plot(func, x_range=[-2, 2], color=GREEN, stroke_width=2)
  21. # 添加标签
  22. x_label = axes.get_x_axis_label(
  23.     MathTex("x", font_size=25, color=RED),
  24.     direction=UP,
  25. )
  26. y_label = axes.get_y_axis_label(
  27.     MathTex("y", font_size=25, color=BLUE),
  28.     direction=RIGHT,
  29. )
  30. # 标记一个点
  31. x = 1.5
  32. y = x * x
  33. d = Dot(axes.coords_to_point(x, y), color=YELLOW)
  34. txt = Matrix([[x], [y]]).scale(0.5).next_to(d.get_center(), RIGHT)
复制代码

4. 附件

文中的代码只是关键部门的截取,完整的代码共享在网盘中(axes.py),
下载地点: 完整代码 (访问密码: 6872)

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4