Page 1 sur 1

Rubik's Cube

MessagePublié: 26 Fév 2011 13:07
par projetmbc
Bonjour,
est-ce que quelqu'un parmi vous a deja produit un Rubik's Cube 3D et un autre plan (patron) ?

Je devrais a partir de l'annee prochaine ecrire des mini-documents sur des applications concretes des maths (au depart, ce sera pour moi et ensuite je mettrais cela en ligne).

Re: Rubik's Cube

MessagePublié: 26 Fév 2011 13:54
par Joffrey
Bonjour,
J'ai pondu ça un jour, mais c'est très long pour faire tourner le cube, il doit y avoir moyen d'optimiser le code
Code: Tout sélectionner
TeXgraph#
{version 1.95}
Cmd   [Fenetre(-5+5*i,5-5*i,1+i), Marges(0.5,0.5,0.5,0.5), Border(0)];
   [OriginalCoord(1),IdMatrix()];
   [theta:=0.5236, phi:=1.1345, IdMatrix3D(), ModelView(ortho)];
   [GrayScale(0), ComptGraph:=1];

Mac
    DessinCube = [
   $P:=Parallelep(%1,%2*vecI,%3*vecJ,%4*vecK),
   bdFacet(FacesNum(P,1), [color:=white]),Re(jump)-i,
   bdFacet(FacesNum(P,2), [color:=yellow]),Re(jump)-i,
   bdFacet(FacesNum(P,3), [color:=red]),Re(jump)-i,
   bdFacet(FacesNum(P,4), [color:=orange]),Re(jump)-i,
   bdFacet(FacesNum(P,5), [color:=blue]),Re(jump)-i,
   bdFacet(FacesNum(P,6), [color:=forestgreen]),Re(jump)-i,
   bdLine(Aretes(P),[tube:=1, color:=black]),Re(jump)-i
   ];

Cmd   [DotScale:=1+i];
Graph objet1 = [
   view(-5,5,-5,5),
   backcolor:=dimgray,
   Build3D(
   for I from 0 to 2 do
         for J from 0 to 2 do
               for K from 0 to 2 do
                     DessinCube(I*vecI+J*vecJ+K*vecK,1,1,1),
               od,
         od,
   od,
   //DessinCube(Origin,1,1,1),
   ),
   Display3D()
   ];

Re: Rubik's Cube

MessagePublié: 26 Fév 2011 15:24
par P.Fradin
Bonjour,

Une autre approche, plus rapide: faire un seul cube avec les traits en surface!

Code: Tout sélectionner
[
view(-3,3,-3,3), view3D(-3,3,-3,3,-3,3),Marges(0,0,0,0),size(9),
background(full,dimgray),
d:=3, O:=M(-d,-d,-d)/2,
F1:=[O,O+M(0,0,d),O+M(0,d,d), O+M(0,d,0),jump],
F2:=shift3d( reverse3d(F1), M(d,0,0)),
F3:=[O,O+M(d,0,0),O+M(d,0,d), O+M(0,0,d),jump],
F4:=shift3d(reverse3d(F3),M(0,d,0)),
F5:=[O,O+M(0,d,0),O+M(d,d,0), O+M(d,0,0),jump],
F6:=shift3d(reverse3d(F5),M(0,0,d)),
NewMac("options","[color:=%1, contrast:=0]"),
Build3D(
        bdFacet(F1, options(blue)),
        bdFacet(F2, options(green)),
        bdFacet(F3, options(red)),
        bdFacet(F4, options(orange)),
        bdFacet(F5, options(whitesmoke)),
        bdFacet(F6, options(yellow)),
        for L in [F1,shift3d(F1,M(d/3,0,0)),shift3d(F1,M(2*d/3,0,0)),F2,
                 F3,shift3d(F3,M(0,d/3,0)),shift3d(F3,M(0,2*d/3,0)),F4,
                 F5,shift3d(F5,M(0,0,d/3)),shift3d(F5,M(0,0,2*d/3)),F6]
        By jump do
           bdLine(L,[color:=black, width:=6, close:=1]), sep3D
        od
        ),
Display3D()
]

Vue JavaView:

Re: Rubik's Cube

MessagePublié: 27 Fév 2011 11:23
par projetmbc
Bonjour,
merci pour les deux solutions.

La 1ere a l'avantage de permettre de dessiner un Rubik's cube "melange" ou meme "eclate".

Deux petites questions.
  1. Je voudrais afficher un nom pour chaque face du type R_1 par exemple pour une case rouge. J'aimerais aue le nom apparaisse en 3D. Que faut-il utiliser ?
  2. Peut-on en 3D dessiner un carre par dessus un cube ?

PS : je n'ai pas mon ordi. sous la main.

Re: Rubik's Cube

MessagePublié: 27 Fév 2011 11:57
par P.Fradin
Pour faire apparaitre les labels en 3D, on peut faire ainsi:
Code: Tout sélectionner
[
view(-3,3,-3,3), view3D(-3,3,-3,3,-3,3),Marges(0,0,0,0),size(9),
background(full,dimgray),
d:=3, O:=M(-d,-d,-d)/2,
F1:=[O,O+M(0,0,d),O+M(0,d,d), O+M(0,d,0),jump],
F2:=shift3d( reverse3d(F1), M(d,0,0)),
F3:=[O,O+M(d,0,0),O+M(d,0,d), O+M(0,0,d),jump],
F4:=shift3d(reverse3d(F3),M(0,d,0)),
F5:=[O,O+M(0,d,0),O+M(d,d,0), O+M(d,0,0),jump],
F6:=shift3d(reverse3d(F5),M(0,0,d)),
NewMac("options","[color:=%1, contrast:=0]"),
Build3D(
        bdFacet(F1, options(blue)),
        bdFacet(F2, options(green)),
        bdFacet(F3, options(red)),
        bdFacet(F4, options(orange)),
        bdFacet(F5, options(whitesmoke)),
        bdFacet(F6, options(yellow)),
        for L in [F1,shift3d(F1,M(d/3,0,0)),shift3d(F1,M(2*d/3,0,0)),F2,
                 F3,shift3d(F3,M(0,d/3,0)),shift3d(F3,M(0,2*d/3,0)),F4,
                 F5,shift3d(F5,M(0,0,d/3)),shift3d(F5,M(0,0,2*d/3)),F6]
        By jump do
           bdLine(L,[color:=black, width:=6, close:=1]), sep3D
        od,
        for j from 0 to 2 do
            for k from 0 to 2 do
                bdLabel( M((j-1)*d/3, -d/2, (k-1)*d/3), "R_1",
                         [TeXify:=1, labeldir:=[vecI,vecK]]), sep3D
            od
        od,

        ),
Display3D()
]

rubiksCube.png
rubiksCube.png (20.42 Kio) Consulté 13536 fois


Pour ta deuxième question, le plus simple est de ne dessiner que des carrés! Cela n'empêche pas d'ailleurs de représenter le cube en position "mélangée", je me demande même si on ne pourrait faire carrément le jeu du rubick's cube dans l'interface graphique de TeXgraph, avec un bouton pour chaque manœuvre possible, je vais y réfléchir...

Re: Rubik's Cube

MessagePublié: 27 Fév 2011 12:24
par projetmbc
Merci pour les labels, c'est ce que je cherchais.

Sinon pour les carres, je vais les utiliser pour faire tourner en "vrai' les cubes dont les faces 'interieures" sont noires. Si je suis assez motive je representerais l'une des methodes de resolution pas a pas.

P.Fradin a écrit:...je me demande même si on ne pourrait faire carrément le jeu du rubick's cube dans l'interface graphique de TeXgraph, avec un bouton pour chaque manœuvre possible, je vais y réfléchir...

En manipulant l'applet, je me suis dit qu'un clic droit sur une tranche permettrait de la manipuler pour la faire tourner.

Avec des touches, on pourrait faire comme suit :
  • On garde les fleches pour faire tourner et observer le cube.
  • CTRL + Fleches Verticales pour selectionner une tranche horizontale.
  • CTRL + Fleches Horizontales pour faire tourner la tranche horizontale selectionnee.
  • ALT + Fleches Horizontales pour selectionner une tranche verticale.
  • ALT + Fleches Verticales pour faire tourner la tranche verticale selectionnee.

Re: Rubik's Cube

MessagePublié: 27 Fév 2011 12:59
par Joffrey
Bonjour,

Pour ta deuxième question, le plus simple est de ne dessiner que des carrés! Cela n'empêche pas d'ailleurs de représenter le cube en position "mélangée", je me demande même si on ne pourrait faire carrément le jeu du rubick's cube dans l'interface graphique de TeXgraph, avec un bouton pour chaque manœuvre possible, je vais y réfléchir...

C'est bien ce que j'avais en tête mais j'avais laissé tombé par manque de temps

Re: Rubik's Cube

MessagePublié: 27 Fév 2011 17:21
par P.Fradin
Voilà de quoi jouer au rubik's cube dans TeXgraph!
rubiks_Cube.teg
(7.83 Kio) Téléchargé 795 fois

Un aperçu:
rubiksCube2.png
rubiksCube2.png (21.67 Kio) Consulté 13512 fois

Les opérations se font par l'intermédiaire de boutons, elles sont représentées sous la forme: axe (Ox, Oy ou Oz), tranche (1 ou 2 ou 3) et sens (+1 ou -1), le petit repère dessiné en bas à gauche permet de s'y retrouver.

Re: Rubik's Cube

MessagePublié: 27 Fév 2011 18:00
par Joffrey
Belle performance pour le 1000\ieme message !!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Re: Rubik's Cube

MessagePublié: 27 Fév 2011 21:53
par Alphonse Capriani
Très bonne remarque joffrey!!

Par contre, elle sera complètement hors de propos quand Patrick va nous répondre... J'aurais quand même été témoin grâce à toi de ce fait marquant de l'histoire de TeXgraph...

Image

Re: Rubik's Cube

MessagePublié: 27 Fév 2011 22:18
par P.Fradin
Alphonse Capriani a écrit:Très bonne remarque joffrey!!

Par contre, elle sera complètement hors de propos quand Patrick va nous répondre...


Mais non, mais non... Ah! Tiens! 1001...

Re: Rubik's Cube

MessagePublié: 28 Fév 2011 13:01
par P.Fradin
J'ai modifié le programme pour avoir en même temps la vue avant et la vue arrière du cube:
rubiks_CubeBis.teg
(11.87 Kio) Téléchargé 790 fois


rubiks_CubeBis.png
rubiks_CubeBis.png (22.35 Kio) Consulté 13450 fois


[Edit]Le fichier a été mis à jour, l'ancien ne fonctionnait que pour la version 1.96.