Mise à jour
La première version de cette solution calculée géométrique (euclidienne) distances lorsque le questian appelé Manhattan distances
Cela rend plus simple à optimiser.
Pour chaque groupe de pixels choisissent un pixel comme pixel primaire. Peu importe lequel.
Pour chaque autre pixel du groupe, calculez son décalage (x et y) à partir du pixel primaire. Contrairement à une distance de Manhattan, gardez le signe de ce décalage.
Somme tous les offsets (décalages x et y) dans un seul nombre, appelez cette total_offsets.
Lorsque vous avez besoin de la distance d'un pixel spécifié, calculez la distance (Manhattan) pour le pixel primaire. Multipliez ceci par le nombre de pixels et ajoutez les total_offsets pour obtenir la distance totale de Manhattan.
Les étapes 1 à 3 doivent seulement être effectuées une fois pour chaque groupe, puis l'étape 4 peut être effectuée selon les besoins.
par exemple.
Area A consists of 4 pixels: (8, 8), (8, 9), (9, 8) and (9, 9).
Declare (8, 9) as primary pixel. Offsets are
(8, 9) --> (8, 8) = (0, -1)
(8, 9) --> (9, 8) = (1, -1)
(8, 9) --> (9, 9) = (1, 0)
total_offset = 0 + -1 + 1 + -1 + 1 + 0
= 0
num_pixels = 4
To compute Manhattan distance from pixel (2, 4)
distance to primary pixel
(2, 4) --> (8, 9) = (6, 5)
= 11
dist * num_pixels + total_offsets = 11 * 4 + 0
= 44
Pour vérifier cela, nous pouvons le calculer le long chemin:
(2, 4) --> (8, 8) = (6, 4)
(2, 4) --> (8, 9) = (6, 5)
(2, 4) --> (9, 8) = (7, 4)
(2, 4) --> (9, 9) = (7, 5)
distance = 6 + 4 + 6 + 5 + 7 + 4 + 7 + 5
= 44
Qu'avez-vous essayé? – quarkdown27
Je cherche un algorithme efficace pour le faire peut-être quelque chose de mieux que l'approche naïve – Yakov
ah ok désolé j'ai mal interprété la question :) – quarkdown27