Skip to content

基础力学与换算

基础力学示例展示 LunarUnits 的核心路径:构造数量、组合单位、换算同量纲数量,并拒绝不兼容量纲。

速度

距离除以时间会得到速度,单位自动组合为长度/时间。

text
let distance = @qgeometry.meters(100.0)
let time = @quantity.Quantity::new(10.0, @si.second)
let speed = distance / time

assert_eq(speed.value(), 10.0)
assert_true(speed.unit().is_compatible(@mechanics.meter_per_second))

牛顿第二定律

质量乘以加速度得到力。关键点不是数值乘法,而是单位组合后的结果可以和牛顿兼容。

text
let mass = @quantity.Quantity::new(2.0, @si.kilogram)
let acceleration = @quantity.Quantity::new(
  3.0,
  @si.meter / @si.second.pow(2),
)
let force = mass * acceleration

assert_eq(force.value(), 6.0)
assert_true(force.unit().is_compatible(@mechanics.newton))

做功

力乘以距离得到功或能量,单位与焦耳兼容。

text
let force = @qmechanics.newtons(10.0)
let distance = @qgeometry.meters(5.0)
let work = force * distance

assert_eq(work.value(), 50.0)
assert_true(work.unit().is_compatible(@mechanics.joule))

同量纲换算

换算只允许发生在兼容量纲之间,物理量保持不变。

text
let distance = @qgeometry.kilometers(2.0)
let in_meters = distance.to(@si.meter)

assert_eq(in_meters.value(), 2000.0)

拒绝非法相加

长度和时间没有相同量纲。非抛错路径会返回 None,适合 CLI、Web UI 和批处理程序生成友好错误。

text
let length = @quantity.Quantity::new(1.0, @si.meter)
let time = @quantity.Quantity::new(1.0, @si.second)

assert_true(length.checked_add(time) is None)