AI 协作日志
学生 Web 实验作品平台
学号:202412214301008 · 来源:ai-log.md
# 实验二 AI协作记录
姓名:谭帅
学号:202412214301008
> 本记录仅对应实验二,依据实际对话和当前代码填写。代码核验与浏览器实测分别说明;未反馈的运行结果不写成已验证事实。
## AI协作1 · Koch算法
### 我的目标与初步判断
完成 Task B 的 Koch 递归细分。我已填写 P、Q、R 和递归调用,但不确定哪里写错,向 AI 请求检查;当时未提出具体原因判断。
### 关键提示词(原文)
“taskb我写的错在哪”
### AI关键建议摘要
P、Q 的三等分坐标和四次递归顺序正确,错误有两处:
1. 原来的 R 是 P、Q 的中点,不能形成外凸的等边三角形。应把 P→Q 向量顺时针旋转60°,再加到 P 上:
`r = [p[0] + c*dx + s*dy, p[1] - s*dx + c*dy]`。
2. 删除四次递归后的 `out.push(a)`。终止条件已经记录起点,额外添加会造成多余连线。
### 我的测试方法与结果
我修改了上述两处。填写日志时,AI 重新读取 Task B,确认 R 使用旋转公式,且只在 level 为0时记录起点。
AI 建议用 Level 1 的12个顶点、Level 2 的48个顶点核对结果;本次对话没有记录我实际读到的页面数量,因此这些数值仅作为核验标准,不作为实测结果。
### 采纳情况及修正结论
已采纳。每条线段按 A→P→R→Q→B 分成4段,递归层数每次减1;达到0时记录起点。闭合三角形经过 n 层细分有 3×4^n 条线段,由 LINE_LOOP 连接最后一个点与第一个点。
## AI协作2 · 绘图板调试
### 具体错误现象(如一次成功,可先人为注入并恢复一个小错误)
Task D 选择矩形后,点击两次没有出现矩形。
### 我的初步排查
我发现问题发生在两次点击创建矩形时,但没有确定是状态保存、坐标还是绘制代码的问题,于是请求 AI 检查。
### 关键提示词(原文)
“taskD 为什么按两下矩形出不来”
### AI建议与逐项测试
AI 对照 HTML 和 JavaScript 后发现:
1. HTML 中矩形选项的 value 是 "rect",而 JavaScript 判断的是 "rectangle",因此第二次点击没有进入创建矩形的分支。
2. 鼠标坐标属于页面显示尺寸,应使用 getBoundingClientRect 返回的 rect.width、rect.height 换算,避免 Canvas 缩放后位置偏移。
我将第二次点击的处理改为:
```js
objects.push(createObject(kind, firstPoint, p, color.value));
firstPoint = null;
```
并将坐标转换改为:
```js
return [
(xCanvas / rect.width) * 2 - 1,
1 - (yCanvas / rect.height) * 2
];
```
### 最终原因及修复证据
矩形不出现的直接原因是选项值与判断字符串不一致;尺寸换算还存在缩放时的偏移问题。
填写日志时,AI 读取当前文件,确认以上两处修改已保存。对话中未明确反馈修改后的两次点击实测结果,因此这里只确认代码修复。
根据本次排错整理:第一次点击保存 firstPoint,第二次点击用两个对角点创建对象,再清空 firstPoint;HTML 的 value 必须与程序判断保持一致。
## AI协作3 · 主题整合
### 主题及预期效果
当前页面主题为“绽放”。代码复用 Koch 图案、旋转、圆环、放射线和节点,并增加24条外围刻度、连接12个外围节点的线段。预期通过几何装饰表现向外展开的效果,可调整图案细分层次、整体尺度,点击画布移动中心,切换旋转状态。
### 两个方案的AI提示词(原文)
本次未向 AI 提出两个主题设计方案的比较请求,不能补造相关提示词。
实际与主题整合有关的提问是:
“task e 装饰层数好像有点问题,哪里逻辑写错了”
### 方案比较、取舍理由
本次实际协作是检查现有方案的算法,没有发生两套主题方案的比较。现有代码采用外围刻度和节点连线作为新增几何组成。
AI 建议保留层数读取与递归逻辑,仅修正 R 点公式,因为问题来自几何计算,而不是层数事件。我按此修改,避免无关改动。
### 实际实现、测试与结果
AI 检查发现 Task E 的 R 点公式与正确的 Koch 外凸公式不一致,建议采用与 Task B 相同的顺时针60°旋转公式。
我随后回复:“ok。我改好了。填写实验二的log,和实验一一样”。
填写日志时,AI 再次读取 Task E,确认 R 公式已修正,层数事件会读取控件值并重新执行 buildKoch(level)。
本次对话没有提供修改后的截图或逐层运行观察,因此不将预期图案写为已实测通过。
修正后的理解:装饰层数控制 Koch 递归次数,并非圆环数量。Level 0、1、2 分别对应3、12、48条 Koch 线段;外围圆环、刻度、放射线数量在当前代码中固定。
## 其他AI使用(若有)
### 工具与协作方式
使用本次 AI 对话解释知识点、检查本地代码并定位错误。我自行填写和修改程序,最后请 AI 根据实际对话整理日志。
### Task A:控件、颜色与事件
关键提示词(原文):
- “rask-a level的值怎么读取”
- “TODO A2: 将固定的 level 改为控件实际层次什么意思 相关语法”
- “怎么做a2”
- “a3是不是也不用改”
- “4 5”
关键建议与修改:
- 通过 levelInput.value 读取滑块,用 Number 转成数字,再取整并限制到0~5。
- A2 已使用 level 变量,A1 改为读取控件后,无需重复修改调用;...triangle 表示展开三个顶点参数。
- A3 改为 setupDraw(rgba(colorInput.value)),读取颜色并转换成 RGBA。
- 为层数和颜色绑定 input 事件,传入 render 函数。
- 重置时恢复层数2和颜色 #197ab5,再调用 render();直接修改 value 不会自动触发 input 事件。
填写日志时的代码核验结果:上述修改均已存在。对话未记录各控件的逐项浏览器实测结果。
### Task C:旋转过快
关键提示词(原文):
“TASK-c怎么那么快,错在哪”
实际现象:我发现旋转速度过快,向 AI 请求排错。
AI 建议与关键修改:
- speed 的单位为度/秒,theta 使用弧度,应写为:
`theta += direction * speed * dt * Math.PI / 180;`
- 原代码直接把度数当弧度,导致角速度约为预期的57倍。
- 开始按钮中不要再次调用 requestAnimationFrame(animate),因为文件末尾已启动循环,animate 内部也会安排下一帧。按钮只需切换 paused、更新文字和重置 lastTime,避免重复建立动画循环。
填写日志时的代码核验结果:角度更新已加入 Math.PI / 180,动画帧请求仅保留在 animate 内部和文件末尾。默认55度/秒时理论上一圈约6.5秒;本次未记录实际计时结果。