AI 协作日志

学生 Web 实验作品平台

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

# 实验四 AI协作记录
> 学号:________
> 姓名:________
> AI工具与使用版本:豆包

## 协作1:变换次序核验(Task B)
### 我的目标与先验预测
列向量约定,M = A·B,B先执行。
- T·R·S:S缩放 → R旋转 → T平移。平移在世界坐标系;局部原点(0,0,0)平移后直接到(2,0,0),旋转不会改变原点位置,预测中心(2,0,0)。
- R·T·S:S缩放 → T平移 → R旋转;先把局部原点移动到(2,0,0),再绕世界Y轴旋转90°;(2,0,0)旋转90°Y得到(0,0,-2)。

### 关键提示词
> 在WebGL2的列向量约定下,局部原点为(0,0,0),平移(2,0,0),绕Y轴旋转90°。请分别分析T·R与R·T的世界中心位置和计算步骤,并建议我要打印哪些数值进行核验;不要直接重写完整程序。

### AI建议摘要
1. 列向量:矩阵链最右侧最先作用顶点;
2. T·R:先旋转局部点,再世界平移;平移不受旋转影响;
3. R·T:先局部平移,得到新局部点,再对该点做世界旋转;
4. 核验手段:用 point(model,0,0,0) 获取局部原点变换后的世界坐标,对比理论值。

### 我的判断与手算
- T·R 作用于p=[0,0,0,1]:p' = T * (R * p) = T*(0,0,0,1) = (2,0,0)
- R·T 作用于p=[0,0,0,1]:p' = R * (T*p) = R*(2,0,0,1) = (0,0,-2)
> 矩阵乘法不交换,T·R ≠ R·T。

### 我实际测试的参数与坐标
tx=2,angle=90°,scale=1。

### 运行现象/数值结果
T·R·S中心输出约`(2.00,0.00,0.00)`;R·T·S输出约`(0.00,0.00,-2.00)`,和手算完全吻合。

### 修正结论
变换顺序会显著改变物体位置;theta=0°时两者结果碰巧一样,**不能证明矩阵可交换**,只是旋转为单位矩阵的特例。

---

## 协作2:程序调试(Task C或D)
### 错误现象与自己的初步分析
> Task‑D 一开始肩部位姿直接写c.T(0,0.55,0),没有乘basePose。修改基座yaw角度,基座转动,但机械臂和探头完全不动。
我的猜想:没有继承父基座的位姿矩阵;子对象需要把父位姿放在chain最左侧。

### 提示词
> 我的三维对象能显示,但修改父关节角度后探头位置异常。请提出三个最有可能的矩阵顺序或局部坐标错误,每个错误给出一项能区分原因的测试,不要直接替我重写整份代码。

### AI提出的可能原因
1. 子对象没有把父位姿矩阵参与chain相乘,子完全独立于父;
2. chain参数顺序写反,子矩阵放在最左边;列向量右边先执行;
3. 将绘制用的非均匀缩放混入关节位姿pose矩阵,破坏子对象后续变换。

### 我逐项完成的测试
1. 测试:打印shoulderPose的世界原点坐标;修改yaw,坐标不变 → 判断:没有继承basePose。
2. 测试:把basePose放入chain最左:`c.chain(basePose, c.T(0,0.55,0), c.R("Z",pitch))`。
3. 测试:区分pose(纯位姿)和draw(带缩放绘制),不在pose中加入S缩放。

### 真实原因与修复
真实原因:肩部位姿没有乘基座basePose,子关节完全脱离父基座坐标系。
修复:shoulderPose使用`chain(basePose, T平移, R旋转)`。修复后:改变yaw全部子部件跟随;改变pitch基座不动,臂与探头摆动。

### AI建议是否采纳及理由
采纳;三个错误假设对定位bug非常有效;pose矩阵只保存位置旋转,**禁止混入绘制缩放**是关键点。

---

## 协作3:主题场景协商(Task E)
### 我希望实现的对象关系
保留题目给的医学设备基座‑机械臂‑探头父子;额外增加样本台:样本自转、标记绕样本公转。至少3部件,一组父子,两种复合变换,两个独立参数。

### 关键提示词
> 我已实现T·R·S、绕指定点旋转和两级父子变换。请提出两个可在40分钟内用简单立方体完成的三维联动场景,并比较部件关系、矩阵链、交互参数、验证难度。请复用现有WebGL2框架,不引入相机拾取、光照或外部库,也不要直接生成整套代码。

### AI提供的两个方案与比较
方案A:行星卫星系统
- 父:太阳;子:地球(绕太阳公转+自转);月球绕地球;
- 参数:公转角速度、自转角速度;
- 优点:天文概念直观;缺点:要做多级嵌套,改动大。

方案B:保留原题医学定位装置+独立样本台(我选择)
- 父子链:基座 →机械臂→探头;
- 独立物体:样本(绕自身点自转),标记绕样本公转;
- 参数:基座yaw、机械臂pitch、动画速度倍率;
- 优点:复用原有HTML控件,改动量小;可以同时演示**父子继承**与**T(P)·R·T(-P)绕点旋转**两种机制。

### 我的选择理由
选方案B。不用大改HTML,既有两级父子层次变换,又有独立对象的绕指定点旋转;满足验收条件:3个以上部件,1组父子,2种复合机制,2个独立参数。

### 实际矩阵链与交互参数
1. 基座位姿 basePose = chain(T(-2,-1.3,0), R(Y,yaw))
2. 肩部 shoulderPose = chain(basePose, T(0,0.55,0), R(Z,pitch))
3. 末端 tipPose = chain(shoulderPose, T(0,2.2,0))
4. 样本自转:chain(T(P), R(Y,spin), T(-P), T(P), S)
5. 标记公转:chain(T(P), R(Y,orbit), T(-P), T(P), T(r,0,0), S)

交互参数:
- yaw:基座偏航;
- pitch:机械臂俯仰;
- speed:动画速度倍率;
- 暂停/继续、重置、PNG截图。

### 两组对照测试
测试1:固定pitch,拖动yaw;基座转动,机械臂探头全部跟随;子不改变父。
测试2:固定yaw,拖动pitch;基座不动,臂与探头摆动;样本自转,标记绕样本转圈;暂停动画全部静止,继续无跳变。

### 最终结果和反思
完成后满足全部E验收条件:父子继承、自转公转、速度控制、暂停重置、截图输出。
关键点:**位姿矩阵只放平移旋转,缩放只放在绘制chain;动画每帧重新从参数构造矩阵,不累积矩阵乘法,避免漂移。**