You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否修改Manim中Mobject的中心?旋轮线曲柄动画遇布局问题

解决旋轮线曲柄动画的位置对齐问题

当然可以修改Mobject的中心,不用默认的质心。你的问题根源在于:默认情况下VGroup的center是组内所有元素的质心平均值,而你需要的是让第二个曲柄的端点(那个dot)对齐到第一个曲柄的arc中心,所以得手动把曲柄组的中心设置为我们需要的锚点位置。

具体修改步骤

  1. 重设曲柄组的中心:在创建第一个曲柄crank后,将其中心设置为端点dot的位置,这样后续move_to操作就会以这个端点为基准移动。
  2. 同步旋转逻辑:把第二个曲柄的旋转和第一个曲柄绑定,避免用独立的时间增量dt导致转速不同步,保证动画的一致性。

修改后的完整代码

RADIUS = 0.2
class SpirographCranks(Scene):
    def construct(self):
      
      dot = Dot(ORIGIN)
      line = Line(ORIGIN, RIGHT * (2 - RADIUS))
      arc = Arc(arc_center=RIGHT*2, angle=PI, start_angle=PI/2, radius=RADIUS)
      
      crank = VGroup(dot, line, arc)
      # 将曲柄组的中心设置为端点dot的位置,替代默认质心
      crank.set_center(dot.get_center())
      self.add(crank)

      crank2 = crank.copy()
      def update(mobj, dt):
          # 让crank2的端点对齐到第一个crank的arc中心
          mobj.move_to(crank.arc.get_center())
          # 同步第一个crank的旋转角度,可根据需求调整方向/转速比
          mobj.set_rotation(crank.get_rotation())

      crank2.add_updater(update)
      self.add(crank2)

      self.play(Rotate(crank, angle=2*PI, rate_func=linear, about_point=ORIGIN), run_time=4)

额外说明

如果需要实现标准旋轮线的动画,第二个曲柄的转速可能需要调整(比如反向旋转或转速为第一个曲柄的特定倍数),只需要修改mobj.set_rotation的参数即可,例如:

  • 反向旋转:mobj.set_rotation(-crank.get_rotation())
  • 2倍转速:mobj.set_rotation(2 * crank.get_rotation())

内容的提问来源于stack exchange,提问作者141592653

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 10:05:25