- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
数轴是数学中的一个基本概念,它规定了原点、正方向和单位长度的直线.
Manim中的NumberLine就是一个专门用来表示数轴的对象,它允许用户设置数轴的范围、间隔和显示长度等参数,从而灵活地在动画中展示数学中的一维数值变化.
下面将介绍Manim中的NumberLine对象的基本功能到使用示例.
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的,一般是设置上图中蓝色部分(刻度)的; 。
参数名称中含有tip或line的,一般是设置上图中红色线以及箭头部分(数轴线)的; 。
参数名称中含有label或number的,一般是设置上图中黄色数字部分(数值)的.
其他的参数也是与上面3部分相关的,后面的示例会演示各种参数的使用.
数轴提供的主要方法有:
名称 | 说明 |
---|---|
add_labels | 数轴上某些位置添加标签文字 |
add_numbers | 数轴上添加数值 |
add_ticks | 数轴上添加刻度 |
get_labels | 获取数轴上的标签文字 |
get_number_mobject | 获取数轴上的数值对象 |
get_tick | 获取数轴上的刻度 |
get_tick_range | 获取数轴上的刻度范围 |
n2p(number_to_point) | 根据数值得到此数值在数轴上的位置 |
p2n(point_to_number) | 根据数轴上的位置得到对应的数值 |
动态在数轴上添加,修改,删除内容时,这些方法很有用.
数轴(NumberLine)的参数和方法都不少,无法一一演示,下面的示例从数轴的样式, 。
刻度和数值设置,以及数据点在数轴上动态移动等几个方面演示数轴的使用.
数轴(NumberLine)的大小和颜色是最常设置的,相关的参数主要有length,stroke_width和color.
# 长短不同的数轴
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,
)
数轴默认是没有箭头的,通过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,
)
默认情况下,数轴上的刻度和数值是依次显示的,而通过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)
数轴上的点和显示在屏幕的位置是不一样的,通过数轴提供的函数n2p和p2n, 。
可以很容易的将屏幕上的点映射到数轴上,也可以根据数轴上的点计算其在屏幕上的位置.
下面的动画示例,首先根据数轴上的值获取其在屏幕上的位置,然后绘制这个点.
接下来,移动这个点,移动的过程中同时显示此点在数轴上的数值.
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))
文中完整的代码放在网盘中了(number_line.py), 。
下载地址: 完整代码 (访问密码: 6872) 。
最后此篇关于manim边做边学--数轴的文章就讲到这里了,如果你想了解更多关于manim边做边学--数轴的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我发现当文本超过 20 行时,此动画需要花费大量时间来渲染。我可以做些什么来加快速度吗? import itertools as it class FormulaExample(Scene): d
请您向我解释一下什么是 VGroup 以及它有什么用处?我试图寻找它,但显然无济于事,没有太多的文档。提前致谢。 最佳答案 基本上是一组VMobjects .所以说你有一些方程由多个单独的 Texmo
你能画对角线/箭头/任何看起来像你在manim数学方程中抵消的东西吗? 最佳答案 最接近的定义是 Cross ,但这并不完全是您要找的,我喜欢用这个: class Cancel(VGroup):
希望你们一切都好! 我想知道如何在 manim 中缩小文本。 我知道你可以做 text.scale(0.8),但我想知道使用后如何做。 例如, text.scale(0.8) self.play(Wr
希望你们一切都好! 我想知道如何在 manim 中缩小文本。 我知道你可以做 text.scale(0.8),但我想知道使用后如何做。 例如, text.scale(0.8) self.play(Wr
ORIGIN 中有一个正方形位置,我想将它移动到 UP*3 并使用以下代码片段同时缩放到 0.5: sq = Square() self.add(sq) self.play(ApplyMethod(s
我在 Manim Community v0.16.0.post0 中有以下文本: dioscuri = Text("DIOSCURI", weight=BOLD, font="Arial", colo
有什么办法可以增加动画中特定线条的宽度? 我试图改变DEFAULT_STROKE_WIDTH在 constants.py并设置 stroke_width在 CONFIG等于某个数字,但它不起作用。 这
txt11 = TexMobject(r"-7", color=BLACK) txt12 = TexMobject(r"\frac{1}{7}", color=BLACK).next_to(txt11
txt11 = TexMobject(r"-7", color=BLACK) txt12 = TexMobject(r"\frac{1}{7}", color=BLACK).next_to(txt11
我想用不同颜色绘制 MathTex 元素的变量,但 Manim 似乎对复杂的 Latex 表达式有问题。 这是我的场景。 from manim import * config.frame_width
this is the thing I wanted to make 我是 manim 的新手,我正在尝试将文本放在一个矩形内,如图中所示我怎样才能做到这一点 ?? :( 最佳答案 您可以使用 VGr
我主要尝试运行两个动画(引用以下代码): class RelTrain(Scene): def construct(self): train = Rectangle(heigh
无论如何,我正在尝试(这实际上是我的第一个 manim 程序)。 from manim import * import copy import numpy as np import random co
我开始学习 manim,希望你能帮助我理解这段代码是如何工作的 class Line_1(Scene): def construct(self): path = Line(LE
我是马尼姆新手。 与下面的示例一样, class scene_example(Scene): def construct(self): txt1 = Text("Text1")
我是马尼姆新手。 与下面的示例一样, class scene_example(Scene): def construct(self): txt1 = Text("Text1")
最初的问题发布在 Reddit (https://www.reddit.com/r/manim/comments/lw3xs7/is_it_possible_to_run_manim_programm
有没有办法使用 manim 显示 latex 表并为其设置动画? 例如 \begin{table}[] \centering \begin{tabular}{lllll} & & \multico
如果我有 3 行 manim 文本, l = TextMobject("Line 1") l2 = TextMobject("Line 2") l3 = TextMobject("Line 3")
我是一名优秀的程序员,十分优秀!