DeletedUser
Guest
J'ai une suggestion pour le script pour renommer les villages.
Celui-ci permet actuellement de renommer en fonction de la distance d'un village, mais cette fonction est surtout utile lorsque le nombre de villages est faible. Lorsque l'on a beaucoup de villages il est peu probable d'avoir un village privilégié pouvant servir de référence.
C'est pourquoi je propose de générer des indices en fonction de la position sur une Courbe de Hilbert (ou toute autre courbe de remplissage).
L'idée c'est de recouvrir le monde d'une telle courbe et de générer pour chaque village un numéro correspondant à la position sur la courbe.
Deux villages proches auront tendance à avoir des indices proches.
Voici le code javascript permettant de calculer l'indice selon les coordonnées:
Exemple:
Cette methode permet de remarquer que 499|499 est plus proche de 500|500 que ne l'est 507|497 (un tri simple aurait seulement vu que 500|500 et 507|497 commencent tout deux par '50' et les auraient placé proche).
On voit aussi que 499|499 et 499|300 sont éloignés malgré la première coordonnée identique.
La méthode a évidemment ses limites:
Ces deux points sont de part et d'autre de la ligne blanche verticale que l'on voit au centre de l'image de la courbe de Hilbert. Ils sont certes proches physiquement mais il y a un long chemin à suivre sur la courbe pour passer de l'un à l'autre.
Celui-ci permet actuellement de renommer en fonction de la distance d'un village, mais cette fonction est surtout utile lorsque le nombre de villages est faible. Lorsque l'on a beaucoup de villages il est peu probable d'avoir un village privilégié pouvant servir de référence.
C'est pourquoi je propose de générer des indices en fonction de la position sur une Courbe de Hilbert (ou toute autre courbe de remplissage).
L'idée c'est de recouvrir le monde d'une telle courbe et de générer pour chaque village un numéro correspondant à la position sur la courbe.
Deux villages proches auront tendance à avoir des indices proches.
Voici le code javascript permettant de calculer l'indice selon les coordonnées:
Exemple:
Coordonnée | Indice |
---|---|
500,500 | 174624 |
499,499 | 174602 |
507,497 | 174668 |
499,300 | 154101 |
0,0 | 0 |
999,999 | 698410 |
On voit aussi que 499|499 et 499|300 sont éloignés malgré la première coordonnée identique.
La méthode a évidemment ses limites:
Coordonnée | Indice |
---|---|
511,500 | 174693 |
513,500 | 873883 |
Dernière édition par un modérateur: