Manim 创建数轴

在 Manim 中创建数轴主要依赖 NumberLine 类,其参数和功能设计非常灵活,能够满足多种数学动画需求。以下是创建数轴的详细方法和技巧:


一、基础数轴创建

  1. 核心参数
    使用 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:数轴颜色(支持 REDBLUE 等预设颜色常量)

二、样式定制

  1. 箭头与形状
    通过 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(方形箭头)
  2. 刻度与数值

    • 调整刻度密度与显示规则:
      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 控制标签方向(如 UPDOWN)。

三、动态交互功能

  1. 数值与坐标转换
    使用 n2p()(数值转坐标点)和 p2n()(坐标点转数值)实现动态映射:

    point = number_line.n2p(3)  # 数值3对应的屏幕坐标
    value = number_line.p2n(point)  # 坐标点对应的数值
    

    此功能常用于动画中移动点的位置并实时显示数值。

  2. 动态添加元素
    通过方法链式操作添加标签或刻度:

    number_line.add_labels({2: "关键点"}, direction=UP)
    number_line.add_ticks([-3, 3], tick_size=0.2)
    

四、高级应用示例

  1. 对数数轴
    使用 scaling 参数创建非均匀刻度:

    log_line = NumberLine(
        x_range=[0, 5, 1],
        scaling=LogBase(base=10),  # 刻度对应10的指数
        include_numbers=True
    )
    

    此时数值 2 会显示为 10^2

  2. 动画演示
    结合 DotValueTracker 实现数值动态变化:

    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,并显示移动路径。


五、常见问题

  1. 刻度重叠
    调整 line_to_number_buff 参数增加数值与线条的间距,或使用 numbers_to_exclude 隐藏部分标签。

  2. 箭头错位
    若数轴旋转(rotation 参数),需同步调整 tip_shape 的角度以匹配方向。


通过上述方法,可以灵活创建从基础到复杂的数轴,并实现动态教学演示。建议参考 Manim 官方文档中的完整参数列表和示例代码进一步探索。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

许野平

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值