PythonLearn

利用AI编写一个水滴融合效果

用AI写代码的最好方法就是给他最小化上下文,我们可以通过设计无状态、单功能的函数, 让AI实现函数,最后将这些函数组合起来,完成整个任务。

水滴融合算法

其实就是两个散发着光芒的圆靠近、结合后,将大于一定亮度的像素点提取出来,就能实现融合效果

那么我们的步骤就是

  1. 创建一个二维矩阵,用于保存圆的亮度数据
  2. 将多个代表圆的矩阵相加在一起,亮度叠加
  3. 筛选出亮度大于一定阈值的像素点
  4. 渲染出来

设计代码

为了让AI生成准确的代码,我们需要思考我们需要什么函数,并让AI实现出来

需要的函数

需要的库

你需要了解一下你使用的库,确保他们能满足我们的需求, 比如np的矩阵可以直接转变成PIL图,PIL又能直接转变成TK的图,这点如果你不知道,AI也不知道,那可能就会生成出错误的代码

给AI的额外提醒

为了防止AI对我们的需求理解有误,我们可以给AI一些提醒

提问思路

  1. 我们无需告诉AI我们最终想要什么,而是让他专心生成函数就行
  2. 生成好函数后可以测试一波,让AI写个测试代码,用matplotlib展示矩阵效果
  3. 一个函数一个函数的写,能确保AI生成的准确率

最后的框架

那么通过AI生成代码和他给的更多建议,我们可能得到的代码框架如下

PosCircleType = list[float, float, np.ndarray]
def create_radial_decay_matrix(size: int, radius: float, sigma: float = None) -> np.ndarray:
    """创建一个从中心向外逐渐减小值的二维矩阵。"""

def map_pos_circle_to_image(pos_circle: PosCircleType, background_image: np.ndarray) -> np.ndarray:
    """将位置和矩阵映射到背景图片,并使用非线性叠加处理重叠区域。"""

def threshold_matrix(matrix: np.ndarray, threshold: float) -> np.ndarray:
    """筛选矩阵值,大于阈值的设为1,其余设为0。"""

def matrix_to_pil_image(matrix: np.ndarray) -> Image.Image:
    """将二维矩阵转换为PIL图片,值1映射为白色,值0映射为黑色。"""

def main() -> None:
    """创建一个全屏Tkinter窗口,并在其中动态显示图像。"""

代码实现

代码我没格式化,当个演示就行 水滴效果模拟.py