p5.js 创意编码:让想法看得见
用代码画数学、画物理、画想象——最能点燃人的编程入口。
学习证据 学完后,怎么核对?
把学习结果留在一个可以回看、可以复做的动作里;这一区只写学生能自己检查的证据。
如何核对
- 本地可复现草图与参数记录
- 账号政策、上传内容与替代路径核对
适用边界
p5 在线编辑器的账号年龄、保存、公开与上传规则可能变化;只提交匿名公式和示例参数。含个人或未公开内容时使用项目内本地 p5,并按学校设备政策操作。
最后复核
这是内容复核日期,不是学习截止日期。
讲
例子sin 是背出来的,还是看见的?
问小北 sin 是什么,她背得出「对边比斜边」和一条波浪线。可当她第一次用十行代码让一个小球沿正弦轨迹跑起来、又顺手把频率改大一倍看着波变密——她说了一句很多人第一次创意编码都会说的话:「原来这个公式是活的。」下面这张会动的数学,你现在就可以点:
这是李萨如曲线:横坐标走一条正弦波、纵坐标走另一条,轨迹是它俩的合舞。当前频率比 3 : 2——点一下画布,换一对频率比看看。曲线由本页挂的 p5.js 现场画出,颜色随右上角主题走。
名词p5.js=为艺术家和学生设计的创意编码库(免费开源,vendored 单文件即可用):给你一块画布和一堆画笔函数。创意编码=拿代码当画笔——目标不是做软件,是把数学、物理、想象画到看得见。
定义骨架只有两个函数:setup 管一次,draw 管每帧
setup() 开场执行一次:搭画布、定初值;draw() 之后每秒自动重跑约 60 次。动画没有魔法:变量每帧变一点,画面每帧重画一遍,连起来就动了——2.2b 的三拍循环换了自动挡:不用等你点击,时间自己当事件。
静止的画同样出自 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「箭头画不出来=因果没想清」是同一条判据。
例
补充三例——两个常见用法,一个易错。
小雨学平抛运动:x 匀速、y 越掉越快。核心就三行——x 每帧加 vx,y 每帧加 vy,vy 每帧再加 g——课本上的抛物线在画布上自己长了出来。她把 g 改小试了个「月球版」,又把初速度加倍看落点:每改一个参数都是一次实验,比多刷三道题更清楚公式里每个字母管什么。
朵朵给全班做新年卡:规则写死(六瓣雪花、暖色系、名字居中),位置和大小交给 random()——同一段代码每跑一次都是一张不同的雪花,43 个同学 43 张,张张独一无二。随机加规则,是生成艺术的基本配方:规则给它秩序,随机给它惊喜——两样缺一样,要么呆板要么混乱。
大鹏画星空:把 createCanvas 写进了 draw(),页面每秒重建 60 次画布,闪成一片还发烫;改对之后星星又开始每帧乱跳——他把「随机生成星星位置」也放在了 draw() 里,满屏雪花。错在哪:没分清哪些事做一次、哪些事每帧做。修法:口诀「搭台一次、演出每帧」——建画布、生成初始数据进 setup;只有随时间变化的部分进 draw。想要「静止但点击可换」,就 noLoop() 加 redraw()——本页的李萨如就是这么写的。
做
想让一个小球从画布左边匀速滑到右边,正确的思路是?
- 确认学校设备和账号规则后,任选其一:让编程智能体给你搭 p5 起步页(约束:vendored 单文件、本地 HTTP 预览可用),或使用 p5 官方在线编辑器;在线编辑器只放匿名公式和示例参数。
- 挑一个你正在学的公式(正弦、平抛、匀加速、圆周运动都行),把它画出来——代码不会写就交任务单,但动画里哪个变量在每帧变化,必须你自己说得出。
- 至少改两个参数各看一次效果,各用一句话记下它管什么。
- 进阶(选做):加一个 mousePressed(),点击换参数;git 拍快照。
怎么算过关:页面能在本地 HTTP 预览中打开、画面会动(或点击会变);你能指着代码说出每帧在变的变量是哪一个;两条参数笔记落在纸面。
卡
p5 的两个骨架函数各管什么?动画的本质是什么?
setup() 开场执行一次(搭画布、定初值);draw() 每秒自动重跑约 60 次。动画=变量每帧变一点、画面每帧重画一遍——「搭台一次、演出每帧」。
- 改参数、立刻看见——反馈快是创意编码的第一口甜,也是理解公式最快的路。
- 搭台一次(setup)、演出每帧(draw):分错了不是闪屏就是雪花。
- 随机+规则=生成艺术的基本配方:规则给秩序,随机给惊喜。