AI 协作日志

学生 Web 实验作品平台

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

# 实验二 AI协作记录(请据实际情况填写)

## AI协作1 · Koch算法
### 我的目标与初步判断
 理解Koch几何规则,理解如何控制旋转图形的凹凸,要让旋转方向来定图形的坐标
### 关键提示词(原文)
 如何确认旋转±60°的方向使凸起朝外
### AI关键建议摘要
Koch 雪花的外凸方向,取决于初始三角形的绕行顺序和旋转符号是否匹配。
### 我的测试方法与结果
在taskc里面验证,A(-0.82,-0.43) → B(0.82,-0.43) → C(0,0.99) → A画出来是
逆时针(因为底边从左到右,然后向上到顶点,再回到左下)
### 采纳情况及修正结论
采用顺时针旋转,即 rx = dx*c + dy*s; ry = -dx*s + dy*c;,Level 1 验证凸起朝外。
## AI协作2 · 绘图板调试
### 具体错误现象(如一次成功,可先人为注入并恢复一个小错误)
在 Task D 中,我人为注入了一个错误:在 pointerToNDC 中暂时取消 Y 轴翻转,把:
const yNDC = 1 - 2 * yCanvas / canvas.height;
改成:const yNDC = 2 * yCanvas / canvas.height - 1;出现了颠倒。
### 我的初步排查
我先检查了 getBoundingClientRect() 和 Canvas 像素尺寸,确认 xCanvas、yCanvas 计算正确;
然后对比课堂公式,发现只有 Y 轴翻转这一步被改动了。初步判断问题就出在 yNDC 的符号上。
### 关键提示词(原文)
我的 WebGL 绘图板点击位置 Y 轴方向反了,点击左上角点出现在左下角。
Y 轴翻转公式是 yNDC = 2 * yCanvas / canvas.height - 1。
请问可能是什么原因,应该怎么验证
### AI建议与逐项测试
AI 建议:
检查 Canvas 像素坐标与 NDC 的 Y 轴方向差异;
用 clientY - rect.top 得到从上往下的像素 y;
NDC 的 y 向上为正,所以应使用 1 - 2*yCanvas/canvas.height;
建议在点击事件里打印 clientY、yCanvas、yNDC 三个值对比。

我按建议逐项测试:
打印 clientY 与 yCanvas,确认 yCanvas 是从上往下增加;
代入左上角 yCanvas=0,错误公式得 -1,正确公式得 1;
代入右下角 yCanvas=canvas.height,错误公式得 1,正确公式得 -1;
恢复 1 - 2*yCanvas/canvas.height 后,四角点击位置全部正确。
### 最终原因及修复证据
原因是 NDC 的 Y 轴向上为正,而 Canvas 像素坐标从上往下增加,必须做 1 - 2*yCanvas/canvas.height 翻转。
恢复后,在 Canvas 四角附近创建点,位置全部正确,窗口缩放后点击中心也准确
## AI协作3 · 主题整合
### 主题及预期效果
绽放 预期效果:以 Koch 雪花为中心结构,外环表示秩序边界,放射线与节点表示向外连接,新增参数化星形线表示绽放轨迹。
整体可旋转、可缩放、可移动中心。
### 两个方案的AI提示词(原文)
 我想在 WebGL 中用基本图元做一个主题为“绽放”的交互作品,复用 Koch 雪花和旋转动画。
 请给我两个方案,比较图元数量、交互难度和可解释性。
### 方案比较、取舍理由
### AI 提出两个方案:

方案一:参数化玫瑰线
图元:LINE_STRIP,约 720 个顶点;
交互:两个滑块分别控制花瓣数和振幅;
可解释性:公式 r = A·cos(kθ) 直观,但需要新增两个 HTML 控件。
方案二:参数化星形线
图元:LINE_STRIP,约 72~168 个顶点;
交互:复用已有的 level 和 scale 作为两个参数;
可解释性:公式 x=A·cos³(t), y=A·sin³(t) 简单,不加新控件。
我选择方案二,理由:
不增加 HTML 控件,改动最小;
复用已有 level 和 scale,两个参数都有效;
顶点数少,性能边界清楚;
图形明显,能看出“绽放”轨迹。
拒绝方案一的理由:需要新增两个滑块,改动较大,且玫瑰线与 Koch 的视觉区分不如星形线明显
### 实际实现、测试与结果
在 task-e.js 中新增 makeAstroid(A, n) 函数,在 render() 中绘制:

javascript
const astroid = makeAstroid(0.95, 72 + level * 24);
drawShape(astroid, gl.LINE_STRIP, [0.85, 0.35, 0.55, 1], theta, scale);结果正常。
## 其他AI使用(若有)
工具、提示词及关键修改记录。