用蛇绘制图像
想象一个连续的二维路径,该路径只能向左,向右或笔直走,不能相交,并且必须填充矩形网格,例如图像中的像素网格。我们将这种路径称为蛇。 这个放大的示例显示了一条10×4网格中的蛇形路径,该路径以红色开头,并在每一步中将色相增加大约2%,直到变为紫色。(黑线仅用于强调其方向。) 目标 这场流行竞赛的目标是编写一种算法,尝试使用一条颜色连续少量变化的单一蛇来重新创建给定图像。 您的程序必须获取任何大小的彩色图像,以及介于0和1之间(包括0和1)的浮点值(公差)。 容差定义了在每个像素大小的步长中允许更改蛇色的最大数量。我们将两种RGB颜色之间的距离定义为当排列在RGB颜色立方体上时两个RGB点之间的欧几里得距离。然后将距离标准化,因此最大距离为1,最小距离为0。 色距伪代码:(假设所有输入值都是该范围内的整数[0, 255];输出已归一化。) function ColorDistance(r1, g1, b1, r2, g2, b2) d = sqrt((r2 - r1)^2 + (g2 - g1)^2 + (b2 - b1)^2) return d / (255 * sqrt(3)) 如果对蛇的当前颜色和另一种颜色调用此函数的结果大于给定的公差,则蛇可能不会变为该另一种颜色。 如果愿意,可以使用其他颜色距离功能。它必须是准确的并且有充分的文档证明,例如http://en.wikipedia.org/wiki/Color_difference中列出的内容。您还必须将其标准化为in [0, 1],即最大可能距离必须为1,最小必须为0。如果您使用其他距离度量,请在回答中告诉我们。 测试影像 当然,您应该发布输出图像(如果需要,甚至可以发布蛇的动画)。我建议使用不同的低公差(可能在0.005至0.03左右)发布各种此类图像。 (更大的巨浪) 获胜标准 如前所述,这是一次人气竞赛。投票最高的答案将获胜。提供对输入图像最准确,最美的“蛇形路径”描绘的答案应予以投票。 如果发现任何用户恶意提交的图像不是真正的蛇,则将永远取消其资格。 笔记 只能使用一条蛇形路径,并且它必须完全填充图像,而不能两次触摸同一像素。 蛇可能在图像的任何位置开始和结束。 蛇可能以任何颜色开始。 蛇必须留在图像的边界内。界限不是循环的。 蛇一次不能对角移动,也不能一次超过一个像素。