AI 协作日志

学生 Web 实验作品平台

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

# 实验三 AI协作记录(请学生在实际完成实验后填写)

> 教师参考代码包不包含虚构的AI协作过程。学生提交时需填写真实工具、提示词、独立测试与结论。

## AI协作1:矩阵和变换次序

* 我自己的预测:对于初始中心为C=(0.50,0.25,0)的正方形,绕Z轴正向旋转90°时,R·T(C)使中心变为(-0.25,0.50,0);T(C)·R使对象中心保持在(0.50,0.25,0),仅改变对象姿态。



* AI工具与原始提示词:

工具:Codex 对话助手。

原始提示词:

我已根据实验框架补充缩放、旋转和Model矩阵组合,想请你检查我的理解及实现。对于初始中心C=(0.50,0.25,0)的正方形,我现在的预测是:绕Z轴旋转90°时,R·T(C)使中心变为(-0.25,0.50,0),T(C)·R使中心保持不变。请核对这个计算,并检查下面代码的矩阵次序、旋转正负方向和角度单位。请指出具体问题及必要修改,保留我现有的结构,并给出可由我独立运行的验证步骤。

同时提供了当前的transforms.js和app.js。



* AI的建议:AI核对源码及项目中的矩阵库后,确认当前矩阵组合与预测一致。列向量约定下,右侧矩阵先作用,世界原点旋转使用R·T,自身中心旋转使用T·R。界面角度先由度转为弧度,动画角度由角速度乘时间后再转为弧度,当前处理正确。
* 本人计算、运行与证据:自身中心旋转时,局部中心为原点,旋转后仍为原点,再平移到C,因此中心不变。



* 采纳或修正结论:保留当前矩阵构造与组合方式,无需修改核心算法。核验时采用误差容限判断浮点结果,并用45°观察正方形自身旋转,用90°核对中心位置变化。

## AI协作2:实际故障排查

* 错误现象与重现步骤:在补充Task D的鼠标添加功能后,打开任务页面出现“启动失败:CG3App is not defined”,程序无法正常启动。
* 我先检查了什么:我先确认页面显示的错误信息,并将错误反馈给AI,随后提供当前app.js源码进行检查。当时没有先记录控制台中的第一条错误,后续排查应优先补充这一步。



* AI工具与原始提示词:
* 工具:Codex 对话助手。
* 原始提示词:
* 启动失败:CG3App is not defined
* 随后提交了修改后的app.js源码。



* AI建议的候选原因与测试:
* AI最初建议检查:app.js是否成功加载。
* 类方法的位置与括号是否正确。
* 脚本引用顺序是否正确。
* 控制台中是否存在更早的语法错误。
* 检查源码后,AI定位到addFromMouse()中重复声明了aspect、cx和cy。原因是加入新的坐标转换代码时,旧的占位声明没有删除。



* 实测结果、修复与复测:同一作用域重复使用const声明变量,会使整个app.js解析失败,因此末尾的root.CG3App = App无法执行,入口脚本随后报告CG3App未定义。
* 修复时完整替换addFromMouse(),删除重复声明,保留鼠标位置比例、画布宽高比和Y轴翻转的转换过程。修改后页面恢复启动

## AI协作3:设计方案比较

* 我考虑的两种实现:针对PNG截图功能,比较两种方式:
* 设置preserveDrawingBuffer: true,保留绘制缓冲,并在截图前主动重绘。
* 使用默认缓冲策略,在截图事件中同步重绘后立即调用导出接口。



* AI工具与原始提示词:工具:Codex 对话助手。
* 原始提示词:
* 我已在现有框架中补充清空画布、修改尺寸和背景、PNG下载功能,下面是当前实现。请重点审查截图方案:比较保留绘制缓冲,以及使用默认缓冲并在截图事件中重绘后立即导出这两种方式,从实现成本、截图正确性和维护难度说明取舍。请检查我的代码是否正确处理截图前重绘、空Blob、临时下载链接和URL释放,只提出必要修改。最后给出测试清单,让我验证800×600和960×540两种尺寸下的图片内容、背景及像素尺寸。
* 同时提供了当前app.js,AI还检查了项目中的graphics.js。



* 对比、取舍与原因:保留绘制缓冲的方案对截图时机要求较宽松,便于实现和维护,但可能增加缓冲维护开销。默认缓冲方案通常更有利于浏览器优化,但需要保持“同步重绘后立即导出”的顺序,避免在两步之间加入等待。
* 当前实验框架已启用缓冲保留,因此继续采用第一种方案,并在截图前主动重绘,减少改动并便于验证。



* 实际实现及核验:当前代码先调用this.draw(),再使用canvas.toBlob()导出PNG;回调中检查Blob是否为空,创建临时下载链接,触发下载后移除链接,并延迟释放临时URL。