繁体   English   中英

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

[英]How do I fill a polygon made up of randomized points in Pygame?

目前,对于一个项目,我有一个包含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 == 1i == 2情况分别描述了形状的顶部和右侧边缘,其xy值不断增加。 您的i == 3i == 4情况描述了底部和左侧,但也用递增的xy值描述了它们。 这会中断多边形角之间的连接,并导致颜色反转和对角线较长(底边末端与左边起点之间)。

这是我建议的解决方案,可以对您的代码进行一些概括。 i没有循环一个无意义的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安装程序,因此我无法验证它是否可以像多边形一样正确绘制,但至少应该可以使您走上正确的道路。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM