AI 协作日志
学生 Web 实验作品平台
学号:202412211401028 · 来源:ai-log.md
# 实验四 AI协作记录 > 学号:202412211401028 > 姓名:喻科棒 > AI工具与使用版本:Trae(内置大模型 DeepSeek-V4-Pro) ## 协作1:变换次序核验(Task B) ### 我的目标与先验预测 比较两种模型矩阵 M1 = T·Ry·S 与 M2 = Ry·T·S,固定 tx=2、θ=90°、s=1,观察局部原点经矩阵后的世界中心。 先验预测(列向量约定下右矩阵先作用于顶点): - M1:原点先被 S(1)、Ry(90°) 保持不动,最后被 T(2,0,0) 平移 → (2,0,0)。 - M2:原点先 S、再被 T(2,0,0) 平移到 (2,0,0),最后被 Ry(90°) 旋转 → (0,0,-2)。 ### 关键提示词 > 在WebGL2的列向量约定下,局部原点为(0,0,0),平移(2,0,0),绕Y轴旋转90°。请分别分析T·R与R·T的世界中心位置和计算步骤,并建议我要打印哪些数值进行核验;不要直接重写完整程序。 ### AI建议摘要 AI 说明列向量下 M·p 中 p 先与最右矩阵相乘,即“先缩放、再平移/旋转”的顺序取决于矩阵书写位置;并建议用 `c.point(M,0,0,0)` 打印 x、z 分量,利用 Ry(90°) 对 (x,0,z) 的映射 x'=z、z'=-x 进行对照。 ### 我的判断与手算 Ry(90°) 固定局部原点;(2,0,0) 经 Ry(90°):x'=z=0、z'=-x=-2、y'=0 → (0,0,-2)。 - T·R:T 最后作用 → (2,0,0)。 - R·T:R 最后作用 → (0,0,-2)。 与 AI 分析一致,采纳其“打印 x/z 分量”的核验建议。 ### 我实际测试的参数与坐标 点击“一键设置90°测试”:tx=2、θ=90°、s=1,显示模式“两种顺序同时显示”。 ### 运行现象/数值结果 状态栏显示 `T·R·S中心:(2.00, 0.00, 0.00) | R·T·S中心:(0.00, 0.00, -2.00)`,与先验预测完全一致。 ### 修正结论 T 与 R 先后不同导致局部原点的平移方向被旋转“改写”,θ=90° 时两中心不同,证明矩阵乘法不可交换;θ=0° 时两者相同只是特例,不能据此证明可交换。 ## 协作2:程序调试(Task D) ### 错误现象与自己的初步分析 起始框架中 shoulderPose 被写成 `c.T(0,.55,0)`、tipPose 被写成 `c.T(0,2.2,0)`,都未与 basePose 相连。转动基座 yaw 时,机械臂与探头并不跟随基座转动,位置只由自身局部平移决定。我初步判断是“父子变换链断裂”。 ### 提示词 > 我的三维对象能显示,但修改父关节角度后探头位置异常。请提出三个最有可能的矩阵顺序或局部坐标错误,每个错误给出一项能区分原因的测试,不要直接替我重写整份代码。 ### AI提出的可能原因 1) 子关节位姿未左乘父位姿,直接用世界坐标定位; 2) 旋转轴选错(肩部俯仰应在局部 Z 轴而非世界轴); 3) 关节平移量 h、L 位置放错,导致部件装配错位。 ### 我逐项完成的测试 - 固定 pitch=0,仅拖动 yaw:若探头不绕世界原点整体旋转,说明子关节没有乘 basePose(原因1成立)。 - 固定 yaw=0,仅拖动 pitch:观察机械臂是否绕肩关节在局部平面俯仰,确认旋转轴为局部 Z(排除原因2)。 - 读取状态栏“肩部/末端世界坐标”,与 yaw、pitch 手算值比对(排除原因3)。 ### 真实原因与修复 真实原因是 shoulderPose、tipPose 都未继承父位姿。修复:`shoulderPose = basePose · T(0,.55,0) · Rz(pitch)`,`tipPose = shoulderPose · T(0,2.2,0)`。修复后父动带子、子动不影响父;原因2、3经测试均非本 bug 来源。 ### AI建议是否采纳及理由 采纳原因1并直接修复父子链;原因2作为检查项确认后无需改动;原因3通过数值比对确认平移量无误。 ## 协作3:主题场景协商(Task E) ### 我希望实现的对象关系 左侧“基座→机械臂→探头”两级父子链,右侧“旋转样本台+绕中心自转的样本+绕样本公转的标记”,一次覆盖“父子关节”与“绕点自转/公转”两类复合变换机制。 ### 关键提示词 > 我已实现T·R·S、绕指定点旋转和两级父子变换。请提出两个可在40分钟内用简单立方体完成的三维联动场景,并比较部件关系、矩阵链、交互参数、验证难度。请复用现有WebGL2框架,不引入相机拾取、光照或外部库,也不要直接生成整套代码。 ### AI提供的两个方案与比较 方案一“行星—卫星系统”:恒星自转 + 行星公转 + 卫星绕行星公转(多级公转链)。 方案二“医学定位装置+旋转样本台”:左臂两级父子,右侧样本自转 + 标记公转。 比较:方案一公转链更深但部件区分度与可验证点少;方案二同时覆盖父子与自转/公转两种机制、两个滑块参数独立、便于手算验证。 ### 我的选择理由 方案二能同时验证“父子继承(yaw/pitch)”与“绕点旋转(自转/公转)”两类考点,且 yaw、pitch 独立可控,符合“至少两种复合机制、两个独立参数”的验收要求。 ### 实际矩阵链与交互参数 - basePose = T(-2,-1.3,0)·Ry(yaw) - shoulderPose = basePose·T(0,.55,0)·Rz(pitch) - tipPose = shoulderPose·T(0,2.2,0);probeDraw = tipPose·T(0,.32,0)·S(0.73,0.65,0.73) - 样本自转:T(pivot)·Ry(spinAngle)·S(0.7,0.78,0.7) - 标记公转:T(pivot)·Ry(orbitAngle)·T(1.16,.28,0)·S(0.22) - 参数:yaw(基座偏航)、pitch(臂俯仰)、speed(转速);支持暂停/继续、重置、PNG截图。 ### 两组对照测试 1) yaw=−30°、pitch=0:探头与臂随基座整体绕世界原点旋转,样本台与标记不受影响。 2) yaw=0、pitch=35°:基座静止,探头随臂局部俯仰;样本自转与标记公转轨迹不同(一个原地转,一个绕中心划圆)。 ### 最终结果和反思 两组测试均符合预期;暂停后 elapsed 不再增长、画面静止,继续无突跳。反思:公转必须写成 T(pivot)·R·T(radius),若把半径平移放到 R 之前,标记会沿切向偏移而不是绕中心圆轨道运动。