news 2026/8/9 16:26:21

26、Scratch编程探秘—用三角函数实现动态钟摆

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
26、Scratch编程探秘—用三角函数实现动态钟摆

1. 三角函数与钟摆运动的奇妙结合

第一次在Scratch里尝试用三角函数做动画时,我盯着那个左右摇摆的小球看了足足十分钟。那种感觉就像发现了新大陆——原来枯燥的数学公式真的能让角色"活"起来!钟摆运动是最适合入门三角函数的案例,因为它完美展现了正弦函数的周期性变化。

你可能在物理课上看过老式挂钟的钟摆,它的运动轨迹就像被施了魔法一样规律。其实这个魔法就是正弦函数在起作用。想象一下,当你把钟摆拉到最高点松开时,它会先加速下落,经过最低点时速度最快,然后逐渐减速上升到另一侧。这个过程中,摆球的高度变化正好符合sin(角度)的曲线。

在Scratch里,我们不需要复杂的物理引擎,只需要三个关键变量就能模拟这个现象:

  • 角度:从0开始不断增加的度数
  • 幅度:决定钟摆能摆多远的系数
  • 高度:实时计算得出的y坐标值

具体怎么操作呢?我们先用当绿旗被点击启动程序,然后创建一个重复执行循环。在循环里让角度变量每步增加5(这个值决定摆动速度),然后用将高度设为幅度*sin(角度)计算出当前位置。最后用将y坐标设为高度让角色动起来。就这么简单的几行积木,一个活灵活现的钟摆就诞生了!

2. 从零开始搭建钟摆动画

2.1 创建基础角色与背景

打开Scratch时,我建议先删除默认的小猫角色,新建一个圆形精灵作为钟摆球。选择纯色填充更方便后续添加颜色特效。背景最好用渐变色的,比如从上到下的浅蓝到深蓝渐变,这样能更清楚地观察小球的垂直运动轨迹。

设置角色大小时有个小技巧:按住Shift键拖动角上的缩放点可以等比例调整。我通常会把小球直径控制在50-80像素之间,太小看不清运动细节,太大又会影响动画流畅度。位置方面,先把小球拖到舞台正中央(x=0,y=0),这是我们钟摆的静止点。

2.2 初始化关键变量

点击"变量"分类,新建三个变量:

  1. 角度:初始值设为0
  2. 幅度:建议设为100-150之间
  3. 高度:不需要设初始值,它会被实时计算

这里有个初学者常踩的坑:忘记把角度变量设置为"适用于所有角色"。如果设成了"仅适用于当前角色",当你想添加多个钟摆时就会出问题。我建议所有控制动画的变量都设为全局变量。

初始化脚本应该这样写:

当绿旗被点击 将 [角度 v] 设为 [0] 将 [幅度 v] 设为 [120] 隐藏变量 [高度 v] // 这个变量不需要显示在舞台上

3. 让钟摆真正摆动起来

3.1 核心运动逻辑实现

现在来到最激动人心的部分——编写运动脚本。在角色脚本区添加以下积木:

当绿旗被点击 重复执行 将 [角度 v] 增加 (5) 将 [高度 v] 设为 ( (幅度) * ( [sin v] 中 (角度) ) ) 将y坐标设为 (高度) 等待 (0.05) 秒 end

运行后你会看到小球开始上下摆动,但可能不太自然。这是因为:

  • 角度增量太大(一次加5)会导致动画卡顿
  • 没有考虑物理世界中的减速效果
  • 等待时间固定会让不同电脑上速度不一致

改进方案是用更小的角度增量(比如1)和更短的等待时间(0.01秒)。还可以加入加速度效果:

将 [角度 v] 增加 ( (90) - ( [绝对值 v] 中 ( (角度) mod (180) ) ) ) / (20) )

3.2 添加视觉效果增强体验

单纯的上下摆动有点单调,我们可以用Scratch的图形特效来增加视觉吸引力。在运动循环里添加:

将 [颜色 v] 特效增加 ( ( [绝对值 v] 中 (高度) ) / (5) )

这样小球会在摆动过程中渐变颜色,摆得越高颜色越鲜艳。如果想更炫酷,可以同时修改虚像特效:

将 [虚像 v] 特效设为 ( (100) - ( [绝对值 v] 中 (高度) ) )

现在小球会在接近最高点时变得半透明,模拟真实钟摆的速度变化。这些特效虽然简单,但能让数学概念的学习过程变得生动有趣。

4. 深入理解三角函数原理

4.1 正弦函数的可视化理解

很多同学背过"正弦函数图像是波浪线",但直到用Scratch做钟摆时才真正理解这句话的含义。我们可以在项目中添加一个画笔角色,让它实时绘制高度值的变化曲线:

  1. 新建角色,添加画笔扩展
  2. 编写脚本:
当绿旗被点击 擦除 落笔 将笔的颜色设为 [#FF0000] 无限循环 移动到 x: ( (角度) / (2) ) y: (高度) end

运行后会看到一条标准的正弦曲线慢慢展开。这个实时可视化工具能帮助学生直观理解:

  • 每360度完成一个完整周期
  • 波峰和波谷对应钟摆的最高点
  • 过零点对应钟摆经过中心点的时刻

4.2 调整参数观察变化

现在我们来做个实验:在绿旗脚本里添加按键控制,让我们能实时调整幅度值:

当 [上箭头 v] 被按下 将 [幅度 v] 增加 (10) 当 [下箭头 v] 被按下 将 [幅度 v] 增加 (-10)

按上/下箭头时,你会发现:

  • 幅度值越大,小球摆得越高
  • 但摆动周期(来回一次的时间)保持不变
  • 正弦曲线的振幅变化,但波长不变

这引出了三角函数的一个重要特性:振幅影响波动范围,但不影响周期。这个概念在声波、光波等物理现象中都有体现。

5. 创意扩展与项目升级

5.1 制作双摆系统

掌握了单摆后,可以挑战更复杂的双摆系统。复制当前角色,修改第二个小球的脚本:

将 [高度 v] 设为 ( (幅度) * ( [sin v] 中 ( (角度) * (0.8) ) ) )

这个0.8的系数会让第二个摆比第一个慢一些。运行后你会看到两个钟摆开始同相摆动,然后逐渐出现相位差,最后又回归同步。这个现象在真实世界的钟摆群中也能观察到。

5.2 添加用户交互功能

让项目更具互动性,可以添加这些功能:

  1. 鼠标控制初始幅度:
当角色被点击 将 [幅度 v] 设为 ( (鼠标y) / (2) )
  1. 空格键暂停/继续:
当 [空格 v] 被按下 如果 <(暂停) = [0]> 那么 将 [暂停 v] 设为 [1] 停止 [全部 v] 否则 将 [暂停 v] 设为 [0] end

5.3 导出为可分享项目

完成所有功能后,点击"文件→保存到电脑"可以导出.sb3文件。如果想在线分享,需要注册Scratch官网账号。上传时记得:

  • 填写详细的项目说明
  • 添加"数学"、"物理"、"动画"等标签
  • 在注释里写明操作说明

我经常在课堂上让学生互相体验对方的钟摆项目,你会发现同样的原理能做出千变万化的效果——有的加了背景音乐,有的让钟摆撞响铃铛,还有的做成了艺术装置。这就是Scratch的魅力所在。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 15:30:49

SAM3对比传统工具:自然语言引导分割,效率提升不止一点点

SAM3对比传统工具&#xff1a;自然语言引导分割&#xff0c;效率提升不止一点点 1. 技术背景与核心价值 图像分割技术在过去十年经历了从手动标注到AI辅助的演进过程。传统工具如Photoshop的"快速选择"或"魔术棒"功能&#xff0c;虽然在一定程度上简化了…

作者头像 李华
网站建设 2026/7/14 15:30:49

快速构建开源项目官网:使用快马平台十分钟生成openclaw官网原型

最近在参与一个开源项目&#xff0c;团队想为我们的自动化测试库 openclaw 搭建一个官网。项目刚起步&#xff0c;核心功能已经稳定&#xff0c;急需一个对外展示的窗口来吸引用户和贡献者。但作为开发者&#xff0c;我们更擅长写代码而不是设计网页&#xff0c;从头搭建一个官…

作者头像 李华
网站建设 2026/7/14 15:30:48

SOONet模型Java开发集成指南:SpringBoot后端服务构建

SOONet模型Java开发集成指南&#xff1a;SpringBoot后端服务构建 如果你是一名Java开发者&#xff0c;正在寻找将AI视频分析能力集成到企业级应用中的方法&#xff0c;那么你来对地方了。今天&#xff0c;我们就来聊聊如何把SOONet这个强大的视频定位模型&#xff0c;无缝地整…

作者头像 李华
网站建设 2026/7/14 15:30:48

微信单向好友智能检测创新解决方案:识别无效社交关系的技术实践

微信单向好友智能检测创新解决方案&#xff1a;识别无效社交关系的技术实践 【免费下载链接】WechatRealFriends 微信好友关系一键检测&#xff0c;基于微信ipad协议&#xff0c;看看有没有朋友偷偷删掉或者拉黑你 项目地址: https://gitcode.com/gh_mirrors/we/WechatRealFr…

作者头像 李华