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任务验收全部通过。