Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Pygame中填充由随机点组成的多边形?_Python_Python 2.7_Pygame - Fatal编程技术网

Python 如何在Pygame中填充由随机点组成的多边形?

Python 如何在Pygame中填充由随机点组成的多边形?,python,python-2.7,pygame,Python,Python 2.7,Pygame,目前对于一个项目,我有一个包含36(x,y)个坐标的列表变量。其目的是绘制一个填充内部的多边形。所有点都是随机的,但仅限于屏幕边框周围的一个大正方形,因此始终存在点边框。当我使用pygame.draw.polygon命令时。看起来,无论生成多少不同的随机点,出来的多边形总是被中心的许多洞和三角形形状弄得一团糟,而不是填充形状 使用draw.polygon命令是否有一些我不懂的规则 我使用的点数是否会对形状产生负面影响 为什么我在做一个封闭的形状,但它并没有完全填满 他们制作填充多边形的替代方法也

目前对于一个项目,我有一个包含36(x,y)个坐标的列表变量。其目的是绘制一个填充内部的多边形。所有点都是随机的,但仅限于屏幕边框周围的一个大正方形,因此始终存在点边框。当我使用pygame.draw.polygon命令时。看起来,无论生成多少不同的随机点,出来的多边形总是被中心的许多洞和三角形形状弄得一团糟,而不是填充形状

使用draw.polygon命令是否有一些我不懂的规则

我使用的点数是否会对形状产生负面影响

为什么我在做一个封闭的形状,但它并没有完全填满

他们制作填充多边形的替代方法也是吗

谢谢你的帮助和时间

(图片在鼠标方向旋转)

这幅画是正面朝上的

我的主要问题是为什么多边形没有完全填充,为什么底部从来没有一直附着。
请参阅下面的代码:

def build(self):  
    for i in range(1,5):  
        for b in range(1,7):  
            if i == 1:  
                x = R.randrange(b*100,b*1000)  
                y = R.randrange(0,1000)  
                points.append([x,y])  
            elif i == 2:  
                x = R.randrange(9000,10000)  
                y = R.randrange(b*1000-1000,b*1000)  
                points.append([x,y])  
            elif i == 3:  
                x = R.randrange(b*1000,b*1000+1000)  
                y = R.randrange(9000,10000)  
                points.append([x,y])  
            elif i == 4 and b!=9:  
                x = R.randrange(0,1000)  
                y = R.randrange(b*1000-1000,b*1000)  
                points.append([x,y])  
这是我提出观点的职责

    screen.fill(blue)

    pygame.draw.polygon(screen,green,(points)) 

绘制语句

我认为有两个问题

第一个问题是造成图像顶部的混乱。如果
i==1
,则此行有错误:

x = R.randrange(b*100,b*1000)
这会在循环中每次选择一个
x
值,但选择范围是重叠的,而不是严格地增加范围。我怀疑您希望使用更像
I==3
案例的逻辑:

x = R.randrange(b*1000,b*1000+1000)
第二个问题更像是一个逻辑问题。您是
i==1
i==2
案例分别用增加的
x
y
值来描述形状的上边缘和右边缘。您的
i==3
i==4
案例描述了底部和左侧,但它们也随着
x
y
值的增加而被描述。这将断开多边形角点之间的连接,并负责反转颜色和长对角线(在底边的端点和左边的起点之间)

下面是我建议的解决方案,它稍微概括了您的代码。我不是在一个无意义的
i
数字上循环,也不是使用
if
语句来处理不同的边,而是用一个4元组的值(起始x和y值,以及每个连续点的偏移量)来描述每条边,并在元组列表上循环。循环体非常简单,因为在计算时会向每个坐标添加一个附加的随机偏移:

for x, dx, y, dy in [(0,1000, 0, 0), (9000, 0, 0, 1000),
                     (9000, -1000, 9000, 0), (0, 0, 9000, -1000)]:
    for b in range(9):
        points.append([x + b*dx + R.randrange(1000), y + b*dy + R.randrange(1000)])

我目前没有可用的PyGame安装,因此我无法验证它是否能正确绘制多边形,但它至少会让您走上正确的轨道。

我认为有两个问题

第一个问题是造成图像顶部的混乱。如果
i==1
,则此行有错误:

x = R.randrange(b*100,b*1000)
这会在循环中每次选择一个
x
值,但选择范围是重叠的,而不是严格地增加范围。我怀疑您希望使用更像
I==3
案例的逻辑:

x = R.randrange(b*1000,b*1000+1000)
第二个问题更像是一个逻辑问题。您是
i==1
i==2
案例分别用增加的
x
y
值来描述形状的上边缘和右边缘。您的
i==3
i==4
案例描述了底部和左侧,但它们也随着
x
y
值的增加而被描述。这将断开多边形角点之间的连接,并负责反转颜色和长对角线(在底边的端点和左边的起点之间)

下面是我建议的解决方案,它稍微概括了您的代码。我不是在一个无意义的
i
数字上循环,也不是使用
if
语句来处理不同的边,而是用一个4元组的值(起始x和y值,以及每个连续点的偏移量)来描述每条边,并在元组列表上循环。循环体非常简单,因为在计算时会向每个坐标添加一个附加的随机偏移:

for x, dx, y, dy in [(0,1000, 0, 0), (9000, 0, 0, 1000),
                     (9000, -1000, 9000, 0), (0, 0, 9000, -1000)]:
    for b in range(9):
        points.append([x + b*dx + R.randrange(1000), y + b*dy + R.randrange(1000)])

我目前没有可用的PyGame安装,因此我无法验证它是否能正确绘制多边形,但它至少会让您走上正确的轨道。

我认为有两个问题

第一个问题是造成图像顶部的混乱。如果
i==1
,则此行有错误:

x = R.randrange(b*100,b*1000)
这会在循环中每次选择一个
x
值,但选择范围是重叠的,而不是严格地增加范围。我怀疑您希望使用更像
I==3
案例的逻辑:

x = R.randrange(b*1000,b*1000+1000)
第二个问题更像是一个逻辑问题。您是
i==1
i==2
案例分别用增加的
x
y
值来描述形状的上边缘和右边缘。您的
i==3
i==4
案例描述了底部和左侧,但它们也随着
x
y
值的增加而被描述。这将断开多边形角点之间的连接,并负责反转颜色和长对角线(在底边的端点和左边的起点之间)

下面是我建议的解决方案,它稍微概括了您的代码。我不是在一个无意义的
i
数字上循环,也不是使用
if
语句来处理不同的边,而是用一个4元组的值(起始x和y值,以及每个连续点的偏移量)来描述每条边,并在元组列表上循环。循环体非常简单,因为附加的随机偏移是