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

如何在Manim中制作右端固定的可振荡弹簧动画

实现固定右端的振荡弹簧

要让弹簧右端固定,仅左侧带质量的部分做振荡,需要固定弹簧的右端点,并动态调整弹簧的长度和形状以匹配质量的运动。以下是修改后的代码:

from manim import *
import numpy as np

class YoungModulus(Scene):
    def construct(self):
        # 设定弹簧右端的固定点
        fixed_right_end = RIGHT * 4
        
        # 用ValueTracker跟踪质量的x坐标,控制振荡运动
        mass_x_pos = ValueTracker(-2)

        # 动态生成弹簧:右端固定在fixed_right_end,左端随质量位置变化
        spring = always_redraw(lambda: ParametricFunction(
            # 调整正弦函数参数,保证弹簧圈数在拉伸/压缩时保持一致
            lambda t: [
                t, 
                np.sin(6 * (t - mass_x_pos.get_value()) / (fixed_right_end[0] - mass_x_pos.get_value())), 
                0
            ],
            # t范围从当前质量的x坐标到固定点的x坐标,确保右端固定
            t_range=[mass_x_pos.get_value(), fixed_right_end[0]],
            color=YELLOW,
            stroke_width=4
        ))

        # 创建质量块
        mass = Circle(
            radius=0.5,
            color=RED,
            fill_opacity=1,
            stroke_width=0
        )
        # 让质量块始终跟随弹簧左端
        mass.add_updater(lambda m: m.move_to(spring.get_start()))

        # 可选:添加固定端的标记,方便观察
        fixed_dot = Dot(fixed_right_end, color=BLUE)
        fixed_label = Text("固定端").next_to(fixed_dot, UP)

        # 入场动画
        self.play(FadeIn(spring, mass, fixed_dot, fixed_label))
        
        # 执行振荡动画:质量在x=-2和x=0之间来回运动
        for _ in range(2):
            self.play(
                mass_x_pos.animate.set_value(0),
                rate_func=smooth,
                run_time=1
            )
            self.play(
                mass_x_pos.animate.set_value(-2),
                rate_func=smooth,
                run_time=1
            )
        self.wait()

关键修改点:

  • 固定右端点:通过fixed_right_end设定弹簧右端的固定位置,动画过程中该点不会移动。
  • 动态调整弹簧长度:弹簧的t_range根据质量的实时x坐标动态变化,确保右端始终锚定在固定点,左端跟随质量移动。
  • 保持弹簧圈数一致:正弦函数的参数中加入了长度比例计算,避免弹簧拉伸/压缩时圈数变形。
  • 质量块联动:通过updater让质量块始终与弹簧左端绑定,无需手动调整位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 18:52:42