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

2024-04-25 14:20:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我在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))

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


Tags: infrommargin网格forsize节点range
1条回答
网友
1楼 · 发布于 2024-04-25 14:20:44

颜色由3个颜色通道(reg、绿色、蓝色)组成。见RGB color model。在此上下文中,颜色只不过是范围[0,255]中3个值的元组。你知道吗

深蓝色是例如(0,0,63),浅蓝色是(127,191,255)。你知道吗

你必须在这两个值之间插值。在[0.0,1.0]范围内计算一个系数,表示颜色的色调。使用“因子”来插值颜色通道:

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

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

两点之间的距离可通过^{}计算:

例如

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)

相关问题 更多 >