0
私は非常にビッグナーであり、Pythonでランダムなポリゴンを作るためのコードを作っています。 コード内にエラーは見つかりませんが、すべての頂点を印刷することはできませんが、1つの頂点のx、y座標のペアだけを印刷します。 誰かに教えてもらえますか?私はmap(tuple、verts)は何らかの副徴候だと思います。Pythonを使ってランダムなポリゴンを作成する
ありがとうございました。
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)
問題は、 'generatePolygone'であまりにも多くインデントされた' return'ステートメントです。 – Julien
興味深いコード。 'list(map(tuple、verts))'を実行しても意味がありません: 'verts'はすでにタプルのリストです。ところで、変数名として 'sum'、' min'、 'max'を使うべきではありません。なぜなら、それらは同じ名前の組み込み関数を陰にするからです。 (代わりに 'total'、' lo'と 'hi'を使うことをお勧めします)。また、通常のPythonの規約では、camelCaseではなく単純な変数名にsnake_caseを使用しています。詳しくは、[PEP-0008](https://www.python.org/dev/peps/pep-0008/)を参照してください。 –