首页 > 其他分享 >manim边学边做--通用二维坐标系

manim边学边做--通用二维坐标系

时间:2024-10-30 13:19:44浏览次数:4  
标签:-- tip range color 坐标轴 manim config 边学边 axis

ManimAxes对象是通用的坐标系对象,之前几篇介绍的数轴和各种坐标平面都是继承Axes对象。

Axes对象的主要作用在于创建和管理二维坐标轴,以满足我们制作数学动画时的各种需求。

具体来说,Axes对象可以帮助我们:

  1. 定义坐标系:定义一个明确的坐标系,通过设置x轴和y轴的范围、步长等参数,创建符合自己需求的坐标轴
  2. 定制坐标轴样式:可以设置坐标轴的颜色、刻度线的长度、箭头的长度等属性,还可以控制是否显示刻度线、标签和注释等
  3. 绘制函数曲线:绘制各种自定义的函数曲线,如二次函数、三角函数、指数函数等
  4. 添加图形和标签:可以添加图形元素(如圆、三角形等)和标签(如坐标轴标签、标题等)

1. 主要参数

Axes的主要参数有:

参数名称 类型 说明
x_range Sequence[float] 横坐标轴范围,间隔
y_range Sequence[float] 纵坐标轴范围,间隔
x_length float 横轴的宽度
y_length float 纵轴的高度
axis_config dict 坐标轴的通用配置选项
x_axis_config dict 横轴的配置选项
y_axis_config dict 纵轴的配置选项
tips bool 横轴的右边和纵轴上边是否显示箭头

参数axis_configx_axis_configy_axis_config中的可配置的项目类似,

区别在于axis_config是针对整个坐标轴的配置,

x_axis_configy_axis_config是分别针对横轴和纵轴的配置。

如果它们设置了相同的项,那么x_axis_configy_axis_config中的设置会覆盖axis_config中相应的设置。

可对坐标轴设置的项有很多,下面列举了一些常用的。

  • stroke_color:设置坐标轴线的颜色
  • stroke_width(或line_width):设置坐标轴线的宽度
  • include_numbers:是否在坐标轴上显示数字
  • numbers_to_include:指定要显示数字的列表。
  • numbers_with_elongated_ticks:指定要加长刻度线的数字列表。用于突出显示特定的刻度
  • include_ticks:是否显示刻度线
  • tick_size:设置刻度线的长度
  • include_tip:是否在坐标轴的末端显示箭头
  • tip_length:设置箭头的长度。当include_tipTrue时,此选项才有效
  • font_size:设置坐标轴上数字的字体大小
  • label_direction:设置坐标轴标签的方向
  • scaling:设置坐标轴的刻度缩放方式,如线性刻度、对数刻度等

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为间隔显示数字和刻度线。

# x轴范围从-5到5,间隔为1
# y轴范围从-3到3,间隔为1
# 显示坐标轴上的数字
Axes(
    x_range=[-5, 5, 1],
    y_range=[-3, 3, 1],
    axis_config={"include_numbers": True},
)

3.2. 自定义坐标轴样式

自定义坐标轴的样式,包括轴的颜色、线条宽度、刻度线的长度和是否显示箭头等。

下面的示例将x轴设置为红色,线条宽度为2;y轴设置为蓝色,线条宽度为1.5,且x轴y轴末端均显示不同的箭头。

axes = Axes(
    x_range=[-5, 5, 1],
    y_range=[-3, 3, 1],
    x_axis_config={
        "color": RED,
        "stroke_width": 5,
        "include_tip": True,  # 显示箭头
        "tip_shape": ArrowSquareTip,
    },
    y_axis_config={
        "color": BLUE,
        "stroke_width": 1.5,
        "include_tip": True,
        "tip_shape": StealthTip,
    },
    axis_config={
        # 加长特定数字的刻度线
        "numbers_with_elongated_ticks": [0, -3, 3],
        "font_size": 20,
    },  
)

3.3. 绘制函数曲线

坐标系上绘制一个函数曲线。

比如,下面的示例绘制一个抛物线($ y=x^2 \()和一个三角函数曲线(\) y=\sin(\theta) $)。

axes = Axes(
    x_range=[-5, 5, 1],
    y_range=[-5, 5, 1],
    x_axis_config={
        "color": RED,
    },
    y_axis_config={
        "color": BLUE,
    },
    axis_config={
        "include_numbers": True,
        "font_size": 20,
        "include_tip": True,
        "tip_shape": StealthTip,
        "tip_length": 2,
    },
)

# 抛物线
func = lambda x: x**2
graph = axes.plot(func, x_range=[-2, 2], color=GREEN)
self.play(Create(graph), run_time=run_time)

# 三角函数
func = lambda x: np.sin(x)
graph = axes.plot(func, x_range=[-5, 5], color=YELLOW)
self.play(Create(graph), run_time=run_time)

3.4. 添加标签和注释

在坐标轴上添加标签,并在函数曲线上添加注释,以解释图形的含义。

下面的示例基于上一节的函数曲线,标出坐标轴名称xy,并且选择抛物线上的一个点,标出点的坐标。

axes = Axes(
    x_range=[-5, 5, 1],
    y_range=[-5, 5, 1],
    x_axis_config={
        "color": RED,
    },
    y_axis_config={
        "color": BLUE,
    },
    axis_config={
        "include_numbers": True,
        "font_size": 20,
        "include_tip": True,
        "tip_shape": StealthTip,
        "tip_length": 2,
    },
)

# 绘制曲线
func = lambda x: x**2
graph = axes.plot(func, x_range=[-2, 2], color=GREEN, stroke_width=2)

# 添加标签
x_label = axes.get_x_axis_label(
    MathTex("x", font_size=25, color=RED),
    direction=UP,
)
y_label = axes.get_y_axis_label(
    MathTex("y", font_size=25, color=BLUE),
    direction=RIGHT,
)

# 标记一个点
x = 1.5
y = x * x
d = Dot(axes.coords_to_point(x, y), color=YELLOW)
txt = Matrix([[x], [y]]).scale(0.5).next_to(d.get_center(), RIGHT)

4. 附件

文中的代码只是关键部分的截取,完整的代码共享在网盘中(axes.py),

下载地址: 完整代码 (访问密码: 6872)

标签:--,tip,range,color,坐标轴,manim,config,边学边,axis
From: https://www.cnblogs.com/wang_yb/p/18515637

相关文章

  • C++接口集成、身份实名认证-游戏防沉迷,保障未成年人健康
    随着互联网的快速发展,网络游戏在年轻人中越来越受欢迎。然而,未成年玩家长时间沉迷游戏的问题却引发了社会的广泛关注。为了应对这一现象,各大网络游戏平台纷纷引入翔云身份证实名认证接口,以有效辨别用户身份,建立完善的防沉迷系统,从而更好地保护未成年玩家的身心健康。......
  • 表格转文字如何实现-表格文字识别接口集成示例-快速提取表格中的文字​
    在当今信息化与智能化日新月异的时代,企业和组织面临着海量数据的处理需求,特别是在金融、法律、教育等领域,复杂而繁琐的表格数据成为一种重要的信息来源。如何快速、准确地提取表格中的文字信息,提升数据处理效率,成为越来越多企业关注的焦点。随着OCR(光学字符识别)技术的迅速......
  • Java & Lock & AQS & 总结
    前言 相关系列《Java&Lock&目录》(持续更新)《Java&Lock&AQS&源码》(学习过程/多有漏误/仅作参考/不再更新)《Java&Lock&AQS&总结》(学习总结/最新最准/持续更新)《Java&Lock&AQS&问题》(学习解答/持续更新)  涉及内容《Java&Lock&ReentrantLock......
  • 【C++】string 类深度解析:探秘字符串操作的核心
     快来参与讨论......
  • 第七章 利用CSS和多媒体美化页面
    7.1CSS链接的美化1.文字链接的美化代码<!DOCTYPEhtml><html> <head> <metacharset="utf-8"/> <title>示例7.1</title> <style> #menu{ text-align:center; /*div内的元素水平居中*/ } a{ margin:10px; ......
  • N9300-S16语音芯片:提升电梯播报体验,实现导航声音播报提示
    随着科技的不断进步与人们日常生活紧密相关的电梯行业也迎来了智能化升级的新篇章。N9300语音芯片,作为这一变革中的重要一环,正以其卓越的性能和多样化的功能,显著提升着电梯播报体验,让每一次乘坐都变得更加便捷与舒适。该芯片采用先进的音频处理技术,能够清晰、准确地传达电梯的到站......
  • 期权和股票的区别存在哪些方面?
    期权就是股票,唯一区别标的物上证指数,会看大盘吧,交易两个方向认购做多,认沽做空,双向t+0交易没了,跟期货一样,对的,玩的也是合约,唯一区别没有保证金不会爆仓,那么期权和股票的区别存在哪些方面?一、期权与股票的区别是什么?本文来自:期权酱第一,交易对象不同。股票的交易对象是个股,而......
  • ISSA+CNN+BIGRU+attention时间序列预测代码
    1.ISSA(改进的麻雀优化算法)功能:ISSA用于优化模型参数(如CNN和BIGRU的超参数),帮助提高模型的性能和准确性。机制:寻食策略:模拟麻雀在觅食过程中如何探索和利用资源,通过随机游走和局部搜索,寻找最优解。自适应权重:ISSA可以根据搜索空间动态调整探索和利用的权重......
  • JavaScript基础知识——黑马JavaWeb学习笔记
    JavaScript基础JavaScript:跨平台、面向对象的脚本语言(脚本语言:不需要编译,浏览器解释完直接运行)作用:控制网页行为,使网页可交互ps:JavaScript与Java是两门完全不同的语言本文为学习黑马程序员JavaWeb开发教程中JS部分学习笔记文章目录JavaScript基础一、JS引入方式1.......
  • 直播姬遇到DLL文件丢失问题?这些解决方案你需要知道
    当使用哔哩哔哩直播姬观看直播时遇到DLL文件丢失的错误提示,你可以尝试以下几种方法来解决这个问题:重新安装哔哩哔哩直播姬:卸载当前版本的哔哩哔哩直播姬。从官方网站下载最新版本的安装包。重新安装程序。这样可以确保所有必需的DLL文件都被正确地安装。使用系统文件检查......