文档

DSL 基础

理解场景、实体、连接、约束和展示语句。

PhysLoom DSL 追求描述物理模型,而不是描述 SVG。一个模型通常由五层信息组成:场景、实体、连接、物理参数和展示要求。

场景

每个模型从 scene 开始:

scene inclined_plane {
  // entities and relationships
}

场景名用于识别模型,不会自动成为图上的标题。

实体

实体是模型中的对象。常见实体包括 bodysupportpulleysurfacespringcharge 和电路元件。

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

张力、位移和受力图都来自同一份求解结果。关闭它们只是让画面更简洁,不会改变绳长约束或受力关系。

何时指定布局

默认先让布局器寻找清楚且不重叠的位置。只有题目确实依赖特定构图时,再添加布局提示。布局提示应该表达相对关系,例如“在右侧”或“保持竖直”,而不是依赖某个屏幕尺寸的绝对像素。

这条边界很重要:模型说物理事实,布局说怎样看清这些事实。