AI 协作日志

学生 Web 实验作品平台

学号:202412211402034 · 来源:ai-log.md

# 实验三 AI协作与核验记录
AI工具:豆包AI
## AI协作1:矩阵和变换次序
- 我自己的预测:
  在列向量体系下,矩阵右侧先执行。R·T(C)为先平移再旋转,物体绕世界原点公转;T(C)·R·T(-C)为先移原点旋转再移回,物体原地自转。平移矩阵不会改变w=0的方向向量。
- AI工具与原始提示词:
> WebGL gl‑matrix mat4列向量,解释R*T(c) 和 T(c)*R*T(-c)矩阵乘法顺序,分别对应公转、自转;同时测试平移矩阵对w=1点和w=0方向向量的不同效果,结合实验三task‑b。
- AI的建议:
1. mat4.multiply(out,a,b)计算out = a × b,b矩阵先作用顶点。
2. multiply(R, Tc)得到R·Tc,实现绕世界原点公转。
3. multiply(Tc, multiply(R, TminusC))得到Tc·R·T‑c,实现对象自身中心自转。
4. w=1是空间点,受全部变换;w=0方向向量不受平移影响。
- 本人计算、运行与证据:
  task‑b页面切换pivot为world与self,world模式正方形绕画布原点转圈;self模式正方形中心固定原地旋转。页面矩阵单元测试vector项输出(1,0,0,0)验证平移不改变方向向量。手写矩阵代入点做验算,两种变换输出坐标明显不同。
- 采纳或修正结论:
采纳矩阵运算规则;注意multiply(a,b)参数顺序,不能颠倒。代码按照理论完成B‑05,页面矩阵测试全部通过。

## AI协作2:实际故障排查
- 错误现象与重现步骤:
Bug现象:动画暂停数秒后点击继续,图形瞬间大幅度跳变。复现:打开task‑c,点击暂停等待数秒,点击继续,对象直接跳到后面动画状态。
- 我先检查了什么:
检查requestAnimationFrame是否重复开启;观察lastMs时间戳;怀疑后台页面dt过大。最初仅设置running=false,没有将dt置0,lastMs持续记录真实时间,恢复第一帧dt数值巨大。
- AI工具与原始提示词:
> webgl requestAnimationFrame动画,暂停后恢复画面会时间跳变,rAF即使页面后台依然拿到真实ms时间戳,如何解决暂停跳帧问题?实验三js app tick函数dt计算。
- AI建议的候选原因与测试:
1. 暂停状态dt没有置零,lastMs保留旧时间戳,恢复瞬间dt过大。✅真实原因
2. dt没有设置上限,切后台dt爆炸。(补充防护)
3. rAF多次并发开启;本项目只启动一次frameHandle,排除。
4. elapsed需要取模;elapsed存储总流逝时间,不需要取模,排除。
- 实测结果、修复与复测:
增加代码逻辑,当!this.running时令dt=0,同时限制dt最大0.1秒。修复后:暂停等待5秒恢复,图形从暂停姿态继续运动;切换浏览器后台切回,不会发生跳变。

## AI协作3:设计方案比较
- 我考虑的两种实现:
需求:Task‑D点击画布创建对象,修改UI控件不能改变已经创建完成的旧对象。
方案A:每帧渲染读取DOM控件value,所有对象共用UI面板当前参数。
方案B:鼠标点击新建对象那一刻读取UI全部参数,保存参数快照到对象内部对象属性;渲染只读取对象自身保存参数,UI改动仅对下一次新建对象生效。
- AI工具与原始提示词:
> WebGL多对象动画,点击画布创建物体;是每帧读取UI控件,还是创建对象时刻做参数快照,两种方案对比,优缺点,适合实验三D‑01需求。
- 对比、取舍与原因:
方案A代码简短,但是旧对象跟随UI实时变化,不符合实验验收要求。
方案B需要一次性读取全部UI参数保存,代码行数略多;对象状态与DOM解耦,每个对象拥有独立参数,完全符合题目“创建后修改菜单不影响已有对象”要求。因此舍弃方案A,选用方案B。
- 实际实现及核验:
实现selectOptions()函数,鼠标点击addFromMouse()调用,把方向、幅度、scaleMax、axis、pivot、speed保存到新对象。
测试:先X方向生成三角形;UI改成自定义60°,不点击画布,旧三角形仍然沿X运动;再次点击画布,新三角形沿60°斜向运动。新旧对象行为互不干扰,D任务验收全部通过。