26-03-2014, 10:31 AM
(Modification du message : 26-03-2014, 12:18 PM par Thêta Tau Tau.)
Il faut prendre en compte qu'un point peux avoir différentes abscisses et ordonnées, par exemple x, x-width ou x+width. Il faut donc choisir celle qu'on veux.
On va prendre l'exemple du calcul de distance :
On peux aussi utiliser un algorithme A* de la même façon qu'avec une carte rectangle, juste en prenant en compte que "les bords se touchent".
On va prendre l'exemple du calcul de distance :
def distance(xa, ya, xb, yb, width, height):
xb_possibles = [xb-width, xb, xb+width]
yb_possibles = [yb-height, yb, yb+height]
dist_xa_xb_possible = [abs(xbp - xa) for xbp in xb_possibles]
dist_ya_yb_possible = [abs(ybp - ya) for ybp in yb_possibles]
#On prends le "xb_possible" le plus proche de xa
xb_bis = xb_possibles[dist_xa_xb_possible.index(min(dist_xa_xb_possible))]
#Meme chose pour les y
yb_bis = yb_possibles[dist_ya_yb_possible.index(min(dist_ya_yb_possible))]
#Ensuite on utilise xb_bis et yb_bis comme on ferait sur une carte rectangle.
#La seule difference c'est qu'on peux avoir des valeurs de x ou y negatives ou
#superieures a widht/height donc si on veut recuperer des coordonees il faut
#faire un modulo width/height
#Calcul classique d'une distance avec Pythagore, juste pour l'exemple
return ( (xa-xb_bis)**2 + (ya-yb_bis)**2 )**0.5
On peux aussi utiliser un algorithme A* de la même façon qu'avec une carte rectangle, juste en prenant en compte que "les bords se touchent".