Partage
  • Partager sur Facebook
  • Partager sur Twitter

Comment stocker les informations d'un rubik's cube

    16 janvier 2018 à 20:43:11

    Alors voila le problème je ne sais pas vraiment comment stocker quelle couleur se situe où sur le cube, de façon à ce que je puisse modifier pour simuler un rotation d'un face. Class, dict, list de list,...?

    Merci

    • Partager sur Facebook
    • Partager sur Twitter
      19 janvier 2018 à 18:53:34

      Bonsoir,

      Dans une grande majorité de cas, pour des structures complexe (comme un Rubiks), l'on préférera utiliser une classe (c'est-à-dire un objet car Python est orienté objets). D'autant plus que cela te seras indispensable si tu veux effectuer des manipulations, comme les rotations eg.

      Lis des tutos sur la POO, la simplicité d'utilisation te sauteras aux yeux...

      :magicien:

      • Partager sur Facebook
      • Partager sur Twitter
        20 janvier 2018 à 16:44:12

        Salut,

        Pour en ajouter,

        Un cube possède 6 faces, donc 6 couleurs.

        Dans chaque face, il y a 3x3 = 9 petits cube de couleur.

        Chaque côté pourrait être une liste dans une liste, contenant les couleurs, soit par lettre ou par chiffre. (1,2,3,4,5,6 ou 'A', 'B', 'C', 'D', 'E', 'F')

        De plus, pour des opérations, ces listes pourront être des arrays. (Si vous le voulez/pouvez)

        1 = 'Jaune

        '2 = 'Vert'

        coter_A = [
            [1,1,1],
            [1,1,1],
            [1,1,1],
        ]
        coter_B = [
            [2,2,2],
            [2,2,2],
            [2,2,2],
        ]
        coter_C = [[...]]
        coter_D = [[...]]
        coter_E = [[...]]
        coter_F = [[...]]

        Ces listes pourront être dans une classe.... (Ou bien, chaque liste est une classe.. peu importe)

        Donc, je dirais un mélange de Classes et de Listes dans une Liste...

        Bonne chance

        A+

        • Partager sur Facebook
        • Partager sur Twitter
          22 janvier 2018 à 21:50:39

          Bonjour,

          Personnellement, je m'orienterai sur une matrice 3x3x6 (largeur, hauteur, face).

          Pourquoi ca ? Bah imagine que tu veuille faire une rotation de la face droite (bon imagines aussi que tu ne tourne jamais le cube par rapport à la caméra hein :D)

          Cela peut se faire "assez" simplement. Deja tu as ta face de droite, il faut juste faire une rotation de la matrice (https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.rot90.html). Maintenant, pour les colonnes qui tournent, il te suffit de faire un mapping de la derniere colonne uniquement soit qqch comme :

          temp = cube[:, -1, face_avant]
          cube[:, -1, face_avant] = cube[:, -1, face_bas]
          cube[:, -1, face_bas] = cube[:, -1, face_arriere]
          cube[:, -1, face_arriere] = cube[:, -1, face_haut]
          cube[:, -1, face_haut] = temp
          Par contre lors que tu crées tes faces dans la matrice, fais bien gaffe a faire un mirroir avec la face arriere car sinon ce sera inversé je crois... Bref c'est chiant initialement à debugger mais ça devient vite assez simple a implémenter avec numpy
          Enjoy !

          -
          Edité par coni63 22 janvier 2018 à 21:51:59

          • Partager sur Facebook
          • Partager sur Twitter
            18 février 2018 à 17:30:27

            @coni63 Très bonne idée mais la matrice serait un objet matrice ? si oui je n'en ai encore jamais fait avec python, quel module devrais-je utiliser ? ou alors le faire moi même. Ou bien alors une liste de liste de liste ?
            • Partager sur Facebook
            • Partager sur Twitter
              18 février 2018 à 17:46:02

              Bonjour,

              La librairie a utiliser est numpy. Ton cube serait juste une tenseur de dimensions (3, 3, 6). Il y a un peu de travail pour comprendre comment manipuler les elements mais au final c'est assez simple. Tu peux commencer par créer une liste de liste ou alors directement un cube:

              cube = np.zeros(shape=(3,3,6), dtype=np.uint8)
              cube[:, :, 0] = 0
              cube[:, :, 1] = 1
              cube[:, :, 2] = 2
              cube[:, :, 3] = 3
              cube[:, :, 4] = 4
              cube[:, :, 5] = 5

              Apres a toi de mapper la couleur au chiffre mais évite d'utiliser numpy avec autre chose que des chiffres (ca marche mais tu as l'avantage d'avoir la matrice complète juste en faisant print(cube)).

              -
              Edité par coni63 18 février 2018 à 17:47:06

              • Partager sur Facebook
              • Partager sur Twitter

              Comment stocker les informations d'un rubik's cube

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown