# Math Dance / Funktionsgympa — eight-count edition

A static classroom movement break, prepared for Wanmin Liu. Complete editable source,
precomputed graph data and original synthesized music are included. No build step,
account, API key, external music, font download or CDN is required.

## 使用

默认瑞典语，右上角可选中文或英语。默认中速、同时显示，脚步与跳跃关闭。

## 音乐与动作速度

| 档位 | 音乐 BPM | 每题固定 8 拍 | 预测模式：前 4 拍 + 后 4 拍 |
| --- | --- | --- | --- |
| 慢速 | 100 | 4.8 秒 | 2.4 + 2.4 秒 |
| 中速 | 120 | 4 秒 | 2 + 2 秒 |
| 快速 | 140 | 约 3.43 秒 | 约 1.71 + 1.71 秒 |

- 音乐实际按所选 BPM 重新合成，不是仅改变画面停留时间，也不把录音加速变调。
- 每题只有一轮 8 个计时点。两种显示方式的题目顺序和总时长规则相同。
- 同时显示：从第 1 拍起显示公式和图像。
- 先公式后图像：第 1–4 拍只显示公式，第 5 拍加入图像，公式始终保留。
  曲线、标记、参考线和动作提示在预测阶段隐藏；第 5 拍计时点和进度条不重置。
- 复杂图形、连续求导及脚步也遵守每题 8 拍，不另行延长。
  快速预测模式适合熟悉图形的快速识别，不作为复杂推理的充分思考时间。
- 已移除后半程自动加速，避免与 BPM 档位叠加。
- 预测模式强制显示公式；回到同时显示时恢复原来的公式显示偏好。

## 总时长、过渡和收尾

开场 8 秒（邀请、准备、3–2–1），然后开始 2／3 分钟的活动计时。
最后 10 秒统一采用 120 BPM：每两拍报一个整数秒数，五张常数图像各显示 2 秒，
顺序为 `y=2, 0, -2, 0, 2`。收尾同时显示，不再等待预测。到零出现 Well done 和结束和弦。

固定时长通常不能恰好容纳整数个八拍。程序只安排完整题目；收尾前剩余不足一轮的时间，
保持上一张图像并提示“准备收尾”，隐藏计时点，以短音衔接，不产生新题目或截断预测。
例如中速两分钟：27 个八拍共 108 秒，保持 2 秒，再进入 10 秒收尾。

图像、进度条和音乐使用同一 AudioContext 时钟。暂停冻结同一时钟；切换标签页会暂停。
空格暂停／继续，F 全屏，Esc 退出全屏。重新开始后可以更改设置。

## 函数与活动内容

- 第一级：常数、一次、二次；第二级加入绝对值、三次、W 型四次；第三级加入 sin、cos、tan、指数、对数。
- 可以单独勾选函数类型。按类型轮换并随机排列，普通常数片段在混合选择时只出现一次，另有固定收尾。
- 保留不同直线斜率；绝对值伸缩、内外负号；二次顶点式、因式分解式、零点合并、同图异式；
  绝对值翻折；正弦振幅／频率变化；指数和对数关于 y=x 的镜像。
- 数学变化片段按完整序列插入，遵守函数开关；脚步和求导片段也不截断。时间不足时略过该片段。
- 求导链：`f=x⁴/24−x²/2 → f′=x³/6−x → f″=x²/2−1 → f‴=x → f⁽⁴⁾=1 → f⁽⁵⁾=0`。
- 坐标轴等比例，范围 −6 到 6，正向有箭头。三角函数用弧度，对数只画定义域内部分，tan 分支不跨渐近线相连。
- 公式以原生 MathML 排版，保留 LaTeX 源。绝对值使用独立分组及对称竖线，已包含此前排版修复。

## 脚步

默认是手臂动作，可坐着参与。开启脚步后，增加“原位 → 向左／右小迈一步 → 回原位”
以及轻屈膝后站直的片段。坐标单位不是实际距离。只选常数函数时使用屈膝／站直，不用不可辨认的水平平移。
每个脚步片段为三题，共三个八拍。跳跃另设开关，默认关闭。

## 音乐、语音与权利说明

音乐由 `music.js` 合成，无歌曲录音、鼓采样、音色库或外部音频依赖。
可选英语语音使用设备本地声音，优先常见女声名称。可用声音取决于系统；无本地英语声音时仅显示文字。
屏幕、拍点与音乐同钟；浏览器语音不保证采样级同步，声音可能稍晚。
源码与随附材料在权利适用范围内按 MIT 提供，语音引擎权利属于其提供者。
完整说明见 `LICENSE` 和 `ASSET-LICENSES.md`。

## 源文件

- `timing.js`：100／120／140 BPM、八拍长度、活动与收尾边界；音乐和画面共用。
- `sequence.js`：随机题目、完整片段、第 5 拍揭示时间及收尾安排。
- `music.js`：对应 BPM 的程序合成伴奏；无录音变速。
- `app.js`：界面、播放控制、连续计时点、预测揭示与本地语音。
- `index.html`, `style.css`：页面及浅灰／深色两种主题。
- `graphs.js`, `scenes.js`：1,087 个预计算图像及 13 类数学变化片段。
- `scripts/generate_graphs.py`, `scripts/scenes.py`：离线重新生成图像和公式，只用 Python 标准库。
- `tests/`：数学、音乐、播放状态及八拍计时检查。

访客无需 Python 或 Node.js。开发者可运行：

```sh
python3 -B scripts/generate_graphs.py
node tests/verify.cjs
node tests/scenes.cjs
node tests/footwork.cjs
node tests/timing.cjs
node tests/session.cjs
python3 -m http.server 8000
```

## GitHub Pages

这是课间活动工具，不宣称已经验证能提高数学成绩。等待时间和 BPM 是可试用的设计参数。
