使用ChatGPT生成三角和六角格子

在科研学习的过程中,我需要使用matlab生成一张由纯黑或纯白像素组成的图片,并且我需要这些像素点组成三角格子(triangular)和六角格子(honeycomb)的图案。

我把问题抛给了ChatGPT:

在matlab中,先创建一个1140行912列的0矩阵,然后更改矩阵中的内容,第一行分别为1、0、1、0依次排列,第二行全都是0不变,第三行为0、1、0、1依次排列,第四行全都是0不变,就这样四行为一组,依次排列,例如:第五、六、七、八行分别与第一、二、三、四行相同。之后将矩阵转化为24位深度的图片,并保存图片为bmp格式。

ChatGPT给出了这样的答案并作出解释:

% 创建一个1140行912列的0矩阵
matrix = zeros(1140, 912);

% 定义模式,这里是四行一组
pattern = repmat([1, 0, 1, 0; 0, 0, 0, 0; 0, 1, 0, 1; 0, 0, 0, 0], 1, 228);

% 使用循环填充矩阵
for row = 1:4:1140
    matrix(row:row + 3, :) = pattern;
end

% 创建一个24位深度的图像
image = uint8(cat(3, matrix, matrix, matrix) * 255);

% 保存图像为bmp格式
imwrite(image, 'output.bmp');

这段代码首先创建了一个1140行912列的全0矩阵,然后定义了四行一组的模式。接下来,使用循环将模式填充到矩阵中,最后创建一个24位深度的图像,将矩阵复制到三个通道中,然后保存为BMP格式的图像文件(’output.bmp’)。

其中,第2行代码我不清楚什么意思,于是追问ChatGPT,她给出了这样的解释:

这段代码使用repmat函数来创建一个模式,该模式包含了你所描述的四行一组的图案。让我解释一下这个代码:

这行代码的目的是将一个4×4的矩阵复制成一个更大的矩阵,这个更大的矩阵由多个这个小矩阵连接而成。
[1, 0, 1, 0; 0, 0, 0, 0; 0, 1, 0, 1; 0, 0, 0, 0] 是一个4×4的小矩阵,表示了你所描述的四行一组的图案,其中1表示黑色,0表示白色。
repmat函数的第一个参数是要重复的矩阵,这里是上述的小矩阵。
第二个参数是指定每行重复的次数,这里是1,表示每一行只重复一次。
第三个参数是指定每列重复的次数,这里是228,表示每一列重复228次。
这样,repmat函数会将小矩阵复制成一个更大的矩阵,其中小矩阵的内容在行方向上不断重复,列方向上重复228次,从而创建了你描述的模式。这个模式将被用来填充整个矩阵,以满足你的要求。

我觉得她解释得太好了,把代码的思路,以及每部分的作用都说得非常清楚。并且我尝试运行代码,生成的图案与预想中的一模一样,简直不要太方便。

同时,也发现了一点问题,用 [1, 0, 1, 0; 0, 0, 0, 0; 0, 1, 0, 1; 0, 0, 0, 0] 来表示显然是多余的,把它换成 [1, 0; 0, 0; 0, 1; 0, 0] 的小矩阵,并更改相应的重复次数也能达到同样的效果。(这应该是我描述的问题,ChatGPT只是在照我描述的做罢了)

最终,在我只简单修改代码后,就生成了想要的图片。

放大后的三角格子

用类似的方法,也能生成六角格子的图片。

放大后的六角格子

当然,询问ChatGPT的过程并没有看起来这样顺利,也走了许多弯路,在这里总结一下询问技巧。

在让ChatGPT帮忙写代码时,如果直接说结果让她生成,她大概率会理解错误。最好把结果分解为一个一个明确的小步骤,指明她应该怎么做,这样成功的概率会大很多。

2条评论

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注