文档

常用模型写法

从可运行场景理解力学、电路、光学、场、热学、流体和现代物理的共同结构。

语言参考 回答“有哪些词”,这一章回答“怎样把词组成模型”。下面每段完整场景都可以直接放进 Studio。先声明实体,用结构行或具名模型连接参与者,再请求运动和展示结果。只有常用的 on 关系可以附在实体声明中;模型名称不能与实体或其他模型重名。

力学:物体怎样运动

抛体模型只需要地面、物体和初始运动关系。animate 让求解器按物理时间演化,show 决定图上显示哪些结果。

scene projectile_flight

surface ground horizontal
body ball 1kg shape=point
launch flight body=ball origin=ground speed=20m/s angle=45deg

animate ball speed=0.72
show ball ball.path

斜面、碰撞、轨道和振动仍沿用这套结构,只是实体与物理模型不同。

body crate 1kg on ramp 表示一个 1 千克物体放在斜面上; 球沿斜面无滑动滚动时,先声明 body ball 1kg shape=sphere radius=6cm,再写 rolling roll body=ball surface=ramp mode=without_slipping。实体参数和模型参数各自独立。 上面的抛体中,1kg 属于物体,speed=20m/s 和 angle=45deg 属于发射模型, 具名属性交换顺序也不改变含义。

连续路线用 trajectory route body=block stages=(ramp, floor, S) transition=lossless,按运动顺序列出 光滑斜面、粗糙水平段和固定弹簧。animate block 演示到第一次停下或最大压缩; floor.length 是接触弹簧之前的水平距离,压缩期间地面摩擦仍然做功。 无损弯道保持速率,但不模拟尖角碰撞。 滑块本身单独声明为 body block 1kg shape=point,括号将重复的 stages 角色按运动顺序分组。 被引用的实体可以在后面声明。 打开完整的斜面到弹簧综合题,修改摩擦系数, 比较压缩弹簧与提前停下的结果。

电路:元件怎样连接

<-> 表示串联经过,<=> 表示并联分支。隐藏的端口和节点由编译器生成,普通模型不需要先声明抽象节点。

scene parallel_circuit

source V 12V
resistor R1 100ohm
resistor R2 200ohm

V <-> (R1 <=> R2) <-> V

默认图只显示电源、元件和连线。讲解欧姆定律或分流关系时,可以添加 show R1 R2,请求对应元件的常用电学结果;只有专门讲传统电流方向时,才添加 animate V speed=1。电流示踪是可选教学叠层,不是电路图的默认样式。

开关状态属于模型源码。修改 open 或 closed 后,Studio 会重新解析和求解电路。图只呈现当前源码对应的状态,不提供另一套图形编辑入口。灯泡的两个位置参数按物理量纲识别为额定电压和额定功率,所以 lamp L 6V 3W 与 lamp L 3W 6V 含义相同;颜色只改变灯光色调,明暗由求解后的实际功率决定。

scene switched_colored_lamp

source V 6V
switch S closed
lamp L 6V 3W #gold

V <-> S <-> L <-> V

这个案例把注意力放在开关造成的状态变化:断开时电流为零、灯泡熄灭;闭合后重新求解电路,灯泡按实际功率显示亮度。它默认不绘制电流点、方向箭头或支路读数。可用 show L 请求灯泡的电学结果;只有专门讲解传统电流方向时,才添加 animate V speed=1。

当前灯泡使用额定工作点近似:等效热态电阻为 R = V² / P。它适合基础直流电路图,不宣称模拟灯丝由冷到热的非线性过程。

基础电路更适合比较明确的模型状态,而不是播放一串代表电流的点。变阻器的 position 表示有效电阻占最大阻值的比例;修改这个源码参数后,节点求解和灯泡亮度会一起更新。

scene rheostat_lamp_control

source V 6V
rheostat R 18ohm position=50%
lamp L 6V 3W #gold

V <-> R <-> L <-> V

短路也应当作为可比较的电路状态来讲。下面的开关与灯泡并联,闭合后电流绕过灯泡;limiter 保证电源没有被理想导线直接短接,因此两种开关状态都能正常求解。

scene lamp_bypass_short

source V 6V
resistor limiter 1ohm
lamp L 6V 3W #gold
switch S open

V <-> limiter <-> (L <=> S) <-> V

光学:光与介质发生什么

光路按顺序写出参与者:激光从空气进入玻璃,已声明的实体种类确定折射关系。改变入射角时,反射、折射和全反射共用同一份光路状态。

scene snell_refraction

medium air refractive_index=1
medium glass refractive_index=1.5
light laser role=ray #red

laser -> air -> glass incidence_angle=20deg

animate laser incidence_angle=60deg duration=3s speed=1
show laser laser.normal

薄透镜场景可以直接使用熟悉的视觉主体。object candle 会自动绘制蜡烛,并根据求解结果生成倒立或缩放后的像;这些外观不会参与薄透镜计算。

scene thin_lens_image

object candle 4cm
lens L converging 10cm

candle -> L object_distance=30cm

animate candle object_distance=15cm duration=3s speed=1

实体名称和外观需要分开时,可以写 object specimen height=4cm subject=candle。后续关系仍然引用 specimen,subject 只选择它的视觉主体。这样同一份物理模型可以更换图示主题或主体皮肤,而不改动关系和求解结果。

这里的 4cm 是物高,30cm 是物距,10cm 是焦距,分属各自的声明或关系, 不是根据位置猜测同一串长度。已声明的物体和透镜确定唯一物理关系,因此可以使用箭头。 等价的具名写法是 imaging view object=candle optic=L object_distance=30cm。 参与者不能唯一确定箭头含义时,应使用具名模型。name=value 也是正式语法, 用于量纲相同等不能唯一简写的属性。

反射、透镜、棱镜、干涉和波的传播也使用“对象 + 关系 + 展示”的写法。

电磁场:粒子穿过哪些场

多个场可以按名称列在同一条 in 结构行中。方向和量值属于场或粒子,不需要另写一套绘图指令。

scene crossed_field_velocity_selector

particle electron charge=-1e direction=right #red
field E type=electric electric_strength=20kV/m direction=down #blue
field B type=magnetic magnetic_strength=10mT direction=into_page #green

electron in E, B length=20cm

animate electron speed=3.3e-8
show electron

热学与流体:传递和状态关系

热机把两个热库与一个能量循环联系起来:

scene carnot_cycle

reservoir hot temperature=600K
reservoir cold temperature=300K
engine motor efficiency=0.4

cycle engine_cycle engine=motor hot=hot cold=cold

show motor motor.efficiency

浮力模型则把物体放进流体,密度、质量和体积共同决定平衡状态:

scene floating_body

fluid water density=1000kg/m3
body block mass=1kg volume=0.002m3

equilibrium floating_state body=block fluid=water

show block.buoyancy block.gravity

观察小幅升沉时,把起点放在物体与流体的关系上:

scene buoyant_small_heave

fluid water 1000kg/m3
body block 1kg volume=0.002m3 area=0.02m2

equilibrium floating_state body=block fluid=water initial_displacement=1cm

animate block speed=0.15
show block.buoyancy block.gravity water.waterline

initial_displacement=1cm 表示从平衡位置向上偏移 1 cm、初速度为零;-1cm 表示向下偏移。删除 animate 后,初始位置和对应浮力仍然保留。零位移保持静止。这个样例观察一个自然周期(约 0.449 秒),speed=0.15 以 0.15 倍速播放,屏幕上约为 2.99 秒。旧文件在动画中写 amplitude 的方式仍兼容,但不能覆盖与之冲突的初始位移。

现代物理:事件与能量关系

现代物理场景不一定是经典机械装置,但仍然描述明确实体和关系。下面的光子使金属释放电子,功函数属于这次发射关系:

scene photoelectric_effect

particle photon energy=4.5eV
body metal material=sodium
particle electron

photoelectric emission incident=photon material=metal emitted=electron work_function=2.3eV angle=35deg incident_distance=3.40787507337368um

animate electron until electron.displacement == 10nm speed=7.6e-15
show electron electron.energy

incident_distance 是光子初始位置到金属表面的距离。动画里的 displacement 是要观察电子逸出多远,改变它不会移动光子起点,也不会改变光子到达时间。删除 animate 后,静态模型仍保留初始距离。未写 incident_distance 的旧文件继续兼容原有计时方式。

颜色与自定义路径

实体末尾的 #red、#blue 等颜色只改变视觉强调。普通滑轮的绳路会自动计算;只有路径本身需要定制或分段着色时,才显式声明绳子:

rope R #gray
R: ceiling -[#red]-> M -> F -[#blue]-> R.free

这段是路径片段,不是完整场景。R.free 是 R 的内置自由端。完整属性和可用颜色请查 语言参考;更多可运行模型可以直接从 案例 打开。