Grille isométrique

Résolu
cs_Aaron Messages postés 116 Date d'inscription lundi 29 juillet 2002 Statut Membre Dernière intervention 19 janvier 2009 - 18 août 2008 à 13:18
cs_Aaron Messages postés 116 Date d'inscription lundi 29 juillet 2002 Statut Membre Dernière intervention 19 janvier 2009 - 18 août 2008 à 16:46
Bonjour,


J'aimerais obtenir la position x : y de la n ième case sur cette petite
grille isométrique. J'ai essayé de passer par une division et le reste
mais cela ne fonctionne pas pour les multiple de 5. J'aimerais éviter
de passer par des if, etc. alors que je pense qu'il y a bien plus
simple.


Voici le code avec lequel j'ai essayé :





$_POST['c']%5!=0 ? $Pos = floor($_POST['c']/5).':'.($_POST['c']%5-1) : $Pos = floor($_POST['c']/5).':'.($_POST['c']%5);   





Merci par avance!

7 réponses

cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
18 août 2008 à 16:24
Dans mon exemple je suis parti a partir de 0 à 24 (cf le schéma que j'ai fait tout à l'heure).
Vu que toi a priori le 5 est à la place 0:4, cela voudrait dire que tu commence ta numérotation de 0 à 25. Dans ce cas il faut bien un replacer $c par $c-1.
Par contre je ne comprends pas pourquoi tu veux utiliser une valeur absolue vu que si c varie entre 1 et 25, c-1 variera entre 0 et 24.
3
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
18 août 2008 à 14:49
Bonjour.
a quoi correspond le $_POST['c'] ?
0
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
18 août 2008 à 15:07
Si 'c' représente la nième case (de 0 à 24) dans le cas d'un grille 5 *5..
$x = floor($_POST["c"] / 5);
$y = $_POST["c"] % 5;
(ou l'inverse en fonction de ta numérotation).

Cdt
0
cs_Aaron Messages postés 116 Date d'inscription lundi 29 juillet 2002 Statut Membre Dernière intervention 19 janvier 2009
18 août 2008 à 15:42
Salut laurent1024,

Le problème est que si $c = 5
$x floor(5/5) 1;$y 5%5 0;

Donc j'obtiens une position : 1:0 et non pas 0:5 :(
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
18 août 2008 à 15:53
C'est normal.
Sur une grille 5 * 5 les numérotation vont de 0:0 a 4:4 (comme sur ton dessin d'ailleurs.
La position 0:5 n'existe pas. Ou alors il s'agit d'une grille 6 * 6.

Pour calculer les x et y je me suis basé sur l'exemple suivant
Tu n'as peut être pas ordonné dans le même ordre que moi, il suffit peut être seulement d'inverser le x et le y.
Avec un grille 5:5
Position
0:0    1:0    2:0    3:0    4:0
0:1    1:1    2:1    3:1    4:1

0:2    1:2    2:2    3:2    4:2

0:3    1:3    2:3    3:3    4:3

0:4    1:4    2:4    3:4    4:4

avec le numéro.
0      5       10     15     20
1      6       11     16     21
2      7       12     17     22
3      8       13     18     23
4      9       14     16     24
0
cs_Aaron Messages postés 116 Date d'inscription lundi 29 juillet 2002 Statut Membre Dernière intervention 19 janvier 2009
18 août 2008 à 16:15
Exact, je me suis trompé pour le 0:5.
J'utilise le même ordre que toi.
Pour la case 1 : x=0, y=0
Pour la case 2 : x=0, y=1

Malheureusement, avec ce script,

$x = floor($c/5);
$y = $c%5;

La case 5 adopte une position de 1:0 et non de 0:4. P-e faudrait-il utiliser :

$x= floor(abs($c-1)/5);
$y= abs($c-1)/5

?
0
cs_Aaron Messages postés 116 Date d'inscription lundi 29 juillet 2002 Statut Membre Dernière intervention 19 janvier 2009
18 août 2008 à 16:46
Oui, tu as raison. Cela fonctionne sans problème.

Merci pour ton aide ! :)
0
Rejoignez-nous