文档
DSL 基础
理解场景、实体、连接、约束和展示语句。
PhysLoom DSL 追求描述物理模型,而不是描述 SVG。一个模型通常由五层信息组成:场景、实体、连接、物理参数和展示要求。
场景
每个模型从 scene 开始:
scene inclined_plane {
// entities and relationships
}
场景名用于识别模型,不会自动成为图上的标题。
实体
实体是模型中的对象。常见实体包括 body、support、pulley、surface、spring、charge 和电路元件。
body crate mass=8kg
support ceiling
surface ramp angle=30deg
spring S stiffness=120N/m
标识符应简短且唯一。显示给读者的文字可以另外设置,不必把一整句塞进标识符。
连接和路径
连接说明对象之间的关系。绳子使用有顺序的 path,顺序就是沿着绳子行走时遇到各实体的顺序。
pulley P fixed to ceiling
rope R path body(A) -> around(P) -> body(B)
around(P) 不只是画一条经过滑轮的线。它要求绳子与轮缘相切,并把滑轮纳入绳长约束。
参数和单位
数值应带单位:
| 量 | 示例 |
|---|---|
| 质量 | mass=2kg |
| 距离 | distance=0.5m |
| 角度 | angle=30deg |
| 劲度系数 | stiffness=120N/m |
编译器会把单位归一化后再求解。不要用名称代替单位,也不要把 1kg 写成图上的纯文本来规避模型参数。
展示要求
show 语句只决定读者看见什么,不应该改变物理模型本身:
show tension
show displacement
show force_diagram
张力、位移和受力图都来自同一份求解结果。关闭它们只是让画面更简洁,不会改变绳长约束或受力关系。
何时指定布局
默认先让布局器寻找清楚且不重叠的位置。只有题目确实依赖特定构图时,再添加布局提示。布局提示应该表达相对关系,例如“在右侧”或“保持竖直”,而不是依赖某个屏幕尺寸的绝对像素。
这条边界很重要:模型说物理事实,布局说怎样看清这些事实。