AI 协作日志

学生 Web 实验作品平台

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

# 实验四 AI协作记录

> 学号:  202412210603025
> 姓名:  吴瑜婕
> AI工具与使用版本(如适用):  豆包
> 请用真实过程填充,保留关键提示词原文;不要只贴整段AI代码或聊天截图。

## 协作1:变换次序核验(Task B)

### 我的目标与先验预测
目标:验证列向量模式下矩阵乘法不满足交换律,对比 T・Ry 与 Ry・T 作用后模型局部原点的世界坐标。
预测:测试参数 tx=2、angle=90°、scale=1;T・Ry・S 得到中心 (2,0,0);Ry・T・S 得到中心 (0,0,-2);角度为 0° 时两者画面重合,但这不代表矩阵可交换,只是旋转矩阵为单位矩阵的特殊情况。
### 关键提示词
在 WebGL2 的列向量约定下,局部原点为 (0,0,0),平移 (2,0,0),绕 Y 轴旋转 90°。请分别分析 T・R 与 R・T 的世界中心位置和计算步骤,并建议我要打印哪些数值进行核验;不要直接重写完整程序
### AI建议摘要
1. 列向量规则 M・v,矩阵链最右侧矩阵最先作用于顶点。
2. T・R:先执行旋转,再执行全局平移,平移直接决定物体最终位置。
3. R・T:先平移把点移动到 (2,0,0),再绕世界原点做 Y 轴旋转 90°,点变换到 (0,0,-2)。
4. 核验应当调用 point (model,0,0,0) 获取世界坐标,不能仅依靠肉眼画面。
5. angle=0 只是特例,R 为单位阵,不能证明矩阵乘法可交换。
### 我的判断与手算
手算 Ry (90°) 对 (2,0,0) 变换得到 (0,0,-2);判断 AI 数学推导正确,必须以 point 输出坐标作为判断依据。
### 我实际测试的参数与坐标
测试参数:tx=2,angle=90°,scale=1
### 运行现象/数值结果
点击一键 90° 测试;状态栏输出 T・R・S 中心:(2.00, 0.00, 0.00) | R・T・S 中心:(0.00, 0.00, -2.00)。暖色方块停留在 X=2,青色方块变换到 Z 负方向;angle 置 0 时两个方块完全重合。
### 修正结论
平移 T 与旋转 R 矩阵不可交换;T・R 与 R・T 会产生完全不同的空间位置。角度 0° 结果一致只是特殊情况,不能证明矩阵可交换;验证变换需要看坐标数值,不能只靠肉眼观察画面。
## 协作2:程序调试(Task C或D)

### 错误现象与自己的初步分析
错误现象:拖动基座 yaw,基座正常旋转,机械臂、探头不跟随转动,父子跟随失效,模型可以正常渲染无控制台报错。
初步猜想:1. 动画 dt 时间处理出错;2. 肩部位姿没有继承 basePose,父子层级断裂。
### 提示词
我的三维对象能显示,但修改父关节角度后探头位置异常。请提出三个最有可能的矩阵顺序或局部坐标错误,每个错误给出一项能区分原因的测试,不要直接替我重写整份代码。
### AI提出的可能原因
1. 子位姿没有左乘父位姿矩阵,父子继承断裂;测试:修改父 yaw,观察子部件是否跟随旋转。
2. 非均匀缩放存入 Pose 位姿矩阵,子对象继承畸形缩放;测试:观察模型外形是否拉伸扭曲。
3. chain 矩阵相乘顺序颠倒;测试 pitch=90°,观察机械臂摆动角度。
### 我逐项完成的测试
1. 测试 1:拖动 yaw,基座旋转,臂与探头不动,匹配原因 1 现象。
2. 测试 2:模型外形没有拉伸变形,排除缩放混入 Pose 的问题。
3. 测试 3:修改 pitch 机械臂可以正常摆动,排除 chain 内部顺序错误。
复现 bug 方式:故意去掉 basePose,shoulderPose 只拼接 jointUp 和 shoulderRot 制造故障。
### 真实原因与修复
真实原因:肩部位姿 shoulderPose 没有传入父 basePose 矩阵,父子继承断开,基座姿态无法传递给肩部。
修复:shoulderPose = c.chain (basePose, jointUp, shoulderRot);修复后转动 yaw,机械臂和探头跟随基座整体旋转。
### AI建议是否采纳及理由
采纳 AI 三条排查思路。理由:通过控制变量测试快速区分继承、缩放、矩阵顺序三类问题,不用逐行盲找代码错误。
## 协作3:主题场景协商(Task E)

### 我希望实现的对象关系
使用立方体,不引入外部库与光照;需要真实父子层次变换、自转、绕点公转;支持暂停、速度调节、截图;40 分钟内可完成。
### 关键提示词
我已实现 T・R・S、绕指定点旋转和两级父子变换。请提出两个可在 40 分钟内用简单立方体完成的三维联动场景,并比较部件关系、矩阵链、交互参数、验证难度。请复用现有 WebGL2 框架,不引入相机拾取、光照或外部库,也不要直接生成整套代码。
### AI提供的两个方案与比较
方案 A:机械臂 + 旋转样本台(选用)
部件:基座、机械臂、探头;样本底座、自转样本、公转标记
部件关系:基座→肩部→探头两级父子;样本自转;标记绕样本中心点公转
矩阵链:
1. 基座位姿:basePose=T (basePos)・Ry (yaw)
2. 肩部位姿:shoulderPose=basePose・T (0,h,0)・Rz (pitch)
3. 末端位姿:tipPose=shoulderPose・T (0,L,0)
4. 样本自转:specimenDraw=T (Psample)・Ry (spinAngle)・S
5. 标记公转:orbitMarker=T (Psample)・Ry (orbitAngle)・T (r,0,0)・S
交互参数:yaw 基座偏航、pitch 肩部俯仰、speed 动画倍率
验证:关节坐标、父子联动、自转公转轨道、暂停无突跳
难度:中等,复用 TaskC、D 代码,满足全部实验硬性要求
方案 B:行星‑卫星系统
部件:恒星、自转行星、绕行星公转卫星
部件关系:行星自转,卫星公转;无父子关节层级
矩阵链:行星自转 T・Ry・S;卫星公转 T (Pplanet)・Ry・T (-Pplanet)・T (r)・S
参数:行星自转速度、卫星公转速度
难度:简单;缺点:缺少实验要求的父子变换,需要额外扩充部件。
### 我的选择理由
选择方案 A 机械臂 + 旋转样本台。理由:同时覆盖父子关节、自转、绕点公转三类本实验变换知识点;复用前面任务代码,工作量可控;拥有两个独立手动调节参数,具备暂停重置截图;可以打印关节世界坐标做数值核验,不只是肉眼看画面。
### 实际矩阵链与交互参数
实际矩阵链参考 task‑e.js 代码。
交互参数:yaw 基座偏航角度;pitch 肩部俯仰角度;speed 全局动画时间倍率;功能按钮:暂停 / 继续、重置、PNG 截图。
### 两组对照测试
测试组 1【父子继承验证】
参数:yaw=30°,pitch=0°,speed=1
现象:基座旋转 30°,机械臂、探头跟随基座整体旋转,装配关系保持不变。

测试组 2【自转公转与动画暂停】
参数:yaw=0°,pitch=-20°,speed=1,点击暂停
现象:样本自转,标记以不同角速度绕样本公转;点击暂停全部动画冻结;继续播放从当前姿态继续,画面无角度突跳。
### 最终结果和反思
场景满足 TaskE 全部条件:3 个以上三维部件,真实父子继承,两种及以上复合变换,两个独立调节参数,暂停、重置、调速、截图全部正常。
反思:区分关节位姿 Pose 矩阵与绘制 Draw 矩阵,非均匀缩放只放在绘制矩阵末尾,不向下传递;自转公转矩阵顺序不能写混;动画使用 elapsed 时间驱动,不要不断累乘矩阵,防止姿态漂移。