显影· 三主题树 · 高中 术语表

p5.js 创意编码:让想法看得见

用代码画数学、画物理、画想象——最能点燃人的编程入口。

⏱ 10–15 分钟讲 · 例 · 做 · 卡编号 hs-make-11
学习证据 学完后,怎么核对? 如何核对 · 适用边界 · 最后复核

把学习结果留在一个可以回看、可以复做的动作里;这一区只写学生能自己检查的证据。

如何核对

  • 本地可复现草图与参数记录
  • 账号政策、上传内容与替代路径核对

适用边界

p5 在线编辑器的账号年龄、保存、公开与上传规则可能变化;只提交匿名公式和示例参数。含个人或未公开内容时使用项目内本地 p5,并按学校设备政策操作。

最后复核

这是内容复核日期,不是学习截止日期。

例子sin 是背出来的,还是看见的?

问小北 sin 是什么,她背得出「对边比斜边」和一条波浪线。可当她第一次用十行代码让一个小球沿正弦轨迹跑起来、又顺手把频率改大一倍看着波变密——她说了一句很多人第一次创意编码都会说的话:「原来这个公式是活的。」下面这张会动的数学,你现在就可以点:

这是李萨如曲线:横坐标走一条正弦波、纵坐标走另一条,轨迹是它俩的合舞。当前频率比 3 : 2——点一下画布,换一对频率比看看。曲线由本页挂的 p5.js 现场画出,颜色随右上角主题走。

名词p5.js=为艺术家和学生设计的创意编码库(免费开源,vendored 单文件即可用):给你一块画布和一堆画笔函数。创意编码=拿代码当画笔——目标不是做软件,是把数学、物理、想象画到看得见。

定义骨架只有两个函数:setup 管一次,draw 管每帧

setup() 开场执行一次:搭画布、定初值;draw() 之后每秒自动重跑约 60 次。动画没有魔法:变量每帧变一点,画面每帧重画一遍,连起来就动了——2.2b 的三拍循环换了自动挡:不用等你点击,时间自己当事件。

p5 的心跳:setup 一次,draw 每帧 setup() 一次 · 搭画布定初值 draw() 每帧重画一遍 每秒约 60 次自动重跑 你看到的动画 变量变一点,画面动一点 动画没有魔法:变量每帧变一点、画面每帧重画一遍——三拍循环的自动挡

静止的画同样出自 draw——本页的李萨如用 noLoop() 只画一帧,点击时才重画一次。

九行代码,一颗沿正弦轨迹飞的球:

let x = 0;
function setup() { createCanvas(400, 200); }   // 一次:搭画布
function draw() {                              // 每帧:重画
  background(20);                              // 先清屏
  circle(x, 100 + 60 * sin(x * 0.05), 20);     // 位置里藏着 sin
  x = x + 2;                                   // 变量每帧变一点
}

想看波密一点?把 0.05 改大。想飞快一点?把 + 2 改大。改参数、立刻看见——这是创意编码的第一口甜:反馈快到不需要耐心。

泛化换个角度:看不懂的公式,让它动起来

课本里的公式是「压缩包」:sin 压缩着圆周运动,平抛公式压缩着两个方向的独立运动。代码是解压器——符号变成轨迹、参数变成旋钮,「改参数 → 看变化」是你能对任何系统做的最诚实的实验:物理模拟、函数图像、生成艺术,同一个姿势。往后再遇到啃不动的抽象概念,多一条路:把它画出来;画不出来的那一步,就是你还没懂的那一步——和 2.2c「箭头画不出来=因果没想清」是同一条判据。

核心句:p5 两个函数开画:setup 管一次、draw 管每帧——动画=变量每帧变一点、画面重画一遍;改参数、立刻看见:让公式动起来,是理解它最快的一条路。

补充三例——两个常见用法,一个易错。

例一 · 常见用法:把物理作业画活

小雨学平抛运动:x 匀速、y 越掉越快。核心就三行——x 每帧加 vx,y 每帧加 vy,vy 每帧再加 g——课本上的抛物线在画布上自己长了出来。她把 g 改小试了个「月球版」,又把初速度加倍看落点:每改一个参数都是一次实验,比多刷三道题更清楚公式里每个字母管什么。

例二 · 常见用法:算法贺卡

朵朵给全班做新年卡:规则写死(六瓣雪花、暖色系、名字居中),位置和大小交给 random()——同一段代码每跑一次都是一张不同的雪花,43 个同学 43 张,张张独一无二。随机加规则,是生成艺术的基本配方:规则给它秩序,随机给它惊喜——两样缺一样,要么呆板要么混乱。

例三 · 易错:分不清「一次」和「每帧」

大鹏画星空:把 createCanvas 写进了 draw(),页面每秒重建 60 次画布,闪成一片还发烫;改对之后星星又开始每帧乱跳——他把「随机生成星星位置」也放在了 draw() 里,满屏雪花。错在哪:没分清哪些事做一次、哪些事每帧做。修法:口诀「搭台一次、演出每帧」——建画布、生成初始数据进 setup;只有随时间变化的部分进 draw。想要「静止但点击可换」,就 noLoop() 加 redraw()——本页的李萨如就是这么写的。

想让一个小球从画布左边匀速滑到右边,正确的思路是?

在线编辑器与替代:p5 官方在线编辑器可能涉及账号、年龄和上传规则;只放匿名公式和示例参数,不放个人资料或项目文件。不能联网/安装时,使用项目里的 vendored p5 文件或纸笔画轨迹、记录参数变化;交给智能体前先留快照并检查 diff。
上机 · 让一个公式动起来
  1. 确认学校设备和账号规则后,任选其一:让编程智能体给你搭 p5 起步页(约束:vendored 单文件、本地 HTTP 预览可用),或使用 p5 官方在线编辑器;在线编辑器只放匿名公式和示例参数。
  2. 挑一个你正在学的公式(正弦、平抛、匀加速、圆周运动都行),把它画出来——代码不会写就交任务单,但动画里哪个变量在每帧变化,必须你自己说得出
  3. 至少改两个参数各看一次效果,各用一句话记下它管什么。
  4. 进阶(选做):加一个 mousePressed(),点击换参数;git 拍快照。

怎么算过关:页面能在本地 HTTP 预览中打开、画面会动(或点击会变);你能指着代码说出每帧在变的变量是哪一个;两条参数笔记落在纸面。

复习卡 · 点一下翻面

p5 的两个骨架函数各管什么?动画的本质是什么?

答案

setup() 开场执行一次(搭画布、定初值);draw() 每秒自动重跑约 60 次。动画=变量每帧变一点、画面每帧重画一遍——「搭台一次、演出每帧」。

  • 改参数、立刻看见——反馈快是创意编码的第一口甜,也是理解公式最快的路。
  • 搭台一次(setup)、演出每帧(draw):分错了不是闪屏就是雪花。
  • 随机+规则=生成艺术的基本配方:规则给秩序,随机给惊喜。