使用 PyGame 显示 Sci Py voronoi 边缘会产生奇怪的“星星”效果

我正在尝试使用 SciPy 和 PyGame在我随机生成的世界地图上创建和显示Voronoi 图

我遇到的问题是,总有一个点有奇怪的线条,它们会忽略其他任何东西,并像星星或其他东西一样散布在地图上。从左上角和左下角可以看出,它们不会无限远。

我怎样才能摆脱它?

显示内容:

http://img3.mukewang.com/61b16dc90001e7a606550381.jpg

我的代码:


import numpy

import random

import pygame

from scipy.spatial import Voronoi



def __generate_voronoi():

    """

    Randomly chooses various points within the x and y dimensions of the map.

    Then, uses SciPy to generate a voronoi diagram with them, and returns it.


    :return: SciPy voronoi diagram

    """


    point_arr = numpy.zeros([900, 2], numpy.uint16)


    for i in range(900):

        point_arr[i][0] = numpy.uint16(random.randint(0, 1600))

        point_arr[i][1] = numpy.uint16(random.randint(0, 900))


    return Voronoi(point_arr)



def draw_voronoi(pygame_surface):

    # generate voronoi diagram

    vor = __generate_voronoi()


    # draw all the edges

    for indx_pair in vor.ridge_vertices:

        start_pos = vor.vertices[indx_pair[0]]

        end_pos = vor.vertices[indx_pair[1]]


        pygame.draw.line(pygame_surface, (0, 0, 0), start_pos, end_pos)


江户川乱折腾
浏览 189回答 1
1回答

慕标琳琳

感谢这里的耐心评论者,我了解到vor.vertices对于无限大的点的第一个索引将返回 -1。这会产生一个问题,因为 python 将 -1 视为列表或数组最后一个元素的索引。我的问题的解决方案不是从vor.vertices.我通过用draw_voronoi()以下代码替换函数来实现:def draw_voronoi(pygame_surface):    # generate voronoi diagram    vor = __generate_voronoi()    # draw all the edges    for indx_pair in vor.ridge_vertices:        if -1 not in indx_pair:            start_pos = vor.vertices[indx_pair[0]]            end_pos = vor.vertices[indx_pair[1]]            pygame.draw.line(pygame_surface, (0, 0, 0), start_pos, end_pos)这产生了这个图像:
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python