from vpython import * import math import time # 创建场景 scene = canvas(width=2000, height=200, background=color.black) # 定义基本参数 amplitude = 80 frequency = 0.2 wave_speed = 50 # 假设波速,单位为格子/秒 wave_length = 400 * 5 # 总长度 # 创建 400 个长方体 cubes = [box(pos=vector(i * 5, 0, 0), size=vector(10, 0.5, 400), color=color.magenta) for i in range(400)] # 记录每个长方体的波动时间 start_times = [None] * 400 # 动画开始时间 animation_start_time = time.time() # 更新函数 def update(): elapsed_time = time.time() - animation_start_time wave_position = wave_speed * elapsed_time % wave_length # 更新每个长方体的位置 for i in range(400): if start_times[i] is None and wave_position >= i * 5: start_times[i] = elapsed_time if start_times[i] is not None: cube_elapsed_time = elapsed_time - start_times[i] phase_shift = i / 400 * 2 * math.pi # 相位偏移 y = amplitude * math.sin(2 * math.pi * frequency * cube_elapsed_time + phase_shift) cubes[i].pos.y = y # 设置下一次更新的时间间隔(这里假设我们希望每秒更新20次) scene.interval = 1.0 / 20 # 开始更新 scene.bind('interval', update) # 运行场景 scene.visible = True