2525 年,你刚刚踏上旅程,准备造访太阳系里的所有行星(水星、金星、地球、火星、木星、土星、天王星和海王星)。 第一站是水星,那里的海关要求你填写一张表格(看来官僚作风_并非_地球独有)。 你把表格递给海关官员,对方仔细查看后皱起了眉。 “你_真的_觉得我会相信你只有 50 岁吗? 你肯定快 200 岁了!”
你觉得好笑,等着海关官员笑出声,可对方一脸严肃,完全不像在开玩笑。 你这才意识到,自己填的年龄是按_地球年_算的,而官员期待的却是_水星年_! 水星绕太阳的公转周期比地球短得多,所以换算成水星年,你的年龄其实大得多。 快速计算一番之后,你报出了自己的水星年龄。 海关官员满意地笑了笑,挥手示意你通过。 你暗暗记下,以后过海关检查前要_提前_算好自己的各行星年龄,免得再出这种岔子。
如果你想知道冥王星为什么没有入选,可以看看这个 YouTube 视频。
给定一个以秒为单位的年龄,计算这个人在太阳系中某颗行星上的年龄。
一个地球年等于 365.25 个地球日,即 31,557,600 秒。 如果有人告诉你某人已经 1,000,000,000 秒大了,那么他的年龄就是 31.69 地球年。
对于其他行星,你需要考虑它们以地球年为单位的公转周期:
| Planet | Orbital period in Earth Years |
|---|---|
| Mercury | 0.2408467 |
| Venus | 0.61519726 |
| Earth | 1.0 |
| Mars | 1.8808158 |
| Jupiter | 11.862615 |
| Saturn | 29.447498 |
| Uranus | 84.016846 |
| Neptune | 164.79132 |
地球绕太阳完整公转一周的实际时长更接近 365.256 天(1 个恒星年)。 公历平均一年有 365.2425 天。 虽然不完全准确,但本练习采用的就是 365.25 这个值。 衡量一年的方法还有很多,参见维基百科上的“年”。
在这个练习中,你需要使用带有自定义单位的物理量来返回年龄,该单位表示那颗行星上一年的长度。 在 Arturo 中,一个量由数值和关联的计量单位组成。
length: 10`m
units length ; `m
scalar length ; 10
10`m * 10`m ; 100 m²
Arturo 内置的`yr unit 会转换为 31556952 秒。 因此,你需要根据前面说明中提到的秒数,定义并使用你自己的“年”单位。
量可以被转换为另一个兼容的单位。
convert 1`m `ft ; 1250/381 ft
convert 100`m2 `ft2 ; 156250000/145161 ft²
property `m ; length
property `m2 ; area
convert 1`m `m2 ; conversion error results
由于浮点数的精度限制,Arturo 有时会把标量存储为有理数。
可以使用 to 函数 改为获取近似的浮点数形式的数值。
length: convert 1`m `ft ; 1250/381 ft
to :floating length ; 3.280839895013123
Arturo 还允许我们为量指定自己的单位。
specify 'nauMile 1.151`mi
property `nauMile length
specify 'lea 3.00579`nauMile
property `lea ; length
depth: 20000`lea
convert depth `km ; 111355.7993425152 km