AI 协作日志
学生 Web 实验作品平台
学号:202412211401013 · 来源:ai-log.md
# 实验二 AI协作记录 ## AI协作1 · Koch算法 ### 我的目标与初步判断 目标:不照搬教材现成代码,独立实现 Koch 雪花——线段三等分、向外等边三角形顶点、递归、闭合绘制。 初步判断:①每条线段替换为 A→P→R→Q→B 四段,线段数随层数 ×4,即 3×4ⁿ;②外凸顶点需用旋转 ±60° 求得;③“向外”方向与初始三角形绕行顺序有关,当时不确定取正负,决定先用水平线段测试确认。 ### 关键提示词(原文) - “如何计算线段三等分点 P、Q,以及向外的等边三角形顶点 R?” - “旋转 ±60° 怎么确定让凸起朝外?与三角形绕行方向的关系?” - “递归终止条件怎么写?为什么 Koch 第 n 层是 3×4ⁿ 条线段?” - “闭合边界用什么图元绘制,顶点怎么组织?” ### AI关键建议摘要 - 三等分点:P = a + (b−a)/3,Q = a + 2(b−a)/3。 - 外凸顶点:R = P + 旋转(Q−P, ±60°);符号由绕行方向决定(我的三角形逆时针排列,采用右转 60°,即 −60°)。 - 递归:level 0 输出当前线段端点终止;否则对 A→P、P→R、R→Q、Q→B 四段递归。 - 绘制:gl.LINE_LOOP,GPU 自动连接末点到首点保证闭合;顶点数 = 3×4ⁿ。 ### 我的测试方法与结果 先输出 Level 0 三角形核对三边首尾;再用水平线段确认右转 60° 使凸起朝外;扩展 Level 1—4 对照线段数: | Level | 应有 | 实际(实测) | |---:|---:|---:| | 0 | 3 | 3 | | 1 | 12 | 12 | | 2 | 48 | 48 | | 3 | 192 | 192 | | 4 | 768 | 768 | 结果:凸起均朝外,各层线段数与预期一致,Level 0–4 未裁切。 ### 采纳情况及修正结论 采纳 AI 的三等分与旋转公式、递归终止条件和 LINE_LOOP 方案。旋转方向经水平线段测试确认:逆时针初始三角形 + 右转 60° 正确,取反会向内凹。实现位于 `task-b.js` 的 `subdivideSegment()`,在 C、E 中复用。 ## AI协作2 · 绘图板调试 ### 具体错误现象(一次成功,故人为注入并恢复) 按实验要求人为注入错误:临时把 `yNDC = 1 − 2*yCanvas/height` 改成 `2*yCanvas/height − 1`(去掉 Y 翻转)。点击画布右上角,点却出现在右下角,上下颠倒(已截图)。 ### 我的初步排查 怀疑是坐标转换的 Y 方向处理,先核对 getBoundingClientRect、Canvas 像素换算、NDC 三段,判断问题最可能出在 Y 翻转那一步。 ### 关键提示词(原文) - “点击位置在 Y 轴方向上下颠倒,可能是什么原因?” - “clientX/Y 到 NDC 的转换哪一步容易出错?怎么逐段验证?” ### AI建议与逐项测试 AI 建议把 clientX/Y → Canvas 像素 → NDC 拆开逐段核对、重点查 Y 翻转,并逐项测试: 1. 四角附近建点核对位置——注入错误后四角上下颠倒; 2. 恢复 `1 − 2y/height` 后四角位置正确; 3. 调整窗口大小后再点中心,仍准确; 4. 点、线段、矩形共存不消失; 5. 第一次点线段后切换为矩形再点击,状态正确重置; 6. “清空”后旧图形不再出现。 ### 最终原因与修复证据 根因:Canvas 坐标原点在左上、Y 向下,而 WebGL NDC 原点在中心、Y 向上,必须做 `yNDC = 1 − 2*yCanvas/height` 翻转,去掉即上下颠倒。已恢复正确实现(`task-d.js` 的 `pointerToNDC()`),全部测试通过。 ## AI协作3 · 主题整合 ### 主题及预期效果 主题:生长。预期:Koch 雪花边界向外扩展,放射线与节点象征枝条由中心向外生长,配合旋转动画体现持续生长;点击画布可移动图案中心,滑块控制展开尺度。 ### 两个方案的对比(本实验实际做的比较) 对“生长”给出两种用基本 WebGL 图元表达的方式并比较: - 方案A(采用):Koch 雪花边界(LINE_LOOP)+ uniform 旋转动画;新增圆环(LINE_LOOP)、放射线(LINES)、节点(POINTS);点击改中心。 - 方案B(未采用):改用动态轨迹线 + 节拍式缩放表达生长,需每帧重新生成大量顶点。 ### 方案比较、取舍理由 A 图元 3 种、复用 B/C/D 能力、实现清晰可解释;B 视觉虽丰富但顶点开销大、实现复杂、难讲清。评分重抽象与可解释性,故选 A。 ### 实际实现、测试与结果 实现 Koch + 外环/内环 + 放射线 + 节点;验证点击画布移动图案中心、展开尺度滑块、开始/暂停旋转均生效,状态栏显示主题与线段数。已保存初始状态与一次交互后的对比截图。实现位于 `task-e.js`,主题词与设计说明已同步改为“生长”。 ## 其他AI使用(若有) - Task A:AI 帮助补全层次读取/夹取、颜色转换、事件绑定与重置,并修正重复声明 `const level`、重复 `setupDraw`、嵌套 reset 事件等错误。 - Task C:AI 说明用 uniform 逐帧更新 `uTheta`、几何 Buffer 只上传一次、单个 requestAnimationFrame 循环,并实现速度/反向/暂停/复位。 - Challenge(Task D 扩展):AI 提供对象选中(几何命中 hitTest/distToSegment)、选中改色、撤销的实现与验收步骤。 工具:豆包(Doubao)。