【发布时间】:2017-03-28 05:45:16
【问题描述】:
我是一个非常大的人,并且正在编写代码以通过 python 制作一个随机多边形。 我在代码中找不到任何错误,但我无法打印所有顶点,只能打印一个顶点的一对 x、y 坐标。 有人可以告诉我吗?我认为 map(tuple, verts) 是有问题的。
非常感谢。
import math, random
def generatePolygon( ctrX, ctrY, aveRadius, irregularity, spikeyness, numVerts ) :
irregularity = clip( irregularity, 0,1 ) * 2*math.pi / numVerts
spikeyness = clip( spikeyness, 0,1 ) * aveRadius
# generate n angle steps
angleSteps = []
lower = (2*math.pi / numVerts) - irregularity
upper = (2*math.pi / numVerts) + irregularity
sum = 0
for i in range(numVerts) :
tmp = random.uniform(lower, upper)
angleSteps.append( tmp )
sum = sum + tmp
# normalize the steps so that point 0 and point n+1 are the same
k = sum / (2*math.pi)
for i in range(numVerts) :
angleSteps[i] = angleSteps[i] / k
# now generate the points
points = []
angle = random.uniform(0, 2*math.pi)
for i in range(numVerts) :
r_i = clip( random.gauss(aveRadius, spikeyness), 0, 2*aveRadius )
x = ctrX + r_i*math.cos(angle)
y = ctrY + r_i*math.sin(angle)
points.append(( int(x),int(y) ))
angle = angle + angleSteps[i]
return points
def clip(x, min, max) :
if( min > max ) : return x
elif( x < min ) : return min
elif( x > max ) : return max
else : return x
verts = generatePolygon( ctrX=250, ctrY=250, aveRadius=100, irregularity=0, spikeyness=0, numVerts=16 )
tupVerts = list(map(tuple,verts))
print(tupVerts)
【问题讨论】:
-
问题是您的
return语句在generatePolygone中缩进了太多次。 -
有趣的代码。
list(map(tuple,verts))没有意义:verts已经是一个元组列表。顺便说一句,您不应该使用sum、min或max作为变量名,因为这会影响同名的内置函数。 (我建议改用total、lo和hi)。此外,通常的 Python 约定是对简单的变量名使用 snake_case,而不是 camelCase,请参阅PEP-0008 了解详细信息。
标签: python dictionary tuples polygon