python - 我如何在网格上的 pygame 中制作热图

标签 python pygame

我在 pygame 上制作了一个网格,我想知道如何制作它,以便从该网格上的一个点开始,当您远离该点时,颜色会发生变化,例如,当它是一个正方形时,颜色会从深蓝色变为深蓝色当距离十平方时,会变成浅蓝色。我真的不知道如何做到这一点,任何帮助都会很棒。

网格是使用以下方式创建的:

grid = []
for y in range(grid_size):
    row = []
    for x in range(grid_size):
        row.append([x * (grid_width + grid_margin) + distance_from_left, y * (grid_height + grid_margin) + distance_from_top, white])
    grid.append(row)

网格是使用以下方式绘制的:

for row in grid:
        for x, y, colour in row:
            pygame.draw.rect(screen, colour, (x, y, grid_width, grid_height))

我还有一个函数可以计算出网格上每个节点的所有子节点(它周围的所有节点(向上、向下、侧面和对角线),我觉得这对于计算与所选节点的距离可能很有用节点。

最佳答案

颜色由 3 个颜色 channel (reg、green、blue)组成。请参阅RGB color model 。在这种情况下,颜色只不过是 [0, 255] 范围内 3 个值的元组。

深蓝色例如(0, 0, 63),浅蓝色为 (127, 191, 255)。

您必须在这两个值之间进行插值。计算 [0.0, 1.0] 范围内的系数,该系数表示颜色的色调。使用该因子对颜色 channel 进行插值:

例如 f 是 [0.0, 1.0] 中的一个因子

blue = 63 + 192 * f # interpolate between 63 and 255 dependent of f

到两点之间的距离可以通过pygame.math.Vector2. distance_to()来计算:

例如

pos = (x, y)
gx = (x + 0.5) * grid_size
gy = (y + 0.5) * grid_size
distance = pygame.math.Vector2(pos).distance_to((gx, gy))

例如在位置 pos 附近设置浅蓝色,远离位置设置深蓝色:

pos = # (x, y) position

grid = []
for y in range(grid_size):
    row = []
    for x in range(grid_size):

        gx = x * (grid_width + grid_margin) + distance_from_left
        gy = y * (grid_height + grid_margin) + distance_from_top
        distance = pygame.math.Vector2(pos).distance_to((gx + grid_width/2, gy + grid_height/2))
        maxLen = grid_size * (grid_height + grid_margin)

        f = max(0, 1 - distance / maxLen)
        color = (127 * f, 191 * f, 63 + 192 * f)

        row.append([gx, gy, color])
    grid.append(row)


上述解决方案假设pos是以像素为单位的窗口坐标。

如果pos是一个“网格”坐标,这意味着pos标识了网格中的一个位置,那么解决方案就更简单了:

pos = # (x, y) position

grid = []
for y in range(grid_size):
    row = []
    for x in range(grid_size):

        distance = pygame.math.Vector2(pos).distance_to((x, y))

        f = max(0, 1 - distance / grid_size)
        color = (127 * f, 191 * f, 63 + 192 * f)

        gx = x * (grid_width + grid_margin) + distance_from_left
        gy = y * (grid_height + grid_margin) + distance_from_top
        row.append([gx, gy, color])

    grid.append(row)

关于python - 我如何在网格上的 pygame 中制作热图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55617119/

相关文章:

python - 触发器将添加到数据库的新行发送到 postgres 中的另一个数据库?

python - QVD 文件到 pandas DataFrame

python - 如何在 Pygame 中模糊曲面的边缘?

python - 在Python循环下访问迭代列表中的所有元素

python - 如何在Python中查找库的函数?

python - 使用 scikit learn 对文本进行多标签分类

python - Pygame - 鼠标移动时变换屏幕

python - 如何在 PyGame Snake 游戏中添加分数跟踪器?

python - 如何在Pygame中将map.txt文件导入为 map ?

python - 如何使用一个循环添加到多个组