Modélisation d'un rubik's cube

Discutez d'informatique ici !
Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

Modélisation d'un rubik's cube

par fatal_error » 03 Sep 2010, 23:48

Bonjour à tous.

Allez, ce problème il est pour vous, mais si vous trouvez, ca m'aidera aussi. :id:
Le concept est très simple, il s'agit de faire un rubik's cube.

Bon, jvais pas vous demander ca. Ma question est plus précise, mais suffisamment large pour que vous ayiez le choix de la methode.
La voici : comment représenter le cube, de manière à pouvoir automatiser son comportement quelquesoit la face que l'on tourne.

Actuellement, je procède ainsi : le cube est composé de 26 petits cubes (8 sommets, 12 aretes, et 6 centres). Le cube est composé de 6 faces, et grossièrement, deux faces adjacentes partagent un même cube (un pointeur dira-t-on( respectivement trois cubes) ).
Jusque là conceptuellement tout va bien. Mais c'est après que ca chie. Lorsque l'on veut tourner le coté gauche du cube (peu importe le sens), nous appliquons une rotation de la face gauche, et les cubes avant la rotation ont pris la position d'autres cubes! Il s'agit alors de mettre à jour les pointeurs des faces (sinon en tournant la face de derrière, nous ne bougerions pas les bons cubes!) qui partageaient les cubes substitués.

Donc ici, un problème. Clairement le premier est la duplication de donnée, avec le cube partagé entre deux faces.

Deuxième problème : Lors de la numérotation des cubes, je procède ainsi. Un cube en bas a gauche, en bas au milieu, en bas a droite, milieu a gauche, centre, milieu a droite, haut gauche, haut milieu, haut droit.
je fais ca pour chaque face, en tournant le cube suivant z, pis pour les faces du dessus ou du dessous, je numérote en tournant suivant y.
Le problème, c'est que c'est pas du tout automatique, puisque si on rotate tout le cube suivant z mettons d'un quart de tour, alors on accede pas au même cube en accedant avec bas gauche pour la face du dessus que avant la rotation.

Sauriez-vous trouver un moyen de représentation permettant de s'affranchir de l'état d'un cube et de pouvoir rester relatif? (cad ne pas avoir à mettre à jour les "pointeurs" du cube, et si c'est le cas, que le traitement soit le même quelque soit la face qu'on tourne). De même, trouver un moyen de représentation permettant de pouvoir manipuler l'entourage relativement et non de manière absolue (bas gauche, etc)?

A vos cerveaux

Evidemment, on s'en sort, mais ca n'a rien de joli.
C'est aussi une occasion d'utiliser ses neurones pour qqch de concret!

ok, c'est qu'un pov rubik's cube :id:

Pour info, c'est pour tester la balise canvas du html5. Ce sera une belle occasion pour le getContext('3d') qui a l'air plutot sexy. M'enfin au pire une projo c'est pas la mort mais bon canvas quand tu nous tiens :zen:
la vie est une fête :)



Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

par fatal_error » 04 Sep 2010, 00:22

bon, ben en fait je pense avoir trouvé une solution viable.

On extend cette idée de pointeur directement sur la face.
A savoir qu'une face est en relation avec des faces adjacentes.
Pis lorsqu'on bouge une face, on met a jour toutes ces faces adjacentes, indifférement de la face que l'on manipule.
la vie est une fête :)

windows7
Membre Rationnel
Messages: 548
Enregistré le: 18 Juin 2010, 12:00

par windows7 » 04 Sep 2010, 09:59

salut

tu as essayer de traiter ca en voyant le rubikub comme un objet mathematique et les rotation comme des actions sur cet objet ?

ca s'implifirais enormement le truc

MacManus
Membre Irrationnel
Messages: 1365
Enregistré le: 28 Avr 2008, 15:41

par MacManus » 04 Sep 2010, 12:49

Bonjour

Windows7 n'a pas tort. Un de mes profs m'avait montré comment résoudre ce problème à l'aide de permutations,de conjugués etc. et ce quelque soit la configuration dans laquelle on se trouve. Il m'avait parlé de suites exactes, de produits semi-directs....mais bon je ne me souviens pas de l'intérêt (même s'il y en a un) et puis c'est pas si simple ^^

Je reviendrai avec des explications (mathématiques) plus claires la prochaine fois...

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

par fatal_error » 04 Sep 2010, 16:21

edit: j'ai trouvé encore mieux :D

Chaque face est désormais constituée d'un pointeur et non d'un cube. De fait pour un "cube partagé", on met un pointeur partagé, et lors de la transformation d'une face, la substitution d'un cube par un autre est faite via le pointeur et du coup, il n'y a pas besoin de mettre les autres faces à jour.

Par ailleurs, si on n'accepte pas les "efforts tranchants" (tourner la face du milieu), alors on peut numéroter la face de 0 à 7 (sans numéroter le centre) en tournant le long des bords, et on automatise alors la substitution
(qqch du style pour tout les i,cube_i = cube_{i+2})

:happy2:
la vie est une fête :)

Mathusalem
Membre Irrationnel
Messages: 1837
Enregistré le: 14 Sep 2008, 04:41

par Mathusalem » 05 Sep 2010, 13:56

Salut fatal_.
J'ai pas monstre réfléchis au problème, mais :
Quel est le problème de faire une matrice cubique et programmer les 9 rotations possibles ? C'est pas joli mais ça devrait fonctionner, non ?

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

par fatal_error » 05 Sep 2010, 14:42

oui, c'est la même chose que cque je disais avec mes pointeurs.

Puis pour les actions, on peut simplifier le probleme, en remarquant que les rotations sont soit suivant x,y ou z et sont antysymetriques 2 à 2 (genre face gauche/droite)
la vie est une fête :)

 

Retourner vers ϟ Informatique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 3 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite