# 实验二 AI协作与核验记录

工具：ChatGPT（代码辅助）
真实用户提示词：
> 查看现有代码，在此基础上优化完成要求

## AI协作1：Koch算法理解
### 目标及AI初步判断
原占位p=a、q=b、r为中点，不会形成四段雪花。逆时针边界外侧在右边，应对Q−P右转60°；n层预期3×4ⁿ段。
### 内部核验问题
如何用三角形绕行方向与水平线测试确认±60°？如何使LINE_LOOP连续且不重复端点？
### 建议和实现
计算三等分点P、Q及R，依次递归A→P、P→R、R→Q、Q→B；终止时只输出A。三条初始边连续输出，闭合交给LINE_LOOP。
### 核验方法
对[-1,0]→[1,0]检验R在下方；检查0—4层输出数、相邻线段长度和整体半径。具体已执行结果见evidence测试记录。
### 取舍
保留递归规则，但将近似三角形改为精确等边三角形并居中，使用宽高比校正避免画布拉伸。没有照搬外部现成Koch程序；实现依据实验给定几何规则生成。
### 学生本人补记
初步预测、实际操作结果、是否采纳及理由：初步预测修改后代码会在三角形边进行划分，在大三角形边上不断生产出相同的小三角形。实际操作结果：随着层次的深入，原本的大三角形不断生出小三角，外观更趋向于雪花状，采纳，正确采用递归思想，符合实验要求

## AI协作2：绘图板调试
### 原代码具体问题
pointerToNDC固定返回[0,0]，所有点重叠中心；矩形使用[a,a,a,a]，无法形成矩形；第二次点击不创建对象；清空不清对象数组。
### AI排查判断
分别检查鼠标映射、四角构造、firstPoint跨事件状态及objects数组。坐标计算必须考虑CSS显示尺寸与Y方向；移除Canvas border改用outline，避免边框引入微小偏移。
### 内部核验问题
取消Y轴翻转会产生什么现象？如何验证工具切换不复用旧端点？
### 修复及测试方法
用getBoundingClientRect归一化点击；矩形用min/max构造四角；第二次点击push对象后清空firstPoint；切换及清空取消半成品。验证对象共存、四角、调整窗口与缩放后的中心。测试中可逆注入Y符号错误，比较修复前后坐标，随后恢复。
### 学生本人补记
本人现象、猜想、逐项操作与修复证据：原代码将点击位置固定在中心，矩形也没有正确生成，初步猜想是鼠标坐标没有转换正确，且没有保存完整的图形数据。根据AI建议，补全坐标转换和矩形四个顶点，并在切换工具时清除第一次点击的位置。已有测试记录显示，修改后点、线和矩形可以保存在对象数组中，切换工具不会沿用旧端点，清空后可以重新绘制。采纳，修改对应了原代码存在的问题，符合实验要求

## AI协作3：主题方案比较
### 主题
节律：以周期变化表现有序的时间与空间关系。
### 内部方案问题
用基本WebGL图元提出两个能复用Koch与动画、又区别于教师示例的方案，比较图元数、交互难度和可解释性。
### 方案一：轨道节律（采用）
Koch核心+三条椭圆轨道+菱形卫星。每轨120条线段；每颗卫星2个三角形，1—12颗/轨，因此最多72个卫星三角形。默认Koch48段、三轨360段、18颗卫星36个三角形。交互为数量调节与脉动开关；参数少，周期运动含义直观。
### 方案二：递归枝条生长（未采用）
Koch核心+二叉枝条+叶片。若单根满二叉树深度d且根为0层，枝段数为2^(d+1)−1；叶片约2^d个。需要新增递归、枝长和角度控制，与B的递归能力重复，图案更易拥挤。
### 采用理由及实质改动
选择轨道方案，取消原示例放射线、点状节点，增加交错椭圆和实心菱形；新增数量改变与周期缩放，而非只改标题。仅层次变化上传网格，其余帧复用同一Buffer并改变Uniform和绘制次数。
### 实现与验证
新增部分位于task-e.js的rebuild、render和satellites/pulse事件。核验层次、卫星数、运行、脉动、尺度、定位、复位；证据以测试记录为准。
### 学生本人补记
本人选择理由与操作观察：选择轨道方案，主要是卫星沿轨道运动更容易体现周期变化，与“节律”的主题相符。递归枝条方案与前面雪花的递归思想较为接近，因此没有采用。初步预测增加卫星数量后，轨道上的图形会更加密集，开启脉动并开始运行后，整体图案会周期性放大和缩小。已有测试记录显示，卫星数量、脉动开关和复位状态均能正确改变，采纳，既复用了前面的功能，也增加了新的几何组成和交互方式。