[英]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 == 1
和i == 2
情况分别描述了形状的顶部和右侧边缘,其x
和y
值不断增加。 您的i == 3
和i == 4
情况描述了底部和左侧,但也用递增的x
和y
值描述了它们。 这会中断多边形角之间的连接,并导致颜色反转和对角线较长(底边末端与左边起点之间)。
这是我建议的解决方案,可以对您的代码进行一些概括。 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.