首页 > 其他分享 >manim边做边学--数轴

manim边做边学--数轴

时间:2024-10-16 12:12:05浏览次数:1  
标签:NumberLine 数轴 -- float tip 边学 range 刻度

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

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)

标签:NumberLine,数轴,--,float,tip,边学,range,刻度
From: https://www.cnblogs.com/wang_yb/p/18469604

相关文章

  • Anything Anytime Library
    ASSIGNMENT2[40%]WhiteboxtestingandcodeanalysisOverviewForthisassignment,yourtaskistodesignanddocumentappropriatetestsforasoftwaresystemusingwhiteboxtechniques,buildaCI/CDpipelinetorunyourtests,andreportonthecodequa......
  • PyQt5 使用 Pyinstaller+multiprocessing 打包多进程应用时,引发的一些问题
    解决Pyinstaller打包PyQt5+multiprocessing多进程应用时,引发的一些问题,包括反复启动主进程,以及:AttributeError:'NoneType'objecthasnoattribute'write'本文提供一些解决方案,您可能需要根据自己的实际情况,逐个尝试,直到自己的multiprocessing多进程应用正常运行一、解决......
  • DevEco Studio:查看多端设备预览效果
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(MaoistLearning)➤博客园地址:为敢技术(https://www.cnblogs.com/strengthen/ )➤GitHub地址:https://github.com/strengthen➤原文地址:https://www.cnblogs.com/strengthen/p/......
  • aws waf 特定链接不能访问
    "GET/en/stores?page=185&country=US&sort=default&alpha=HTTP/1.1"200227757"-""Mozilla/5.0(WindowsNT10.0;Win64;x64;rv:124.0)Gecko/20100101Firefox/124.0"翻页功能禁止使用:/stores?page=1/stores?page=2/stores?p......
  • 题解:[SNCPC2019] Pick Up
    ProblemLink[SNCPC2019]PickUp题意给出甲的坐标和速度,乙的坐标和速度,商场的坐标,可以让乙去接甲,求甲前往商场的最短用时。Solution分类讨论。思考乙是否要去接甲。这个很简单,令\(ans1\)为甲自己出发耗时,\(ans2\)为乙接甲耗时,两者取最小值即可。\(ans1\)很好算,那么\(......
  • DevEco Studio:查看ArkUI预览效果
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(MaoistLearning)➤博客园地址:为敢技术(https://www.cnblogs.com/strengthen/ )➤GitHub地址:https://github.com/strengthen➤原文地址:https://www.cnblogs.com/strengthen/p/......
  • spring上 -基于注解配置bean,动态代理,AOP笔记
     用的是jdk8,spring框架里jar包的下载可以自己搜到注解用到的jar包。  60,注解配置Bean快速入门 基本介绍 代码结构: UserDao.javapackagecom.hspedu.spring.component;importorg.springframework.stereotype.Repository;/**使用@Repository标识该......
  • Proxmox VE 安装Mikrotik RouterOS
    一、环境介绍1、PVE版本:ProxmoxVirtualEnvironment7.2-32、ROSCHR镜像文件,GoogleChrome浏览器上访问Mikrotik官网下载,或访问云盘。3、WinSCP、Xshell用于上传镜像文件到PVE物理机。(请自行百度下载)    Xshell下载地址    WinSCP下载地址二、PVE部署准备工作......
  • 真题练习4-Excel电子表格-全国计算机等级考试一级计算机基础及MS Office应用考试【汪
    题目请根据题目要求,完成下列操作:注意:以下的文件必须保存在考生文件夹下1.打开工作簿文件EXCEL.XLSX。(1)将sheet1工作表的A1:E1单元格合并为一个单元格,内容水平居中;计算实测值与预测值之间的误差的绝对值放置于“误差(绝对值)”列;评估“预测准确度”列,评估规则为:“误差”低于或......
  • springboot超市商品管理系统-计算机毕业设计源码55289
    摘 要随着信息技术的快速发展和普及,传统的超市管理模式已经无法满足现代商业的需求。为了提高超市的管理效率,优化商品销售流程,本文提出了一种基于SpringBoot框架的超市商品管理系统。该系统结合了现代软件开发技术,包括MySQL数据库、Java语言等,实现了对超市商品的全面管理。......