-
Collision en diagonale
Bonjour,
je cherche un algorithme permettant de trouver le nombre de pixels qui sépare deux rectangles par rapport à une diagonale précise.
En fait, je souhaite déterminer de combien de pixels, je peux translater un rectangle dans une direction précise (diagonale) sans qu'il n'entre en collision avec le second.
http://img44.imageshack.us/img44/6158/exemples.png
Avec l'exemple ci dessus en considérant qu'on souhaite déplacer le rectangle du bas selon la diagonale allant vers le haut et la droite, l'algorithme devrait me donner comme résultat 2px.
Merci d'avance pour vos réponses.
-
Pour chaque rectangle tu as 4 données:
Xmin, Xmax, Ymin, Ymax
Commence par exprimer les conditions entre
Xmin1,Xmax1,Ymin1,Ymax1,Xmin2,Xmax2,Ymin2,Ymax2
sous forme d'inégalités pour qu'ils ne se coupent pas (c'est long mais simple)
Donc tu écris un postulat à 8 paramètres à valeur booléen.
Ensuite tu fais une boucle.
Si R1 avance sur une diagonale en montant tu as à chaque tour de boucle un incrément des 4 paramètres de R1.
A chaque step tu appelles le postulat.
-
Tu peux aussi découper le problème en 2 :
- distance pour intersection (horizontale) de deux bandes verticales de hauteur infinie
- distance pour intersection (verticale) de deux bandes horizontales de largeur infinie
- prendre la plus petite distance
-
Je tiens d'abord à remercier les personnes qui m'ont répondu.
Pour trouver la distance en diagonale j'ai cherché les équations qui déterminent la collision des rectangles.
J'ai trouvé :
(xmin1 <= xmin2 <= xmax1 ou
xmin1 <= xmax2 <= xmax1 ou
xmin2 <= xmin1 <= xmax2 ou
xmin2 <= xmax1 <= xmax2)
et
(ymin1 <= ymin2 <= ymax1 ou
ymin1 <= ymax2 <= ymax1 ou
ymin2 <= ymin1 <= ymax2 ou
ymin2 <= ymax1 <= ymax2).
Ensuite j'ai déterminé comment changeaient les xmin, xmax, ymin et ymax en fonction du nombre du décalage.
Et, avec tout ceci je trouve le nb de décalages minimum pour qu'il y ai collision auquel j'enlève un.
Ma démarche vous semble elle correcte ?