manim边做边学--数轴

打印 上一主题 下一主题

主题 1018|帖子 1018|积分 3054

数轴是数学中的一个基本概念,它规定了原点、正方向和单位长度的直线。
Manim中的NumberLine就是一个专门用来表示数轴的对象,它允许用户设置数轴的范围、隔断和表现长度等参数,从而灵活地在动画中展示数学中的一维数值变革。
下面将先容Manim中的NumberLine对象的基本功能到使用示例。
1. 主要参数

NumberLine的参数许多,定制性很强,能够满意各式各样对于数轴表现的需求。
参数名称类型说明x_rangeSequence[float]数轴刻度的范围lengthfloat数轴的长度unit_sizefloat刻度之间的距离include_ticksbool是否包含刻度tick_sizefloat刻度标记的长度numbers_with_elongated_ticksIterable[float]拉伸的特殊刻度列表longer_tick_multipleint被拉伸刻度的拉伸比例rotationfloat数轴旋转的角度stroke_widthfloat数轴线的粗细include_tipbool数轴是否包含箭头tip_widthfloat箭头的宽度tip_heightfloat箭头的高度tip_shapeArrowTip数轴的箭头类型include_numbersbool刻度是否包含数值scaling_ScaleBase数轴的比例font_sizefloat刻度上文字的大小label_directionSequence[float]刻度上文字的方向label_constructorVMobject构建刻度上文字的对象line_to_number_bufffloat数轴的线和文字的距离decimal_number_configdict刻度上文字的样式配置numbers_to_excludeIterable[float]不需要表现文字的刻度列表numbers_to_includeIterable[float]需要表现文字的刻度列表参数许多,但是主要分为3个部分(数轴的线刻度数值)的设置。

比如,参数名称中含有 tick的,一般是设置上图中蓝色部分(刻度)的;
参数名称中含有tip或line的,一般是设置上图中红色线以及箭头部分(数轴线)的;
参数名称中含有label或number的,一般是设置上图中黄色数字部分(数值)的。
其他的参数也是与上面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)的大小颜色是最常设置的,相关的参数主要有length,stroke_width和color。
  1. # 长短不同的数轴
  2. l1 = NumberLine(
  3.     x_range=[-5, 5],
  4.     length=2,
  5. )
  6. l2 = NumberLine(
  7.     x_range=[-5, 5],
  8.     length=4,
  9. )
  10. l3 = NumberLine(
  11.     x_range=[-5, 5],
  12.     length=6,
  13. )
  14. # 粗细,颜色不同的数轴
  15. l4 = NumberLine(
  16.     x_range=[-5, 5],
  17.     stroke_width=1,
  18.     color=BLUE,
  19. )
  20. l5 = NumberLine(
  21.     x_range=[-5, 5],
  22.     stroke_width=3,
  23.     color=RED,
  24. )
  25. l6 = NumberLine(
  26.     x_range=[-5, 5],
  27.     stroke_width=6,
  28.     color=GREEN,
  29. )
复制代码

3.2. 数轴线的箭头

数轴默认是没有箭头的,通过tip相关参数,可以在数轴的正方向添加不同样式箭头。
  1. l1 = NumberLine(
  2.     x_range=[-5, 6],
  3.     include_tip=True,
  4.     tip_width=0.15,
  5.     tip_height=0.15,
  6. )
  7. l2 = NumberLine(
  8.     x_range=[-5, 6],
  9.     include_tip=True,
  10.     tip_shape=ArrowCircleTip,
  11.     tip_width=0.15,
  12.     tip_height=0.15,
  13. )
  14. l3 = NumberLine(
  15.     x_range=[-5, 6],
  16.     include_tip=True,
  17.     tip_shape=ArrowCircleFilledTip,
  18.     tip_width=0.15,
  19.     tip_height=0.15,
  20. )
  21. l4 = NumberLine(
  22.     x_range=[-5, 6],
  23.     include_tip=True,
  24.     tip_shape=ArrowSquareTip,
  25.     tip_width=0.15,
  26.     tip_height=0.15,
  27. )
  28. l5 = NumberLine(
  29.     x_range=[-5, 6],
  30.     include_tip=True,
  31.     tip_shape=StealthTip,
  32.     tip_width=0.15,
  33.     tip_height=0.15,
  34. )
复制代码

3.3. 刻度和数值

默认情况下,数轴上的刻度数值是依次表现的,而通过x_range参数,可以设置数值隔断表现;
通过scaling参数,可以在相同隔断的刻度上表现不均匀的数值;还可以突出表现某些刻度。
  1. # 默认的数轴
  2. l1 = NumberLine(
  3.     x_range=[-6, 6, 1],
  4. )
  5. # 数值间隔的数轴
  6. l2 = NumberLine(
  7.     x_range=[-6, 6, 2],
  8. )
  9. # 数值是10为底的指数
  10. l3 = NumberLine(
  11.     x_range=[0, 5, 1],
  12.     scaling=LogBase(base=10),
  13. )
  14. # 突出显示某些刻度
  15. l4 = NumberLine(
  16.     x_range=[-6, 6, 1],
  17. )
  18. l4.numbers[7].set_color(RED).scale(2)
  19. l4.numbers[3].set_color(GREEN).scale(2)
复制代码

3.4. 数轴上的数据点

数轴上的点和表现在屏幕的位置是不一样的,通过数轴提供的函数n2p和p2n,
可以很轻易的将屏幕上的点映射到数轴上,也可以根据数轴上的点盘算其在屏幕上的位置。
下面的动画示例,起首根据数轴上的值获取其在屏幕上的位置,然后绘制这个点。
接下来,移动这个点,移动的过程中同时表现此点在数轴上的数值。
  1. l = NumberLine(
  2.     x_range=[-6, 6, 1],
  3. )
  4. # n2p 获取-4在屏幕的位置
  5. p = l.n2p(-4)
  6. d = Dot(p, color=BLUE)
  7. # 初始数值
  8. txt = MathTex("-4.00")
  9. # p2n 获取在数轴上的值
  10. txt.add_updater(
  11.     lambda x: x.become(
  12.         MathTex(
  13.             round(l.p2n(d.get_center()), 2),
  14.             color=RED,
  15.             font_size=30,
  16.         ).next_to(d, UP, buff=0.2)
  17.     )
  18. )
  19. # 移动这个点,查看数值变化
  20. self.play(d.animate.move_to(RIGHT))
复制代码

4. 附近

文中完备的代码放在网盘中了(number_line.py),
下载地点: 完备代码 (访问密码: 6872)

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

没腿的鸟

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表