在 Manim 中创建数轴主要依赖 NumberLine
类,其参数和功能设计非常灵活,能够满足多种数学动画需求。以下是创建数轴的详细方法和技巧:
一、基础数轴创建
- 核心参数
使用x_range
定义数轴范围和刻度间隔,length
控制显示长度:
参数说明:# 基础数轴(范围-5到5,间隔1,长度6单位) number_line = NumberLine( x_range=[-5, 5, 1], length=6, include_numbers=True # 显示刻度数值 )
x_range
:格式为[起始值, 结束值, 步长]
,例如[-6, 6, 2]
会显示偶数刻度include_tip
:是否在正方向添加箭头(默认无箭头)stroke_width
:数轴线条粗细color
:数轴颜色(支持RED
、BLUE
等预设颜色常量)
二、样式定制
-
箭头与形状
通过tip_shape
参数自定义箭头样式,支持多种箭头类型:number_line = NumberLine( x_range=[-5, 6], include_tip=True, tip_shape=ArrowCircleFilledTip, # 圆形实心箭头 tip_width=0.2, tip_height=0.2 )
可选箭头类型:
ArrowTip
(默认三角形)StealthTip
(扁平箭头)ArrowSquareTip
(方形箭头)
-
刻度与数值
- 调整刻度密度与显示规则:
number_line = NumberLine( x_range=[-6, 6, 0.5], # 每0.5单位一个刻度 numbers_with_elongated_ticks=[-5, 0, 5], # 加长特定刻度 numbers_to_exclude=[-4, 4] # 隐藏某些数值 )
- 通过
font_size
调整数值字体大小,label_direction
控制标签方向(如UP
或DOWN
)。
- 调整刻度密度与显示规则:
三、动态交互功能
-
数值与坐标转换
使用n2p()
(数值转坐标点)和p2n()
(坐标点转数值)实现动态映射:point = number_line.n2p(3) # 数值3对应的屏幕坐标 value = number_line.p2n(point) # 坐标点对应的数值
此功能常用于动画中移动点的位置并实时显示数值。
-
动态添加元素
通过方法链式操作添加标签或刻度:number_line.add_labels({2: "关键点"}, direction=UP) number_line.add_ticks([-3, 3], tick_size=0.2)
四、高级应用示例
-
对数数轴
使用scaling
参数创建非均匀刻度:log_line = NumberLine( x_range=[0, 5, 1], scaling=LogBase(base=10), # 刻度对应10的指数 include_numbers=True )
此时数值
2
会显示为10^2
。 -
动画演示
结合Dot
和ValueTracker
实现数值动态变化:dot = Dot(color=YELLOW).move_to(number_line.n2p(-4)) tracker = ValueTracker(-4) dot.add_updater(lambda d: d.move_to(number_line.n2p(tracker.get_value()))) self.play(tracker.animate.set_value(4), run_time=3)
此动画会使点从-4移动到4,并显示移动路径。
五、常见问题
-
刻度重叠
调整line_to_number_buff
参数增加数值与线条的间距,或使用numbers_to_exclude
隐藏部分标签。 -
箭头错位
若数轴旋转(rotation
参数),需同步调整tip_shape
的角度以匹配方向。
通过上述方法,可以灵活创建从基础到复杂的数轴,并实现动态教学演示。建议参考 Manim 官方文档中的完整参数列表和示例代码进一步探索。