Je suis un très gros et je fais un code pour faire un polygone aléatoire par python. Je ne trouve aucune erreur dans le code mais je ne peux pas imprimer tous les sommets mais seulement imprimer une paire de coordonnées x, y d'un sommet. Quelqu'un pourrait-il me le faire savoir? Je pense que la carte (tuple, verts) est quelque chose de problématique.Faire des polygones aléatoires en utilisant python
Merci beaucoup.
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)
Le problème est votre instruction 'return' qui est indentée un trop grand nombre de fois dans' generatePolygone'. – Julien
Code intéressant. Il ne sert à rien de faire 'list (map (tuple, verts))': 'verts' est déjà une liste de tuples. BTW, vous ne devriez pas utiliser 'sum',' min' ou 'max' comme noms de variables parce que cela occulte les fonctions intégrées des mêmes noms. (Je suggère d'utiliser 'total',' lo' et 'hi' à la place). En outre, la convention habituelle de Python est d'utiliser snake_case pour les noms de variables simples, pas camelCase, veuillez consulter [PEP-0008] (https://www.python.org/dev/peps/pep-0008/) pour plus de détails. –