AI 协作日志

学生 Web 实验作品平台

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

# 实验三 AI协作与核验记录

AI工具:OpenAI Codex(GPT)。AI用于解释矩阵次序、给出排错步骤和比较实现方案;最终结论均以本地浏览器运行与数值测试为准。

## 协作1:矩阵与变换次序

- 我的目标和预先预测:对象初始中心为 `C=(0.5,0.25)`,绕世界原点旋转90°时,`R·T` 应先把局部原点移到C,再旋转到 `(-0.25,0.5)`;`T·R` 对局部原点先旋转仍是原点,再平移,所以中心保持 `(0.5,0.25)`。
- 关键提示词(原文): “列向量约定下,非原点正方形使用 Rz(90°)·T(C) 与 T(C)·Rz(90°) 时,局部原点最终分别在哪里?请解释右侧先执行,并给数值核验办法。”
- AI建议摘要:用齐次点 `(0,0,0,1)` 分别乘两组Model矩阵,不只凭画面判断;同时用 `w=0` 的方向向量验证平移项不起作用。
- 我的计算或测试方法:Task B将角度设为90°,分别切换世界原点和对象中心,并调用同一矩阵函数变换局部原点;页面还自动执行题目规定的5项数值测试。
- 实际结果与证据:`R·T` 得到 `(-0.25,0.5,0,1)`,`T·R` 得到 `(0.5,0.25,0,1)`;5项测试全部显示“✓”,其中Y轴90°将 `(1,0,0,1)` 变为约 `(0,0,-1,1)`,方向向量平移后仍为 `(1,0,0,0)`。截图见 `evidence/task-b-matrix-tests.png`。
- 采纳、拒绝或修正的结论:采纳以矩阵数值和可见轨迹双重验证的建议,最终世界公转使用 `R·T`,自身旋转使用 `T·R`。

## 协作2:故障诊断与修复

- 错误现象、触发步骤:为复现常见鼠标错误,我在浏览器控制台临时用错误公式 `yWorld=2v-1` 计算画布上方四分之一处,得到 `-0.5`,方向与世界Y轴向上相反;该错误公式没有保留到提交代码。
- 我先检查了什么:先核对 `clientX/clientY` 是否减去Canvas矩形左上角,再确认CSS显示尺寸、Canvas内部宽高比和Y轴方向。
- 关键提示词(原文): “Canvas经过CSS缩放并改变为960×540后,点击位置Y方向相反或有偏移,应按什么顺序检查?请列候选原因和最小测试,不要重写程序。”
- AI列出的候选原因:漏用 `getBoundingClientRect()`;直接使用内部像素尺寸;忘记Y轴翻转;修改Canvas尺寸后未更新投影;事件坐标落到边框外。
- 我逐项测试的结果:正确公式 `yWorld=1-2v` 在四分之一高度得到 `+0.5`。800×600画布中心实测约 `(0,0)`,位置 `(u,v)=(0.25,0.25)` 得到约 `(-0.667,+0.5)`;改为960×540后再次点击中心仍约为 `(0,0)`。
- 真正原因、修改位置和复测结论:故障由错误的Y公式复现,最终在 `js/app.js` 的 `addFromMouse()` 使用相对比例、宽高比和Y翻转。Task D同时创建7个对象后均保留,参数快照未被后续菜单修改覆盖。

## 协作3:方案比较与实现核验

- 待解决的具体设计问题:如何组织多对象动画和PNG截图,使几何Buffer不被每帧重建,同时保证截图包含当前WebGL帧。
- 关键提示词(原文): “比较两种实现:A每帧在CPU修改全部顶点并重传Buffer;B局部几何只上传一次、每对象保存状态并逐帧更新Model uniform。截图再比较toDataURL与toBlob。请从正确性、时间成本和维护性分析。”
- 两种方案及取舍依据:方案A直观但对象增多后反复生成和上传顶点,容易产生漂移且不利于解释矩阵;方案B只更新elapsed和Model矩阵,符合课程重点。`toDataURL`同步生成大字符串,`toBlob`异步且直接得到PNG Blob,更适合下载。
- 我最终采用的实现:每种形状初始化一个VAO和固定Buffer;对象保存 `center/mode/direction/amplitude/axis/pivot/scaleMax/speed/elapsed`;唯一rAF循环更新elapsed并写Model uniform。截图前主动重绘,再使用 `toBlob` 与临时下载链接。
- 测试与反思:最终场景包含6个对象和全部4种形状,改为960×540、背景 `#f6f1e8` 后对象仍保留且圆未拉伸。`toBlob` 返回非空 `image/png`,实测12960字节、尺寸960×540;清屏后对象为0,再次点击可正常添加对象。相比方案A,方案B更容易验证变换中心和参数独立性。

## 其他使用AI的记录

- AI协助列出18个必做点的验收顺序。实际逐页检查了WebGL2/Shader、四类模型、矩阵测试、暂停无跳变、2倍速度、鼠标映射、参数快照、画布改尺寸、清屏和PNG Blob;五个页面控制台均无阻断错误。
- Challenge C2继续沿用“先预测、再计算”的方法:默认 `T·R·S` 的局部原点应为 `(0.55,0.20)`;切换 `R·T·S` 后,平移向量会再绕Z轴旋转60°,预期约为 `(0.102,0.576)`。页面同步显示矩阵与两组点坐标,用浏览器实测核对,不以视觉位置单独作为结论。