AI 协作日志
学生 Web 实验作品平台
学号:202412211401018 · 来源:ai-log.md
# 实验四 AI协作记录
> 学号:202412211401018
> 姓名:陈洁
> AI工具与使用版本(如适用):豆包
> 请用真实过程填充,保留关键提示词原文;不要只贴整段AI代码或聊天截图。
## 协作1:变换次序核验(Task B)
### 我的目标与先验预测
验证列向量模式下矩阵乘法非交换性。参数:tx=2,angle=90°,scale=1。
### 关键提示词
局部原点为(0,0,0),平移(2,0,0),绕Y轴旋转90°。请分别分析T·R与R·T的世界中心位置和计算步骤,并建议我要打印哪些数值进行核验
### AI建议摘要
使用列向量,'chain(A,B,C)'' 等价矩阵 A×B×C,右侧矩阵优先执行。
1. T·R:先对局部顶点做旋转,之后执行世界平移,平移向量不会被旋转改变。
2. R·T:先执行平移,得到的位置再参与旋转,平移向量会被旋转矩阵变换。
建议使用 c.point(model,0,0,0) 获取局部原点变换后的世界坐标作为核验依据。
### 我的判断与手算
绕Y轴90°旋转会把X方向映射到‑Z方向。
T·R:局部原点(0,0,0)旋转后仍然(0,0,0),再平移X=2,结果(2,0,0)。
R·T:先平移得到(2,0,0),再执行Y轴90°旋转,得到(0,0,-2)。
### 我实际测试的参数与坐标
tx=2,angle=90,scale=1
### 运行现象/数值结果
状态栏输出:
T·R·S中心:(2.00, 0.00, 0.00)
R·T·S中心:(0.00, 0.00, -2.00)
手算结果和程序运行输出完全一致。
### 修正结论
矩阵乘法不具备交换律。变换顺序决定平移向量是否会被旋转影响。
当旋转角度为0°,两种顺序结果碰巧一样,但不能证明矩阵乘法可交换。
## 协作2:程序调试(Task C或D)
### 错误现象与自己的初步分析
Task‑D拖动基座yaw滑块,基座方块可以旋转,但是机械臂、探头不会跟随基座一起转动。
我猜测是观察矩阵出错,或者着色器uniform变量上传失败。
### 提示词
我的三维对象能显示,但修改父关节角度后探头位置异常。
请提出三个最有可能的矩阵顺序或局部坐标错误,每个错误给出一项能区分原因的测试。
### AI提出的可能原因
1. 子位姿 shoulderPose 的 chain 没有把父 basePose 放在最左侧,子对象没有继承父的旋转。
2. 将非均匀缩放混入关节位姿矩阵,造成子对象几何异常。
3. 旋转轴选错,混淆X/Y/Z坐标轴。
### 我逐项完成的测试
测试1:打印 shoulderPose 的 c.point() 世界坐标;拖动yaw,肩部坐标完全不变,怀疑父矩阵没有传入。
测试2:移除全部缩放S,错误现象不变,排除缩放问题。
测试3:调节pitch俯仰,机械臂可以正常摆动,证明Z旋转轴选择正确。
### 真实原因与修复
basePose 只写了平移,缺少绕Y轴旋转 Ry(yaw),子对象接收不到基座旋转。
修复代码:
`const basePose = c.chain(c.T(0,-1.3,0), c.R("Y", yaw));`
修复后拖动yaw,肩部、机械臂、探头全部跟随基座旋转。
### AI建议是否采纳及理由
采纳第一条建议,成功定位bug;2、3不是本次问题,但作为排错经验。
父关节位姿必须放在chain最左边,变换才可以向下传递给子对象。
## 协作3:主题场景协商(Task E)
### 我希望实现的对象关系
至少3个部件,一组父子继承关系;包含自转、公转两种复合变换;2个独立可调参数;
动画支持暂停、调速、截图,复用现有WebGL框架,不引入外部库。
### 关键提示词
我已实现T·R·S、绕指定点旋转和两级父子变换。
请提出两个简单立方体完成的三维联动场景,并比较部件关系、矩阵链、交互参数、验证难度。
### AI提供的两个方案与比较
方案A:医学定位机械臂+旋转样本台
- 部件:基座‑肩部‑探头;旋转样本;环绕标记
- 父子:基座→肩部→探头;样本自转,标记绕样本公转
- 参数:yaw基座偏航、pitch机械臂俯仰、speed动画倍速
- 优点:可复用TaskD机械臂代码,状态栏输出坐标便于核验,调试简单。
方案B:行星卫星系统
- 部件:太阳、地球、月球
- 父子:地球‑月球;地球绕太阳公转+自转,月球绕地球公转
- 参数:公转角速度、自转角速度
- 优点:物理直观;缺点:需要全部重新设计尺寸,验证步骤较多。
### 我的选择理由
选择方案A医学定位设备。复用TaskD父子变换逻辑,同时练习自转公转矩阵;状态栏输出坐标方便验证,开发工作量可控。
### 实际矩阵链与交互参数
矩阵链:
1. basePose = T(-2,-1.3,0) · Ry(yaw)
2. shoulderPose = basePose · T(0,0.55,0) · Rz(pitch)
3. tipPose = shoulderPose · T(0,2.2,0)
4. 样本自转:T(P)·Ry(spinAngle)·S
5. 标记公转:T(P)·Ry(orbitAngle)·T(offset)·S
交互参数:
- yaw:基座整体偏航
- pitch:机械臂俯仰
- speed:动画速度倍率;支持暂停、重置、截图。
### 两组对照测试
测试1:yaw=30°, pitch=-30°;机械臂整体旋转摆动,探头严格跟随父子约束运动。
测试2:speed=2动画加速;speed=0动画停止;暂停后继续,画面不会发生跳变。
### 最终结果和反思
父子变换中父矩阵要写在chain最左侧;公转矩阵顺序 'T(P)‑R‑T(offset)' 顺序不能颠倒。
非均匀缩放只能放在绘制矩阵,不能放入关节位姿,否则子部件会被拉伸变形。