文档
受力与动画
让展示内容来自同一份物理解,而不是独立的静态标注。
PhysLoom 把“求解什么”和“展示什么”分开。实体、关系和参数先定义模型;show 与 drive 再选择读者看到的投影。
展示求解结果
show force
show tension
show displacement
show force_diagram
force 在主图中展示力矢量;force_diagram 生成单独的受力分析图。矢量的方向和大小来自求解结果,不应由渲染器猜测。
当图上信息太多时,只保留讲解当前步骤需要的内容。隐藏张力或重力不会改变模型,只会减少视觉噪声。
请求运动
drive 指定观察对象和运动意图:
drive R.free displacement=1m duration=2s
这里的 displacement=1m 是物理观察窗口。duration=2s 只有在该场景允许规定运动时才定义真实时长。playback=3s 只调整屏幕播放速度,不改变物理时间。
对可由模型推导的过程,优先写阶段:
drive R phase=release displacement=0.5m playback=3s
drive planet phase=period playback=5s
drive electron phase=transit playback=3s
编译器会选择对应领域的 motion compiler。没有匹配求解器时应产生错误,而不是播放一段看起来合理的通用位移动画。
动画必须共享物理状态
物体位置、绳段长度、弹簧伸长、速度箭头和读数必须从同一个 MotionClip 采样。这样暂停在任意一帧时,图、数值和受力仍然互相一致。
当前模型如果只支持静态求解,删掉 drive 仍可得到静态图。不要用手写关键帧掩盖缺失的物理求解。
一个完整例子
scene moving_pulley {
support ceiling
body load mass=20kg
pulley M attached to load
pulley F fixed to ceiling
rope R path anchor(ceiling) -> around(M) -> around(F) -> handle
show tension displacement force_diagram
drive R.free displacement=1m duration=3s
}
这段源码只声明一条绳路。静态切点、机械利益、重物位移、自由端动画和受力图都应由它投影出来。