文档

受力与动画

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

PhysLoom 把“求解什么”和“展示什么”分开。实体、关系和参数先定义模型;showdrive 再选择读者看到的投影。

展示求解结果

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
}

这段源码只声明一条绳路。静态切点、机械利益、重物位移、自由端动画和受力图都应由它投影出来。