文档

受力与动画

让展示内容来自同一份物理解,而不是独立的静态标注。

PhysLoom 把“求解什么”和“展示什么”分开。实体、关系和参数先定义模型;show 选择标注,animate 请求动画。

展示求解结果

show cargo.forces R.tension cargo.displacement cargo.force_diagram

forces 在主图中展示力矢量;force_diagram 生成单独的受力分析图。矢量的方向和大小来自求解结果,不应由渲染器猜测。

当图上信息太多时,只保留讲解当前步骤需要的内容。隐藏张力或重力不会改变模型,只会减少视觉噪声。

请求运动

所有动画统一使用 animate,例如让实验运行三秒,以半速观看:

animate duration=3s speed=0.5

duration 是实验时长;speed 是倍速,默认 1。这里播放六秒,但实验只推进三秒。 倍速不会改变力、速度或轨迹。要规定绳端移动一米,可写 animate R.free distance=1m duration=2s speed=1。

对可由模型推导结束时刻的过程,可以省略时长,让模型决定事件或周期终点:

animate left speed=0.25
animate planet speed=8e6
animate electron speed=1e-8

这三行是不同场景的独立示例。天体运动需要快放,微观运动需要慢放,倍速含义不变。 编译器选择对应领域的求解器。没有匹配求解器时产生错误,不会凭空生成运动。

动画必须共享物理状态

物体位置、绳段长度、弹簧伸长、速度箭头和读数必须从同一个 MotionClip 采样。这样暂停在任意一帧时,图、数值和受力仍然互相一致。

删掉 animate 可得到静态图。不要用手写关键帧掩盖缺失的物理求解。

一个完整例子

scene moving_pulley

support ceiling orientation=horizontal
load cargo 20kg
pulley M, F

M <-> cargo
F <-> ceiling

rope R
R: ceiling -> M -> F -> R.free

animate distance=1m duration=3s speed=1
show R R.displacement cargo.displacement cargo.force_diagram

这段源码声明物理附着关系,并将绳命名为 R,以选择它的张力和自由端位移。静态切点、机械利益、重物位移、自由端动画和受力图都来自同一份已求解拓扑。