2013-02-02 139 views
0

使用cs1graphics模块,我做了一个包含4个Point对象的List。我想用列表对象中的点来绘制一个多边形,每次迭代(在for循环中)都将List中的一个元素添加到Polygon参数中。列表中的Point对象需要在Polygon中彼此叠加以便绘制出整个事物。实际发生的情况是,List中位置的Point对象会覆盖上一次迭代中的前一个对象。最后,我最终“绘制”一个点(即列表中的最后一个点)。我该如何解决?如何使用for循环添加参数元素?

编辑:我试过使用.append但将所有参数变成一个List对象,显然我不能绘制列表。

self._list = [Point(200,200),Point(400,200),Point(400,400),Point(200,400),Point(200,200)] 
    for i in range(4): 
     self._poly = Polygon(self._list[i],) 
+0

'Polygon'对象接受哪些参数? – Amyth

+0

尝试传递列表本身,而没有像'self._poly = Polygon(self._list)'这样的循环' – Amyth

回答

0

两个

self._list = [Point(200,200),Point(400,200),Point(400,400),Point(200,400),Point(200,200)] 
self._poly = Polygon(self._list) 

self._list = [Point(200,200),Point(400,200),Point(400,400),Point(200,400),Point(200,200)] 
self._poly = Polygon(*self._list) 

会工作。不需要循环。

 

如果你坚持要逐步建立一个多边形在一个循环中,你可以这样做:

self._list = [Point(200,200),Point(400,200),Point(400,400),Point(200,400),Point(200,200)] 
self._poly = Polygon() 
for point in self._list: 
    self._poly.addPoint(point) 
+0

前两个是辉煌的。谢谢。我不知道你可以绘制列表中包含的点而不提取点作为单独的参数。 – Manuel

0

只需通过在列表本身,就像这样:

self._list = [Point(200,200),Point(400,200),Point(400,400),Point(200,400)] 
self._poly = Polygon(self._list) 

请注意,您don't need the last point

最后一个点自动连接回第一个以关闭多边形。

+0

这太棒了!谢谢! – Manuel

+0

@MannyKim如果这个(或任何其他)答案可以解决您的问题,请随时[接受它](http://meta.stackexchange.com/a/5235/141962)。谢谢! – phihag

0

我想你想要的是这样的:

self._poly = Polygon(*self._list) 

*解包列表转换参数,并将这些作为单独的函数的自变量。

你也可以传递点本身的列表。

self._poly = Polygon(self._list) 

它也能正常工作。

+0

文档说,你可以传递一个列表*或*作为单独的参数。 – Volatility

+0

糟糕,你是完全正确的。 – phihag

0

如果你要与第4点的多边形:

self._poly =多边形(* self._list [4])

在你的代码创建每次4个多边形与单点。

相关问题