数轴是数学中的一个基本概念,它规定了原点、正方向和单位长度的直线。

Manim中的NumberLine就是一个专门用来表示数轴的对象,它允许用户设置数轴的范围、间隔和显示长度等参数,从而灵活地在动画中展示数学中的一维数值变化。

下面将介绍Manim中的NumberLine对象的基本功能到使用示例。

1. 主要参数

NumberLine的参数很多,定制性很强,能够满足各式各样对于数轴显示的需求。

参数名称 类型 说明
x_range Sequence[float] 数轴刻度的范围
length float 数轴的长度
unit_size float 刻度之间的距离
include_ticks bool 是否包含刻度
tick_size float 刻度标记的长度
numbers_with_elongated_ticks Iterable[float] 拉伸的特殊刻度列表
longer_tick_multiple int 被拉伸刻度的拉伸比例
rotation float 数轴旋转的角度
stroke_width float 数轴线的粗细
include_tip bool 数轴是否包含箭头
tip_width float 箭头的宽度
tip_height float 箭头的高度
tip_shape ArrowTip 数轴的箭头类型
include_numbers bool 刻度是否包含数值
scaling _ScaleBase 数轴的比例
font_size float 刻度上文字的大小
label_direction Sequence[float] 刻度上文字的方向
label_constructor VMobject 构建刻度上文字的对象
line_to_number_buff float 数轴的线和文字的距离
decimal_number_config dict 刻度上文字的样式配置
numbers_to_exclude Iterable[float] 不需要显示文字的刻度列表
numbers_to_include Iterable[float] 需要显示文字的刻度列表

参数很多,但是主要分为3个部分(数轴的线刻度数值)的设置。

比如,参数名称中含有 tick的,一般是设置上图中蓝色部分(刻度)的;

参数名称中含有tipline的,一般是设置上图中红色线以及箭头部分(数轴线)的;

参数名称中含有labelnumber的,一般是设置上图中黄色数字部分(数值)的。

其他的参数也是与上面3部分相关的,后面的示例会演示各种参数的使用。

2. 主要方法

数轴提供的主要方法有:

名称 说明
add_labels 数轴上某些位置添加标签文字
add_numbers 数轴上添加数值
add_ticks 数轴上添加刻度
get_labels 获取数轴上的标签文字
get_number_mobject 获取数轴上的数值对象
get_tick 获取数轴上的刻度
get_tick_range 获取数轴上的刻度范围
n2p(number_to_point) 根据数值得到此数值在数轴上的位置
p2n(point_to_number) 根据数轴上的位置得到对应的数值

动态在数轴上添加,修改,删除内容时,这些方法很有用。

3. 使用示例

数轴(NumberLine)的参数和方法都不少,无法一一演示,下面的示例从数轴的样式,

刻度和数值设置,以及数据点在数轴上动态移动等几个方面演示数轴的使用。

3.1. 数轴大小和颜色

数轴NumberLine)的大小颜色是最常设置的,相关的参数主要有lengthstroke_widthcolor

# 长短不同的数轴
l1 = NumberLine(
x_range=[-5, 5],
length=2,
)
l2 = NumberLine(
x_range=[-5, 5],
length=4,
)
l3 = NumberLine(
x_range=[-5, 5],
length=6,
) # 粗细,颜色不同的数轴
l4 = NumberLine(
x_range=[-5, 5],
stroke_width=1,
color=BLUE,
)
l5 = NumberLine(
x_range=[-5, 5],
stroke_width=3,
color=RED,
)
l6 = NumberLine(
x_range=[-5, 5],
stroke_width=6,
color=GREEN,
)

3.2. 数轴线的箭头

数轴默认是没有箭头的,通过tip相关参数,可以在数轴的正方向添加不同样式箭头。

l1 = NumberLine(
x_range=[-5, 6],
include_tip=True,
tip_width=0.15,
tip_height=0.15,
)
l2 = NumberLine(
x_range=[-5, 6],
include_tip=True,
tip_shape=ArrowCircleTip,
tip_width=0.15,
tip_height=0.15,
)
l3 = NumberLine(
x_range=[-5, 6],
include_tip=True,
tip_shape=ArrowCircleFilledTip,
tip_width=0.15,
tip_height=0.15,
) l4 = NumberLine(
x_range=[-5, 6],
include_tip=True,
tip_shape=ArrowSquareTip,
tip_width=0.15,
tip_height=0.15,
)
l5 = NumberLine(
x_range=[-5, 6],
include_tip=True,
tip_shape=StealthTip,
tip_width=0.15,
tip_height=0.15,
)

3.3. 刻度和数值

默认情况下,数轴上的刻度数值是依次显示的,而通过x_range参数,可以设置数值间隔显示;

通过scaling参数,可以在相同间隔的刻度上显示不均匀的数值;还可以突出显示某些刻度。

# 默认的数轴
l1 = NumberLine(
x_range=[-6, 6, 1],
) # 数值间隔的数轴
l2 = NumberLine(
x_range=[-6, 6, 2],
) # 数值是10为底的指数
l3 = NumberLine(
x_range=[0, 5, 1],
scaling=LogBase(base=10),
) # 突出显示某些刻度
l4 = NumberLine(
x_range=[-6, 6, 1],
)
l4.numbers[7].set_color(RED).scale(2)
l4.numbers[3].set_color(GREEN).scale(2)

3.4. 数轴上的数据点

数轴上的点和显示在屏幕的位置是不一样的,通过数轴提供的函数n2pp2n

可以很容易的将屏幕上的点映射到数轴上,也可以根据数轴上的点计算其在屏幕上的位置。

下面的动画示例,首先根据数轴上的值获取其在屏幕上的位置,然后绘制这个点。

接下来,移动这个点,移动的过程中同时显示此点在数轴上的数值。

l = NumberLine(
x_range=[-6, 6, 1],
) # n2p 获取-4在屏幕的位置
p = l.n2p(-4)
d = Dot(p, color=BLUE) # 初始数值
txt = MathTex("-4.00") # p2n 获取在数轴上的值
txt.add_updater(
lambda x: x.become(
MathTex(
round(l.p2n(d.get_center()), 2),
color=RED,
font_size=30,
).next_to(d, UP, buff=0.2)
)
) # 移动这个点,查看数值变化
self.play(d.animate.move_to(RIGHT))

4. 附近

文中完整的代码放在网盘中了(number_line.py),

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

manim边做边学--数轴的更多相关文章

  1. 边做边学入门微信小程序之仿豆瓣评分

    微信小程序由于适用性强.逻辑简要.开发迅速的特性,叠加具有海量活跃用户的腾讯公司背景,逐渐成为了轻量级单一功能应用场景的较佳承载方式,诸如电影购票.外卖点餐.移动商城.生活服务等场景服务提供商迅速切入 ...

  2. Grails边做边学入门篇[1]--------大家一起来动手建立project和Domain

    近期工作比較忙,没空写博客了.我发现每周五的下午都是我最放松的时候,可能是迟延症的缘故吧...总是寄希望于周末,慢慢的.我的周末就被工作占领了. 希望大家不要有这种坏毛病.今日事,今日毕.当然我们程序 ...

  3. 技术的止境(客户价值第一,快速实现第二,边做边学,迅速成为牛人。紧贴客户的需求去做技术,立于不败之地。追求的目标:把一项产品去做好,用产品去养活自己和家人)good

    作为一个依靠技术来谋生的程序员,我最近一直在思考一个问题,有限的生命里,面对无限的技术更新,我要研究到什么程度才能算是完成我的成为技术大牛的目标呢?换而言之,那就是技术的止境在哪儿呢?深入的思考下去, ...

  4. 【Leetcode 做题学算法周刊】第四期

    首发于微信公众号<前端成长记>,写于 2019.11.21 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 67 ...

  5. 做fzu oj 1045 做减法学到的sprintf()函数

    题目 做题一直输不出答案,于是就上网去百度了这题的解题,发现解答十分的简短,而且其中我看见了平时没见过的函数,sprintf(). 于是就百度sprintf()的使用. 如下: 函数功能:把格式化的数 ...

  6. 【Leetcode 做题学算法周刊】第一期

    首发于微信公众号<前端成长记>,写于 2019.10.28 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 1. ...

  7. 【Leetcode 做题学算法周刊】第二期

    首发于微信公众号<前端成长记>,写于 2019.11.05 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 20 ...

  8. 【Leetcode 做题学算法周刊】第三期

    首发于微信公众号<前端成长记>,写于 2019.11.13 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 35 ...

  9. 【Leetcode 做题学算法周刊】第六期

    首发于微信公众号<前端成长记>,写于 2019.12.15 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 11 ...

  10. 【Leetcode 做题学算法周刊】第七期

    首发于微信公众号<前端成长记>,写于 2020.01.15 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 12 ...

随机推荐

  1. 【Zookeeper】03 单机操作

    访问Zookeeper 开启Zookeeper服务程序: ./zkServer.sh start 启动Zookeeper客户端进行访问: ./zkCli.sh 运行打印: [root@VM-0-7-c ...

  2. Audio2Gesture:NVIDIA 黄仁勋的3D虚拟人技术 —— 元宇宙

    相关: https://www.nvidia.com/en-us/on-demand/session/omniverse2020-om1573/ https://www.nvidia.com/zh-t ...

  3. FFmpeg开发笔记(四十五)使用SRT Streamer开启APP直播推流

    ​SRT Streamer是一个安卓手机端的开源SRT协议直播推流框架,可用于RTMP直播和SRT直播.SRT Streamer支持的视频编码包括H264.H265等等,支持的音频编码包括AAC.OP ...

  4. 神经网络之卷积篇:详解卷积步长(Strided convolutions)

    详解卷积步长 卷积中的步幅是另一个构建卷积神经网络的基本操作,让向展示一个例子. 如果想用3×3的过滤器卷积这个7×7的图像,和之前不同的是,把步幅设置成了2.还和之前一样取左上方的3×3区域的元素的 ...

  5. __set_BASEPRI(); 使用不正常

    虽然 BASEPRI 是8位寄存器,但是STM32的CortexM3&M4只用了高4位,低四位是没有用到的. __set_BASEPRI(0x0f); // 无效,小于0x0f的值无效 __s ...

  6. Linux内核信号SIGIO使用实例讲解

    一.信号 1. 基本概念 信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的.信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上, ...

  7. 卷积神经网络CNN实战:MINST手写数字识别——网络定义

    本文基于python-pytorch框架,编写CNN网络,并采用CNN手写数字数据集训练.测试网络. 网络的构建 以LeNet-5 网络为例 类定义 首先先了解一下网络的最基本框架 一般而言,首先创建 ...

  8. Python 绘制 K 线图

    import mplfinance as mpf import pandas as pd # 示例数据 data = pd.DataFrame({ 'Date': ['2023-01-01', '20 ...

  9. Docker的数据卷与数据卷容器操作

    一.数据卷 数据卷(Data Volumes)是一个可供容器使用的特殊目录,它将主机操作系统目录直接映射进容器,类似于Linux中的mount动作. 数据卷可以提供很多有用的特性: 数据卷可以在容器之 ...

  10. Java多线程并发编程中并发容器第二篇之List的并发类讲解

    Java多线程并发编程中并发容器第二篇之List的并发类讲解 概述 本文我们将详细讲解list对应的并发容器以及用代码来测试ArrayList.vector以及CopyOnWriteArrayList ...