AI 协作日志
学生 Web 实验作品平台
学号:202412211402019 · 来源:ai-log.md
# 实验三 AI协作记录 > 以下记录为本人在完成实验过程中的真实协作过程:先有自己的预测与实现,再借助AI讨论/诊断,最后亲自运行核验。所有结论均以运行结果为准。 AI工具:豆包(Doubao)桌面端对话(含代码审阅、数值核验与故障诊断) ## AI协作1:矩阵和变换次序(Task B) - 我自己的预测: 目标是让同一个正方形(初始中心 C=(0.50, 0.25))能表现出"绕世界原点旋转"和"绕自身中心旋转"两种不同效果。我的预测:列向量约定下矩阵右侧先作用于顶点,所以绕世界原点旋转应写成 R·T(C)(先平移到 C,再绕原点转);绕自身中心旋转应写成 T(C)·R(先绕自身原点转,再平移到 C)。 - AI工具与原始提示词: "Task B 的 B-05,world 和 self 两种旋转中心,矩阵乘法次序分别怎么写?" - AI的建议: 确认了"右侧先执行"的约定,并给出两条: - world(公转):M = R(θ)·T(C),图形整体绕世界原点旋转; - self(自转):M = T(C)·R(θ),图形在原地旋转,中心不变。 并提醒:正方形在 task-b 页面旋转轴固定为 Z,角度输入是度、进入三角函数前要转弧度。 - 本人计算、运行与证据: 在 task-b.html 里把中心设为 (0.50, 0.25)、角度 45°,先选"世界原点·R×T"观察,再切"对象中心·T×R"观察;同时看右侧"矩阵数值检验"5 项测试。结果:world 模式下正方形整体绕画布中心公转;self 模式下正方形以 (0.50,0.25) 为圆心原地转动,轨迹明显不同。数值检验 5 项全部 ✓:平移 (1.3,-0.2,0,1)、均匀缩放 (2,0,0,1)、Z轴+90° (0,1,0,1)、Y轴+90° (0,0,-1,1)、平移作用于 w=0 向量不变 (1,0,0,0)。 - 采纳或修正结论: 采纳 AI 建议,并与我的预测一致。通过运行确认:T·R 与 R·T 不交换,写反会出现"公转变自转"的典型错误;w=0 的方向向量乘平移矩阵不受影响。 ## AI协作2:实际故障排查(Task C 联调) - 错误现象与重现步骤: 完成 js/transforms.js 的 B-01/B-02/C-01~C-04 后,打开 task-b.html 和 task-c.html 全部空白,浏览器控制台报 SyntaxError,页面 JS 整体没有执行。 - 我先检查了什么: 先核对脚本引用顺序(common → geometry → graphics → transforms → app),路径都在;再逐个函数检查括号配对,怀疑是某个函数没闭合。 - AI工具与原始提示词: "哪里有问题"(附上我改过的 transforms.js 全文) - AI建议的候选原因与测试: AI 指出:R() 函数在 `return M.fromZRotation(out,rad);` 之后缺少收尾的右花括号 `}`,导致后面的 deg2rad、triangle01 等全部被吞进 R 的函数体,整个文件语法错误;同时说明 S()、modelFor() 三个分支本身实现正确。 - 实测结果、修复与复测: 在 R() 末尾补上 `}` 后重新打开页面:task-b.html 矩阵数值检验 5 项全过;task-c.html 四个形状各自开始动画(圆 1↔2 倍缩放、三角形 X 向往复、正方形绕原点公转、四面体绕自身 Y 轴自转),Console 无报错。确认真正原因就是替换占位代码时把 `return out;` 和 `}` 一起删掉了,修改位置为 js/transforms.js 的 R()。 ## AI协作3:设计方案比较(Task E) - 我考虑的两种实现: 方案A:每帧在 CPU 上把变换后的顶点坐标算好,重新上传/覆盖 GPU 顶点 Buffer 再绘制; 方案B:几何顶点只上传一次(STATIC_DRAW),每帧只计算 4×4 Model 矩阵并用 uniformMatrix4fv 交给 Shader。 - AI工具与原始提示词: "动画每帧更新 Model 矩阵而不是重建顶点 Buffer,这两种方案在时间成本、正确性、可维护性上怎么比较?" - 对比、取舍与原因: - 时间成本:方案A每帧遍历全部顶点并上传,对象多时开销线性增长;方案B每帧只更新 16 个数,几乎可忽略。 - 正确性:方案A容易在逐帧累加中产生浮点漂移;方案B位置由"初始中心 + 时间参数"现算,无累积误差。 - 可维护性:方案A的变换逻辑散落在上传代码里;方案B矩阵构造集中在 modelFor(),加一种运动规律只需加一个分支。 - 实际实现及核验: 采用方案B:geometry.js 提供局部顶点,graphics.js 构造时一次性建 VAO/Buffer;动画循环只推进各对象 elapsed 并更新 Model 矩阵,draw() 逐对象 uniformMatrix4fv。截图前先主动 draw() 重绘,再 canvas.toBlob 保存(Graphics 已配置 preserveDrawingBuffer:true)。运行数个周期后:圆始终在 1↔2 倍、三角形不漂移、正方形公转、四面体自转;暂停 2 秒恢复无突跳;PNG 尺寸与 Canvas 一致且含背景色,证明方案B在三个维度上均更优。 ## 其他使用AI的记录(如有) - Challenge C2 页面"没东西":页面布局正常但画布空白、数值面板全空,控制台无报错。我先核对 challenge.html 中 JS 引用的所有元素 ID 都存在,后由 AI 指出 js/challenge.js 只导出了 CG3Challenge 类、缺少 DOMContentLoaded 实例化入口。补上 `new CG3Challenge()` 入口后页面正常显示两个正方形与数值;并用 θ=0° 时两顺序完全重合(距离差 0.000)、θ=45° 时中心分别停在 (0.30,0.20) 与 (0.07,0.35) 完成数值核验。 - 矩阵数值核验:Task B 的 5 项数值测试与挑战页测试点 P 的变换结果均与手算一致后采纳,未盲目照搬。