使用 Squeak(Etoys) 模拟日食月食
文章目录
太阳是石而月亮是土 – 阿那克萨哥拉(古希腊 公元前500年)
模型是揭示真相的谎言
前两天跟小蘑菇分享 Squeak 学习笔记, 里边提到:
Alan Kay 说计算机可以是一切的媒介, 而媒介的作用是将思想具体化。
Alan Kay 在《理解媒介》的影响下说出这样的话, 我们对这种洞察充满敬意。
午饭时间聊起美国刚发生的日食, 聊到日食月食的成因。她一直听我称赞 Squeak 在呈现想法上的潜力, 于是怂恿我在不使用代码的情况下, 用 Squeak 模拟日食月食, 并要求能让没有编程知识的人弄懂系统的运作。
我跃跃欲试, 一边聊天一边使用 Morphic 为我们的想法"塑形", 她一边看我操作, 一边提出新的想法, 并立刻看到新的想法"运行起来"。震惊于Squeak在塑造想法上的能力, 喃喃道她也要用 Squeak。 当我最终让日地系统和地月系统都跑起来时, 她又提议说能不能在日食/月食发生时发出提醒, 记录下来, 提议说可以做一个扫描器一样的东西。于是我从 objects 仓库里拿出一个箭头样子的直线(没有任何功能), 做了雷达一样的扫描器, 不断扫描这三个天体何时连成一条线。
最终有了这样一个简单的模拟:
它完全是在聊天中完成, 一切都是可见和可理解的,没有写一行文本代码。
后记
我尤其喜欢这里的扫描器。
为了知道日食月食何时发生,我最初想到的是三点共线定理, 要实现它, 很难不使用代码。
她想到是不是可以让一根线扫来扫去, 如果同时扫到所有星体, 说明此刻三点共线。
这可能也是许多小朋友会想到的! 这个想法似乎由视觉界面启发, 正展示了视觉媒介的力量!
Alan Kay 在Doing with Images Makes Symbols 演讲里提到让三个年龄段的孩子画圆的故事, 与我们扫描器这个例子有异曲同工之处, 使用符号思考有时候相当脆弱(诸如这里的三点共线定理和视频提到的圆的解析式)。
FAQ
日地系统时如何构建的?
日地系统的构建比较简单:
- 太阳不动
- 地球绕着太阳转
我们可以完全在视觉环境中做到这点(无需写代码)
首先让地球成为太阳的 submorph:
这样地球就会成为太阳系的一部分, 挪动太阳,地球也会跟着动:
然后将地球拖到合适的轨道上:
- shift + option + click 选中作为 submorph 的地球
- 地球会被限制在太阳(椭圆)的 extent 里, 如果轨道比较远, 可以使用
forward
移动地球到目标位置
将地球的旋转中心移到太阳中心位置(shift+click):
这样一来, 地球转动(turn
)的时候,就会以太阳为中心了
地月系统是如何构建的?
要构建地月系统, 我们需要做到以下两点
- 月球绕着地球转(和上边的日地系统相同操作)
- 月球跟着地球一起绕太阳转
要如何做到第 2 条呢?
什么都不用做! 当我们让月球成为地球的 submorph , “地球围绕太阳转” 的运动会叠加到月球上!
submorph 非常强大, 很适合用于构建复合系统。 Snap! 也支持 submorph, Scratch 不支持。
如何在 Snap! 中构建它
前边说到
submorph 非常强大, 很适合用于构建复合系统。 Snap! 也支持 submorph, Scratch 不支持。
我们要如何在 Snap! 里构建地月系统这样的复合对象呢?
参考 示例项目
演示视频:
扫码器的工作留作课后练习 :)
文章作者 种瓜
上次更新 2024-04-10