AI 协作日志

学生 Web 实验作品平台

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

# 实验二 AI协作记录

## AI协作1 · Koch算法

### 我的目标与初步判断
完成Task B的Koch雪花算法,需要独立实现subdivideSegment函数中的B1~B4(线段三等分P、Q点,外凸顶点R,递归拆四段)。最初我对"向外凸起的顶点R"的旋转方向不确定:同一组向量Q-P,旋转+60°和-60°都能构成等边三角形,我不知道哪个才是"向外"。我初步判断可能和三角形的绕行方向有关,但说不清具体关系。

### 关键提示词(原文)
> 我对Koch雪花R点的计算不理解。P和Q是三等分点,R要算向外凸的等边三角形顶点,用旋转±60°都可以构造等边三角形,我该怎么确认旋转方向让凸起朝外?

### AI关键建议摘要
- P=A+(B-A)/3,Q=A+2(B-A)/3,两点就是线段AB的三等分点
- R=P+把向量(Q-P)旋转60°;旋转不改变长度,所以P、Q、R构成等边三角形
- 关键判断依据:baseTriangle顶点逆时针排列(左下→右下→顶),逆时针绕行时三角形内部在左手边、外部在右手边,所以外凸应"右转60°"(即顺时针−60°)
- 建议先用底边(水平线)代入具体数值测试突起方向,不要凭固定截图猜

### 我的测试方法与结果
1. 我先选了逆时针+60°(方案A),用底边A=(-0.82,-0.43)→B=(0.82,-0.43)代入:dx≈0.55、dy=0,算出r[1]≈0.05,在底边**上方**——朝内,方向错了
2. 改选顺时针−60°(方案B):r[1]≈−0.91,在底边**下方**——朝外,正确
3. 填完B1~B4后运行,Level 0~4线段数分别为3、12、48、192、768,与3×4ⁿ完全一致,雪花凸起方向正确,图案连续

### 采纳情况及修正结论
采纳方案B(顺时针−60°)。结论:Koch外凸方向由"三角形绕行顺序+旋转符号"共同决定,不能凭截图猜;用一条水平边代入数字验证方向是最快的方法。旋转方向选反会导致雪花向内凹。

---

## AI协作2 · 绘图板调试

### 具体错误现象
Task D中,填完坐标转换(D1~D3)和矩形四角(D4)后,选"矩形"工具点击两次,矩形没有出现在Canvas上;选"线段"同样没反应,但选"点"正常。

### 我的初步排查
我一开始以为是坐标转换写错了(以为鼠标点到了画面外),检查了D1~D3公式;又检查了D4矩形顶点顺序,觉得都没问题。后来怀疑是事件处理流程的问题。

### 关键提示词(原文)
> 画矩形点了两次没出现,坐标转换和矩形顶点我都填了,为什么还是没画出来?

### AI建议与逐项测试
AI建议检查click事件处理的三分支逻辑:
1. point分支:直接push对象 → 实测正常(点能画出来),说明坐标转换D1~D3没有问题
2. 第一次点击:firstPoint===null时保存第一个点(模板已有)→ 确认正确
3. 第二次点击:else分支只写了firstPoint=null(重置),**没有创建对象push进objects** → objects为空,render()当然画不出来

逐项测试结果:点能画(坐标转换没问题);线段/矩形画不出来(问题在第二次点击没有创建对象)。

### 最终原因及修复证据
最终原因:D6缺失——第二次点击时没有调用createObject把新对象加入objects数组,只有重置状态。修复后:
```
objects.push(createObject(kind, firstPoint, p, color.value));
firstPoint = null;
```
修复后线段、矩形都能正常显示,且点、线、矩形可以共存。清空按钮(D7:objects.length=0; firstPoint=null)验证正常,旧图形不再出现。

---

## AI协作3 · 主题整合

### 主题及预期效果
主题词:**生长**。视觉含义:以年轮与螺旋表现生命向外扩展的轨迹。预期效果:Koch雪花作为主体,外环、放射线、节点构成装饰,新增同心圆年轮和螺旋点列突出"生长"感。

### 两个方案的AI提示词(原文)
> 请帮我设计两个用WebGL基本图元表达"生长"主题的几何组成方案,比较图元数量、实现难度和可解释性。

### 方案比较、取舍理由

| | 方案A:螺旋点列 | 方案B:年轮刻度点 |
|---|---|---|
| 实现 | 60个点,半径与角度同时递增 | 每圈年轮上放节点 |
| 图元 | gl.POINTS | gl.POINTS |
| 视觉 | 从中心螺旋向外,像藤蔓/生长轨迹 | 在圈圈上点缀 |
| 与现有图形区分度 | 高(现有都是直线/圆环) | 低(与已有nodes节点类似) |

取舍:**采用方案A**。理由:螺旋点列更有"生长轨迹"的动态感,与主题契合更强;方案B像是在已有的圆环上点缀,辨识度低,容易被判为"只改颜色"。

### 实际实现、测试与结果
实现:for循环生成螺旋点列(r=0.1+i×0.015,a=i×0.35,共60点),用gl.POINTS绘制;年轮用makeCircle循环生成5圈同心圆,LINE_LOOP绘制,角度固定0(不随动画旋转,保持年轮静止感)。测试:拖动尺度滑块,年轮与螺旋同步缩放;点击Canvas,整个作品随中心移动;开启动画,Koch与放射线旋转而年轮保持静止,符合设计预期。

---

## 其他AI使用(若有)