J'essaie de trouver un algorithme pour construire une grille, basée sur le nombre de pixels et les pixels environnants. Par exemple, disons que j'ai 200 pixels aléatoires. J'ai un pixel a, et je peux obtenir des références à chaque pixel qui l'entoure. Cela est vrai pour tous les pixels. En substance, chaque pixel est une pièce de puzzle, et chaque pièce a une référence à tous ses voisins. Comment ne creat Programmatically la grille de pixels (le puzzle fini) étant donné que les informationsComment créer par programmation une grille de pixels en ne donnant que les pixels voisins
0
A
Répondre
0
En supposant que votre
- entrée est une liste de pixels et chaque pixel possède les attributs
top
,left
,bottom
etright
(références aux pixels environnants) et votre - sortie sera un tableau 2D
grid
de pixels,
vous pouvez faire comme suit:
def pixel_graph_to_grid(pixels):
if len(pixels) == 0:
return [[]]
# (1) Finding the top left pixel.
p = pixels[0]
while p.top:
p = p.top
while p.left:
p = p.left
# (2) Go row-wise through the image.
grid = []
first_of_row = p
while True:
p = first_of_row
row = [p]
while p.right:
p = p.right
row.append(p)
grid.append(row)
if first_of_row.bottom:
first_of_row = first_of_row.bottom
else:
break
Vous pouvez aussi faire un peu de comptage similaire à (1)
savoir la quantité de mémoire que vous avez à allouer à la grille.
Cet algorithme a un temps d'exécution linéaire et nécessite un espace supplémentaire constant, il devrait donc être optimal.
Les références sont-elles commandées de quelque façon que ce soit? Une pièce de puzzle ne vous dit pas seulement à quoi elle se connecte, mais dans quel ordre. Ce qui rendrait relativement facile la construction de la limite extérieure et ensuite le travail vers l'intérieur. – Tommy
En fait non, il n'y a pas de limites finies, juste un tableau d'objets (pixels) qui contiennent un ID, et 4 références à d'autres pixels, un dans chaque direction – user379468
Pouvez-vous expliquer ce que "chaque pixel est un morceau de puzzle"? – cuongptnk