07-05-2013, 02:41 PM
Alors ton problème est mathématique: il te faut détecter si un point [x;y] est dans un losange.
Supposons que le carré fasse [2*u;2*v] de cotés (u demi-longueur horizontale, v demi-longueur verticale), et qu'il soit centré en [X;Y].
Le point de clic est [x;y].
On pose [a;b] = ([x;y]-[X;Y])/([u;v]), c'est à dire que [a;b] ont les coordonnées du point dans le repère "réaligné" (centré, renormé) sur le carré.
Alors le clic est dans le losange si et seulement si:
avec |x| la valeur absolue de x.
Si le clic est dans le carré, tu fais ce que tu veux sur la case; sinon, tu fais remonter l'évènement à un autre carré, et ainsi de suite.
Supposons que le carré fasse [2*u;2*v] de cotés (u demi-longueur horizontale, v demi-longueur verticale), et qu'il soit centré en [X;Y].
Le point de clic est [x;y].
On pose [a;b] = ([x;y]-[X;Y])/([u;v]), c'est à dire que [a;b] ont les coordonnées du point dans le repère "réaligné" (centré, renormé) sur le carré.
Alors le clic est dans le losange si et seulement si:
Code :
|a+b| < 1 and |a-b| < 1
avec |x| la valeur absolue de x.
Si le clic est dans le carré, tu fais ce que tu veux sur la case; sinon, tu fais remonter l'évènement à un autre carré, et ainsi de suite.