21-06-2007, 09:02 PM
Citation :Tu dis que pour toutes les 2 cases parcourues en diagonales, on bouge de 2,1 ou -2,1 ou... etc. Comment le déterminer ? Faut-il faire un test pour chaque case du parcours ? Si oui, le code est effectivement réalisable, mais je vais rencontrer un pb de performance, car il ne s'agit pas d'un mouvement, à faire occasionnelement, mais d'une distance, à analyser (ex: parmi les 150 cases "bistrot", quelle sont les plus proches de Lulu, Gégé et Bebert ?).Dans ce cas je pense qu'on se trompe de codage de l'hexagrillage...
Une simple formule n'est-elle pas envisageable, d'après vous ?
Si c'est juste çà que tu veux faire moi je te propose de representer tes Hexagone par leur centre
Tu t'aperçoit alors que ces centres sont à equidistance de leur voisin (je te propose de choisir une distance d=1 pour simplifier les calculs, ce qui peut etre plus facile pour te permetre de dessiner justement cette carte hexagonale
Ainsi si mon premier Hexagone est au point (a;b)
Les coordonnée de ses voisin sont donné par (a+cos(alpha),b+sin(alpha))
Et alpha est definie ainsi:
hexagone à droite alpha=0
en haut à droite alpha=60°
en haut à gauche alpha=120°
à gauche alpha=180°
à gauche en bas alpha=240°
à droite en bas alpha=300°
Ainsi tu peux creer ta map simplement, une fois cette map creer de cette façon tu peux utiliser la formule toute bete:
Citation :D=sqrt(pow(x2-x1,2)+pow(y2-y1))Pour determiner la distance.
Tu peux ainsi l'utiliser directement dans une requete sql
A noter que la distance ici c'est la distance entre les 2 isocentres des 2 hexagones. Et cette methode est impropre aux problemes des obstacles qui est beaucoup plus complexe.
Voilà si tu veux plus de precision dis-le!