FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Logiciel de planétarium.
Projet d'un Rubik's cube en 3D - Page 7 Emptypar Pedro Aujourd'hui à 8:08

» Un autre pense-bête...
Projet d'un Rubik's cube en 3D - Page 7 Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
Projet d'un Rubik's cube en 3D - Page 7 Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
Projet d'un Rubik's cube en 3D - Page 7 Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
Projet d'un Rubik's cube en 3D - Page 7 Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
Projet d'un Rubik's cube en 3D - Page 7 Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
Projet d'un Rubik's cube en 3D - Page 7 Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
Projet d'un Rubik's cube en 3D - Page 7 Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
Projet d'un Rubik's cube en 3D - Page 7 Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
Projet d'un Rubik's cube en 3D - Page 7 Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
Projet d'un Rubik's cube en 3D - Page 7 Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
Projet d'un Rubik's cube en 3D - Page 7 Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
Projet d'un Rubik's cube en 3D - Page 7 Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
Projet d'un Rubik's cube en 3D - Page 7 Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
Projet d'un Rubik's cube en 3D - Page 7 Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
Le deal à ne pas rater :
SSD interne Crucial BX500 2,5″ SATA – 500 Go à 29,99€
29.99 €
Voir le deal

 

 Projet d'un Rubik's cube en 3D

Aller en bas 
+7
mindstorm
Jack
Jean Claude
silverman
Marc
jjn4
Minibug
11 participants
Aller à la page : Précédent  1, 2, 3, 4, 5, 6, 7, 8, 9  Suivant
AuteurMessage
papydall

papydall


Nombre de messages : 7017
Age : 74
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Projet d'un Rubik's cube en 3D - Page 7 Empty
MessageSujet: Re: Projet d'un Rubik's cube en 3D   Projet d'un Rubik's cube en 3D - Page 7 EmptyJeu 20 Oct 2022 - 18:21

@ Tous les contributeurs
Les centres de 6 faces du rubik's cube sont fixes.
Quelque soit les rotations faites sur le rubik's cube les centres ne bougent jamais et elles indiquent la couleur de chaque face.
La methode de faire des rotations sur les faces en tenant  compte de leur couleur ne sera pas apte pour la résolution du rubik's cube.
En effet les algorithmes de résolution utilisent les méthodes de faire pivoter les faces, abstraction faite de leurs couleurs.
Ils indiquent comment tenir le rubik's cube dans les mains et l'algorithme à appliquer à cette étape.
Pour cela, on a donné des noms à chaque faces du rubik's cube en tenant compte uniquement de leur position et non de leur couleur.

Nomenclature des 6 faces :

R (Right) : tourner la face de droite
U (Up)    : tourner la face du haut
L (Left)  : tourner la face de gauche
D (Down)  : tourner la face du bas
F (Front) : tourner la face de devant
B (Back)  : tourner la face arrière

Chacune de ces lettres indique de tourner d'un quart de tour dans le sens des aiguilles d'une montre.
Pour tourner dans l'autre sens (le sens anti-horaire), on ajoute le caractère (') prime.
Par exemple :
F : veut dire tourner la face devant vous de 1/4 de tour dans le sens horaire
L' : veut dire tourner la face gauche de 1/4 de tour dans le sens anti-horaire

Pour les couronnes du milieu (qui sont au nombre de 3), il y a bien une nomenclature pour les faire tourner; mais la majorité des algorithme pour débutants ne les utilisent pas.

Nous avont donc 6 faces à faire tourner soit dans un sens, soit dans un autre, ça fait tout juste 6 + 6 notations.
R U L D F B et R' U' L' D' F' B'.

Si on désire faire tourner la face de 1/2 tour, on ajoute un 2 à chaque mouvement, peu importe le sens de rotation, puisque faire un demi-tour à droite ou à gauche ça revient au même.
Exemple :
U2 veut dire faire tourner la face du haut (Up) d'un demi-tour.

En plus de ces notations, il existe d'autres symboles pour décrire complètement les rotations du cube
Comme il s’agit d’un objet 3 dimensionnel et qu’on a besoin d’une représentation spatiale de ces trois dimensions, ces nouvelles notations sont les axes X, Y et Z.
X : Rotation du cube vers la face droite
Y : Rotation du cube vers la face haute
Z : Rotation du cube vers la face avant

Methode de résolution
Le cube peut être résolu avec une approche étape par étape en utilisant très peu d'algorithmes.
Un algorithme est donc une séquence de mouvements exécutés sur le Rubik's cube.
Un mouvement est la rotation de l’une des six faces, d'un quart de tour ou d'un demi-tour.

Pour la résolution du rubik's cube, visitez ces sites :
https://fr.acervolima.com/algorithme-pour-resoudre-le-rubik-s-cube/
https://urbania.ca/article/comment-resoudre-facilement-un-cube-rubik
https://thecube.guru/fr/resolution-rubiks-cube/
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Marc

Marc


Nombre de messages : 2466
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Projet d'un Rubik's cube en 3D - Page 7 Empty
MessageSujet: Re: Projet d'un Rubik's cube en 3D   Projet d'un Rubik's cube en 3D - Page 7 EmptyJeu 20 Oct 2022 - 18:28

@Silverman

J’ai effectué des tests sur ton dernier moteur pour le Rubik’s Cube.

Félicitations ! Il fonctionne très bien. cheers

En plus, tu as déjà intégré toutes les procédures nécessaires pour créer un jeu complet.

Il n’y a plus qu’à lui greffer une interface utilisateur et le tour est joué !
Ce sera fait dans la soirée avec mon interface simplifiée.


Revenir en haut Aller en bas
mindstorm

mindstorm


Nombre de messages : 685
Age : 55
Localisation : charente
Date d'inscription : 13/02/2013

Projet d'un Rubik's cube en 3D - Page 7 Empty
MessageSujet: Re: Projet d'un Rubik's cube en 3D   Projet d'un Rubik's cube en 3D - Page 7 EmptyJeu 20 Oct 2022 - 19:16

silvermann a écrit:
donc il doit y avoir des couronnes qui ne sont pas actionnées, celles du centre apparement. c'est bien ça ?
Regarde bien ton cube.....
si tu tourne les faces des deux cotés......je te laisse réfléchir Basketball
Revenir en haut Aller en bas
Marc

Marc


Nombre de messages : 2466
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Projet d'un Rubik's cube en 3D - Page 7 Empty
MessageSujet: Re: Projet d'un Rubik's cube en 3D   Projet d'un Rubik's cube en 3D - Page 7 EmptyJeu 20 Oct 2022 - 19:21

J’ai intégré le dernier moteur de rotation de Silverman dans mon interface utilisateur simplifiée.

Le jeu est entièrement fonctionnel, vous pouvez le tester.

Lien de téléchargement direct : https://e-nautia.com/yoda/disk?p=10365054

J’intègrerai le petit mode d’emploi et l’à-propos ce week-end.

Vous pouvez orienter le cube par un cliquer-déplacer dans la direction souhaitée.


Projet d'un Rubik's cube en 3D - Page 7 Rubiks12
Revenir en haut Aller en bas
mindstorm

mindstorm


Nombre de messages : 685
Age : 55
Localisation : charente
Date d'inscription : 13/02/2013

Projet d'un Rubik's cube en 3D - Page 7 Empty
MessageSujet: Re: Projet d'un Rubik's cube en 3D   Projet d'un Rubik's cube en 3D - Page 7 EmptyJeu 20 Oct 2022 - 20:20

Marc, merci pour ton partage
deux choses
- chez moi seul la face jaune tourne correctement, ou c'est la seul à ne pas avoir le même comportement que les autres!!!
- j'ai vue un fichier panoramic_temp_1.exe dans ton zip
a quoi sert il?
bon courage
Revenir en haut Aller en bas
Marc

Marc


Nombre de messages : 2466
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Projet d'un Rubik's cube en 3D - Page 7 Empty
MessageSujet: Re: Projet d'un Rubik's cube en 3D   Projet d'un Rubik's cube en 3D - Page 7 EmptyJeu 20 Oct 2022 - 22:03

Merci Mindstorm pour tes tests.

Mindstorm a écrit:
- chez moi seul la face jaune tourne correctement, ou c'est la seul à ne pas avoir le même comportement que les autres!!!

J’ai refait plusieurs essais, je ne rencontre aucun problème sous Panoramic 0.9.29.i9.

Attendons d’avoir d’autres retours de la part des Panoramiciens.


Le fichier panoramic_temp_1.exe est un exécutable temporaire du programme. Tu peux le lancer directement. Dans ce cas, tu n’as ni besoin du fichier .bas, ni besoin de l’éditeur PANORAMIC.
Revenir en haut Aller en bas
papydall

papydall


Nombre de messages : 7017
Age : 74
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Projet d'un Rubik's cube en 3D - Page 7 Empty
MessageSujet: Re: Projet d'un Rubik's cube en 3D   Projet d'un Rubik's cube en 3D - Page 7 EmptyJeu 20 Oct 2022 - 22:16

Le but ultime pour un jeu de rubik's cube est de pouvoir résoudre un cube mélangé.
Pour aboutir à la solution, on doit faire tourner les faces dans un sens ou dans un autre en se basant uniquement sur leur position par rapport à l'utilisateur et non à leur couleur.
Or l'approche de Marc qui se base sur les couleurs des faces pour les faire tourner ne peut pas s'appliquer (du moins ce que je vois), mais peut-être a-t-il raison.

Je m'explique :
Si je dois appliquer par exemple les 3 mouvements suivants (sans me soucier de leur couleur) :
* Tourner la face gauche de 1/4 de tour dans le sens horaire
* Tourner la face avant de 1/4 de tour dans le sens horaire
* Tourner la face du bas de 1/4 de tour dans le sens anti-horaire

Comment faire ?

Ma proposition :
Faire désigner les faces par leur nom et non par leur couleur (voir mon message en haut) : ça facilitera énormément la résolution.
D'ailleurs les joueurs professionnels ou amateurs du rubik's cube arrivent à leur fin en tournant les faces selon leur position par rapport au joueur et non en fonction de leur couleur.
J'espère que j'étais clair.

A bon entendeur, salut!
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Marc

Marc


Nombre de messages : 2466
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Projet d'un Rubik's cube en 3D - Page 7 Empty
MessageSujet: Re: Projet d'un Rubik's cube en 3D   Projet d'un Rubik's cube en 3D - Page 7 EmptyVen 21 Oct 2022 - 0:49

Merci Papydall pour toutes ces précisions.

La solution que j’ai adoptée est une autre manière de s’amuser avec le Rubik’s Cube.
Lors de sa sortie dans les années 80, il n’y avait pas toutes ces notions de formules. On s’amusait uniquement avec les couleurs centrales des faces comme référence. C’était un véritable jeu de casse-tête.

Appliquer des formules toutes faites pour résoudre un casse-tête à coup sûr n’a plus le même intérêt. C’est une autre manière de s’amuser avec le Rubik ‘s Cube.
Ce n’est donc pas la même approche et pas la même interface utilisateur. C’est une autre forme de jeu avec des boutons (ou via un menu comme tu as fait) qui peuvent déclencher des formules préprogrammées.
Jeu qui mérite bien sûr d’être développé également.

Revenir en haut Aller en bas
Marc

Marc


Nombre de messages : 2466
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Projet d'un Rubik's cube en 3D - Page 7 Empty
MessageSujet: Re: Projet d'un Rubik's cube en 3D   Projet d'un Rubik's cube en 3D - Page 7 EmptyVen 21 Oct 2022 - 1:17

Nouveautés :

J’ai ajouté le titre « PANORAMIC Rubik’s cube ®»

A chaque exécution du programme, l’icône "Réinitialisation" prend une couleur aléatoire empruntée au cube.

Les couleurs qui composent la mosaïque de l’icône "Mélanger le cube" sont également tirées au hasard.


Projet d'un Rubik's cube en 3D - Page 7 Rubiks13
Revenir en haut Aller en bas
Minibug

Minibug


Nombre de messages : 4570
Age : 58
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

Projet d'un Rubik's cube en 3D - Page 7 Empty
MessageSujet: Re: Projet d'un Rubik's cube en 3D   Projet d'un Rubik's cube en 3D - Page 7 EmptyVen 21 Oct 2022 - 6:35

Bonjour Marc,

J'ai tourné le cube sous différents angles et cela fonctionne très bien.
J'ai utilisé les icones à droite pour tourner les faces c'est ok aussi.

C'est ensuite que ça 'coince'....

A un moment j'ai voulu de nouveau regarder le cube sous différents angles et là ça le fonctionne plus !
Le cube reste fixe.

Autre gros problème que je soulevais déjà hier :
Dans ton interface il n'est pas possible de déplacer les couronnes centrales de chaque face. Un oubli ?
Et ça c'est un gros problème car on ne pourra jamais résoudre un cube sans cette option !

Bon courage pour la suite. Wink
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
Marc

Marc


Nombre de messages : 2466
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Projet d'un Rubik's cube en 3D - Page 7 Empty
MessageSujet: Re: Projet d'un Rubik's cube en 3D   Projet d'un Rubik's cube en 3D - Page 7 EmptyVen 21 Oct 2022 - 11:25

Bonjour à tous !

Merci Minibug pour  tes tests.

J’ai identifié deux anomalies :

- Un problème de compatibilité du moteur de rotation avec mon interface ;
- Le blocage de l’orientation du cube quand on clique dessus avant qu’une rotation de face soit achevée.

Cette version devrait corriger ces anomalies :

Code:
' Jeu du Rubik's Cube
' Ecrit en langage PANORAMIC
' Projet coopératif
' Team : Minibug, Jack, Mindstorm, Silverman, Papydall, Marc    
' Octobre 2022

dim original%,sauvegarde%
dim posX%,posY%,posZ%
dim Orientation_X%,Orientation_Y%,Orientation_Z%
dim I%,obj%,Angle_rot%,Angle%,x,y,z,Orientation_%,pos%,rot%,axe$,face$,tmp%,vitesse_rotation%
dim objX,objY,objZ
dim axe_new,face_new,axe_old,face_old
dim nombre_de_rotation%
dim x_positionCamera%, y_positionCamera%, z_positionCamera%, distanceCamera%
dim x%, y%, x_souris%, y_souris%, null%, r%, v%, b%

label orienterCube, clic, deplacerCommandes, afficherApropos, melanger, reinitialiser, aide, quitter

' n° grid
original%=1
sauvegarde%=8
' positions dans grid
posX%=3
posY%=4
posZ%=5
Orientation_X%=9
Orientation_Y%=10
Orientation_Z%=11

vitesse_rotation%=3
creation_scene()
creerPanneauCommande()
bandeauTitre()
creerMenuPop()

end
' ------------------------------------------------------------------------------
sub creation_scene()
    ' créer la fenêtre principale
    width 0,width(0) - width_client(0) + 640
    height 0,height(0) - height_client(0) + 500

    ' centrer la fenêtre principale sur l'écran
    top 0,(screen_y - height(0))/2
    left 0,(screen_x - width(0))/2

   ' données stockées dans un grid
    create_hide
    grid original%
    grid_row original%,27 : grid_row_fixed original%,0
    grid_column original%,11 : grid_column_fixed original%,0
    hide original%
  
    grid sauvegarde% :' grid de sauvegarde
    grid_row sauvegarde%,27 : grid_row_fixed sauvegarde%,0
    grid_column sauvegarde%,11 : grid_column_fixed sauvegarde%,0
    hide sauvegarde%  
    create_show

    degrees
  
    ' créer la scène 3d
    scene3d 2
    width 2,500
    height 2,500
    color 2,20,20,20

    ' placement de la caméra
    distanceCamera% = 12
    x_positionCamera% = 54
    y_positionCamera% = 25
    cam_x_position cos(x_positionCamera%) * cos(y_positionCamera%) * distanceCamera%
    cam_z_position sin(x_positionCamera%) * cos(y_positionCamera%) * distanceCamera%
    cam_y_position sin(y_positionCamera%) * distanceCamera%
  
    ' on crée 27 cubes texturés
    FOR obj%=1 TO 27
        3D_MESH obj%:3D_LOAD_OBJECT obj%,"CUBE.3DS":3D_LOAD_TEXTURE obj%,"CUBE.BMP"
    NEXT obj%
  
    ' X axe rouge, sens de rotation anti-horaire
    ' Y axe vert, sens de rotation horaire
    ' Z axe bleu, sens de rotation horaire

    ' placement et données des objets
    obj%=0
    for x=-2 to 2 step 2
        for y=-2 to 2 step 2
            for z=-2 to 2 step 2
                obj%=obj%+1
                ' placer les cubes
                3d_position obj%,x,y,z
            
                ' position et orientation mémorisées dans un grid
                ' grid_write original%,obj%,1,str$(obj%)
                grid_write original%,obj%,posX%,str$(x)
                grid_write original%,obj%,posY%,str$(y)
                grid_write original%,obj%,posZ%,str$(z)
 
                grid_write original%,obj%,Orientation_X%,"1"
                grid_write original%,obj%,Orientation_Y%,"2"
                grid_write original%,obj%,Orientation_Z%,"3"
            next z
        next y
    next x

    ' pointeur pour reset
    3d_cube 28,0.0000001

    on_mouse_down 2,orienterCube
end_sub
' ------------------------------------------------------------------------------
sub rotation_couronne(Angle_rot%,axe$,face$)
    if mod(Angle_rot%,360)=0
        exit_sub
    else
        Angle_rot%=mod(Angle_rot%,360)
    end_if
    axe$=lower$(axe$)
    if axe$<>"x" and axe$<>"y" and axe$<>"z" then exit_sub
    if axe$="x" then pos%=posX%
    if axe$="y" then pos%=posY%
    if axe$="z" then pos%=posZ%
    if face$<>"-2" and face$<>"0" and face$<>"2" then exit_sub

    Orientation_%=pos%+6
    rot%=pos%-2
    for Angle%=0 to Angle_rot% step sgn(Angle_rot%)*vitesse_rotation%
        if Angle%<>0
            for obj%=1 to 27
                if grid_read$(original%,obj%,pos%)=face$
                    ' positions
                    objX=val(grid_read$(original%,obj%,posX%))
                    objY=val(grid_read$(original%,obj%,posY%))
                    objZ=val(grid_read$(original%,obj%,posZ%))
                    Matrice_Rotation(objX,objY,objZ,Angle%,rot%)
                    3d_position obj%,x,y,z
                    ' sens de rotation
                    tmp%=val(grid_read$(original%,obj%,Orientation_X%))
                    if tmp%=(Orientation_%-8) or tmp%=(8-Orientation_%)
                        tmp%=1*sgn(tmp%)
                    else
                        tmp%=val(grid_read$(original%,obj%,Orientation_Y%))
                        if tmp%=(Orientation_%-8) or tmp%=(8-Orientation_%)
                            tmp%=2*sgn(tmp%)
                        else
                            tmp%=val(grid_read$(original%,obj%,Orientation_Z%))
                            tmp%=3*sgn(tmp%)
                        end_if
                    end_if

                    if Orientation_%=Orientation_X% and abs(tmp%)>1 then tmp%=0-tmp%
                    if Orientation_%=Orientation_Y% and abs(tmp%)=1 then tmp%=0-tmp%
                    if Orientation_%=Orientation_Z% and abs(tmp%)=1 then tmp%=0-tmp%

                    select tmp%
                        case -3: 3d_z_rotate obj%,o3d_z_rotate(obj%)-vitesse_rotation%*sgn(Angle_rot%)
                        case -2: 3d_y_rotate obj%,o3d_y_rotate(obj%)-vitesse_rotation%*sgn(Angle_rot%)
                        case -1: 3d_x_rotate obj%,o3d_x_rotate(obj%)-vitesse_rotation%*sgn(Angle_rot%)
                        case 1 : 3d_x_rotate obj%,o3d_x_rotate(obj%)+vitesse_rotation%*sgn(Angle_rot%)
                        case 2 : 3d_y_rotate obj%,o3d_y_rotate(obj%)+vitesse_rotation%*sgn(Angle_rot%)
                        case 3 : 3d_z_rotate obj%,o3d_z_rotate(obj%)+vitesse_rotation%*sgn(Angle_rot%)
                    end_select
                end_if
            next obj%
        display
        end_if
    next Angle%

    ' mise à jour des données
    for obj%=1 to 27
        if grid_read$(original%,obj%,pos%)=face$
            ' positions
            objX=val(grid_read$(original%,obj%,posX%))
            objY=val(grid_read$(original%,obj%,posY%))
            objZ=val(grid_read$(original%,obj%,posZ%))
            Matrice_Rotation(objX,objY,objZ,Angle_rot%,rot%)
            grid_write original%,obj%,posX%,str$(x)
            grid_write original%,obj%,posY%,str$(y)
            grid_write original%,obj%,posZ%,str$(z)

            ' sens de rotation
            tmp%=val(grid_read$(original%,obj%,Orientation_X%))
            if tmp%=(Orientation_%-8) or tmp%=(8-Orientation_%)
                tmp%=1*sgn(tmp%)
            else
                tmp%=val(grid_read$(original%,obj%,Orientation_Y%))
                if tmp%=(Orientation_%-8) or tmp%=(8-Orientation_%)
                    tmp%=2*sgn(tmp%)
                else
                    tmp%=val(grid_read$(original%,obj%,Orientation_Z%))
                    tmp%=3*sgn(tmp%)
                end_if
            end_if

            if Orientation_%=Orientation_X% and abs(tmp%)>1 then tmp%=0-tmp%
            if Orientation_%=Orientation_Y% and abs(tmp%)=1 then tmp%=0-tmp%
            if Orientation_%=Orientation_Z% and abs(tmp%)=1 then tmp%=0-tmp%

            objX=val(grid_read$(original%,obj%,Orientation_X%))
            objY=val(grid_read$(original%,obj%,Orientation_Y%))
            objZ=val(grid_read$(original%,obj%,Orientation_Z%))

            select tmp%
                case -3: Matrice_Rotation(objX,objY,objZ,Angle_rot%,0-tmp%)
                case -2: Matrice_Rotation(objX,objY,objZ,Angle_rot%,0-tmp%)
                case -1: Matrice_Rotation(objX,objY,objZ,Angle_rot%,0-tmp%)
                case 1 : Matrice_Rotation(objX,objY,objZ,0-Angle_rot%,tmp%)
                case 2 : Matrice_Rotation(objX,objY,objZ,0-Angle_rot%,tmp%)
                case 3 : Matrice_Rotation(objX,objY,objZ,0-Angle_rot%,tmp%)
            end_select

            grid_write original%,obj%,Orientation_X%,str$(x)
            grid_write original%,obj%,Orientation_Y%,str$(y)
            grid_write original%,obj%,Orientation_Z%,str$(z)
        end_if
    next obj%
end_sub
' ------------------------------------------------------------------------------
sub rotation_invisible_couronne(Angle_rot%,axe$,face$)
   if mod(Angle_rot%,360)=0
      exit_sub
   else
      Angle_rot%=mod(Angle_rot%,360)
   end_if
   axe$=lower$(axe$)
   if axe$<>"x" and axe$<>"y" and axe$<>"z" then exit_sub
   if axe$="x" then pos%=posX%
   if axe$="y" then pos%=posY%
   if axe$="z" then pos%=posZ%
   if face$<>"-2" and face$<>"0" and face$<>"2" then exit_sub
   '
   Orientation_%=pos%+6
   rot%=pos%-2
   '
   ' mise à jour des données
   for obj%=1 to 27
      if grid_read$(original%,obj%,pos%)=face$
         '
         ' positions
         objX=val(grid_read$(original%,obj%,posX%))
         objY=val(grid_read$(original%,obj%,posY%))
         objZ=val(grid_read$(original%,obj%,posZ%))
         Matrice_Rotation(objX,objY,objZ,Angle_rot%,rot%)
         grid_write original%,obj%,posX%,str$(x)
         grid_write original%,obj%,posY%,str$(y)
         grid_write original%,obj%,posZ%,str$(z)
         '
         ' sens de rotation
         tmp%=val(grid_read$(original%,obj%,Orientation_X%))
         if tmp%=(Orientation_%-8) or tmp%=(8-Orientation_%)
             tmp%=1*sgn(tmp%)
         else
            tmp%=val(grid_read$(original%,obj%,Orientation_Y%))
            if tmp%=(Orientation_%-8) or tmp%=(8-Orientation_%)
                tmp%=2*sgn(tmp%)
            else
                tmp%=val(grid_read$(original%,obj%,Orientation_Z%))
                tmp%=3*sgn(tmp%)
            end_if
         end_if
         '
         if Orientation_%=Orientation_X% and abs(tmp%)>1 then tmp%=0-tmp%
         if Orientation_%=Orientation_Y% and abs(tmp%)=1 then tmp%=0-tmp%
         if Orientation_%=Orientation_Z% and abs(tmp%)=1 then tmp%=0-tmp%
         '
         objX=val(grid_read$(original%,obj%,Orientation_X%))
         objY=val(grid_read$(original%,obj%,Orientation_Y%))
         objZ=val(grid_read$(original%,obj%,Orientation_Z%))
         '            
         select tmp%
            case -3: Matrice_Rotation(objX,objY,objZ,Angle_rot%,0-tmp%)
            case -2: Matrice_Rotation(objX,objY,objZ,Angle_rot%,0-tmp%)
            case -1: Matrice_Rotation(objX,objY,objZ,Angle_rot%,0-tmp%)
            case 1 : Matrice_Rotation(objX,objY,objZ,0-Angle_rot%,tmp%)
            case 2 : Matrice_Rotation(objX,objY,objZ,0-Angle_rot%,tmp%)
            case 3 : Matrice_Rotation(objX,objY,objZ,0-Angle_rot%,tmp%)
         end_select
         '
         grid_write original%,obj%,Orientation_X%,str$(x)
         grid_write original%,obj%,Orientation_Y%,str$(y)
         grid_write original%,obj%,Orientation_Z%,str$(z)
         '
      end_if
   next obj%
end_sub
' ------------------------------------------------------------------------------
sub Matrice_Rotation(px,py,pz,ang,axe)
    select axe
        case 1: ' matrice de rotation X en sens anti horaire
            x = px*1 +py*0        +pz*0
            y = px*0 +py*cos(0-ang) -pz*sin(0-ang)
            z = px*0 +py*sin(0-ang) +pz*cos(0-ang)
       case 2: ' matrice de rotation Y en sens horaire
            x = px*cos(ang)     +py*0 +pz*sin(ang)
            y = px*0            +py*1 -pz*0
            z = px*(0-sin(ang)) +py*0 +pz*cos(ang)
       case 3: ' matrice de rotation Z en sens horaire
            x = px*cos(ang) -py*sin(ang) +pz*0
            y = px*sin(ang) +py*cos(ang) +pz*0
            z = px*0        +py*0        +pz*1
    end_select
    x=round_float(x,3)
    y=round_float(y,3)
    z=round_float(z,3)
end_sub
' ------------------------------------------------------------------------------
fnc round_float(round_float_mon_nb,round_float_decimales%)
    dim_local round_float_tmp%
    ' arrondi 'float'
    round_float_tmp%=round_float_mon_nb*power(10,round_float_decimales%)
    round_float_mon_nb=round_float_tmp%/(power(10,round_float_decimales%))
    result round_float_mon_nb
end_fnc
' ------------------------------------------------------------------------------
sub troisD_point_position(N%,x,y,z)
    3d_position 28,x+o3d_x_position(N%),y+o3d_y_position(N%),z+o3d_z_position(N%)
    3d_point_object N%,28
end_sub
' ------------------------------------------------------------------------------
fnc aleatoire%(aleatoire_mini,aleatoire_maxi)
    result int(rnd((aleatoire_maxi-aleatoire_mini)+0.999999999))+aleatoire_mini
end_fnc
' ------------------------------------------------------------------------------
orienterCube:
    off_mouse_down 2

    ' on quitte le sous-programme si c'est le bouton droit de la souris qui est enfoncé
    if mouse_right_down(2) = 1
        on_mouse_down 2,orienterCube
        return
    end_if

    x_souris% = mouse_x_position(2)
    y_souris% = mouse_y_position(2)

    while mouse_left_up(2) = 0
        x% = mouse_x_position(2) - x_souris% + x_positionCamera%
        y% = mouse_y_position(2) - y_souris% + y_positionCamera%

        y% = mod(y%,360)

        ' limitation du déplacement caméra vers le bas
        if y% > 63
            y% = 63
            y_positionCamera% = 63
            y_souris% = mouse_y_position(2)
         end_if
        
        ' limitation du déplacement caméra vers le haut
        if y% < -63
            y% = -63
            y_positionCamera% = -63
            y_souris% = mouse_y_position(2)
        end_if
        
        cam_x_position cos(x%) * cos(y%) * distanceCamera%
        cam_z_position sin(x%) * cos(y%) * distanceCamera%
        cam_y_position sin(y%) * distanceCamera%

        pause 20
    end_while

    ' mémorisation de la nouvelle position de la caméra
    x_positionCamera% = mouse_x_position(2) - x_souris% + x_positionCamera%
    y_positionCamera% = mouse_y_position(2) - y_souris% + y_positionCamera%

    on_mouse_down 2,orienterCube
return
' ------------------------------------------------------------------------------
sub creerMenuPop()
    main_menu_pop 3
        sub_menu 4
        parent 4,3
        caption 4,"Commandes à droite"
        mark_on 4
        on_click 4,deplacerCommandes
        
        sub_menu 5
        parent 5,3
        caption 5,"Commandes à gauche"
        on_click 5,deplacerCommandes
        
        sub_menu 6
        parent 6,3
        caption 6,"-"
        
        sub_menu 7
        parent 7,3
        on_click 7,afficherApropos
        caption 7,"A propos"
end_sub
' ------------------------------------------------------------------------------
sub bandeauTitre()
    panel 16
    top 16,10
    left 16,65
    width 16,430
    height 16,45
    
    picture 17
    parent 17,16
    width 17,width(16)
    height 17,height(16)
    color 17,20,20,20
    2d_target_is 17
    2d_fill_color 20,20,20
    
    print_target_is 17
    font_name 17,"Times New Roman"
    font_color 17,255,255,0
    font_size 17,24
    font_italic 17
    print "PANORAMIC Rubik's Cube"
    font_size 17,18
    print_locate 360,0
    print chr$(174)


end_sub
' ------------------------------------------------------------------------------
sub creerPanneauCommande()
    panel 10
    left 10,500
    height 10,500
    width 10,140
    
    image 11
    image 12  
    command_target_is 10
    
    ' habillage PANEL 10
    picture 14
    width 14,140
    height 14,500
    color 14,20,20,20

    ' creer modèle de bouton
    picture 13
    width 13,50
    height 13,50
    top 13,10
    left 13,10
    color 13,0,0,1
    2d_target_is 13

    ' dessiner les bords noirs arrondis
    2d_line 8,3,42,3
    2d_line 42,4,44,4
    2d_point 44,5
    2d_line 45,6,45,8
    2d_line 46,8,46,42
    2d_line 45,42,45,44
    2d_point 44,44
    2d_line 42,45,44,45
    2d_line 8,46,42,46
    2d_line 6,45,8,45
    2d_point 5,44
    2d_line 4,42,4,44
    2d_line 3,8,3,42
    2d_line 4,6,4,8
    2d_point 5,5
    2d_line 6,4,8,4

    ' colorier le centre du bouton
    2d_flood 20,20,232,40,40

    ' dessiner la flèche anti_horaire
    2d_pen_color 0,0,0
    2d_fill_off
    2d_pen_width 3
    2d_circle 25,25,14
    2d_pen_width 1
    2d_pen_color 232,40,40
    2d_fill_color 232,40,40
    2d_rectangle 9,25,26,40
    2d_pen_color 0,0,0
    2d_line 6,24,18,24
    2d_line 7,25,17,25
    2d_line 8,26,16,26
    2d_line 9,27,15,27
    2d_line 10,28,14,28
    2d_line 11,29,13,29

    ' copier le modèle de bouton avec la flèche anti_horaire en mémoire
    2d_image_copy 11,0,0,50,50

    ' creer le modèle de bouton avec la flèche sens horaire
    2d_pen_color 232,40,40
    2d_rectangle 6,6,40,40

    ' dessiner la flèche sens horaire
    2d_pen_color 0,0,0
    2d_fill_off
    2d_pen_width 3
    2d_circle 25,25,14
    2d_pen_width 1
    2d_pen_color 232,40,40
    2d_fill_color 232,40,40
    2d_rectangle 24,24,40,40
    2d_pen_color 0,0,0
    2d_line 32,24,44,24
    2d_line 33,25,43,25
    2d_line 34,26,42,26
    2d_line 35,27,41,27
    2d_line 36,28,40,28
    2d_line 37,29,39,29
    
    ' copier le modèle de bouton avec la flèche sens horaire en mémoire
    2d_image_copy 12,0,0,50,50

    ' cacher le PICTURE ayant servi à dessiner les modèles de boutons
    hide 13
    
    ' créer boutons rouges
    picture 20
    width 20,50
    height 20,50
    top 20,20
    left 20,10
    2d_target_is 20
    2d_image_paste 11,0,0
    2d_flood 20,20,232,40,40

    picture 21
    width 21,50
    height 21,50
    top 21,20
    left 21,70
    2d_target_is 21
    2d_image_paste 12,0,0
    2d_flood 20,20,232,40,40

    ' créer boutons verts
    picture 22
    width 22,50
    height 22,50
    top 22,70
    left 22,10
    2d_target_is 22
    2d_image_paste 11,0,0
    2d_flood 20,20,40,232,40

    picture 23
    width 23,50
    height 23,50
    top 23,70
    left 23,70
    2d_target_is 23
    2d_image_paste 12,0,0
    2d_flood 20,20,40,232,40

    ' créer boutons bleus
    picture 24
    width 24,50
    height 24,50
    top 24,120
    left 24,10
    2d_target_is 24
    2d_image_paste 11,0,0
    2d_flood 20,20,40,40,232

    picture 25
    width 25,50
    height 25,50
    top 25,120
    left 25,70
    2d_target_is 25
    2d_image_paste 12,0,0
    2d_flood 20,20,40,40,232

    ' créer boutons oranges
    picture 26
    width 26,50
    height 26,50
    top 26,170
    left 26,10
    2d_target_is 26
    2d_image_paste 11,0,0
    2d_flood 20,20,232,127,40

    picture 27
    width 27,50
    height 27,50
    top 27,170
    left 27,70
    2d_target_is 27
    2d_image_paste 12,0,0
    2d_flood 20,20,232,127,40

    ' créer boutons jaunes
    picture 28
    width 28,50
    height 28,50
    top 28,220
    left 28,10
    2d_target_is 28
    2d_image_paste 11,0,0
    2d_flood 20,20,245,245,0

    picture 29
    width 29,50
    height 29,50
    top 29,220
    left 29,70
    2d_target_is 29
    2d_image_paste 12,0,0
    2d_flood 20,20,245,245,0

    ' créer boutons blancs
    picture 30
    width 30,50
    height 30,50
    top 30,270
    left 30,10
    2d_target_is 30
    2d_image_paste 11,0,0
    2d_flood 20,20,255,255,255

    picture 31
    width 31,50
    height 31,50
    top 31,270
    left 31,70
    2d_target_is 31
    2d_image_paste 12,0,0
    2d_flood 20,20,255,255,255

    ' creer bouton de mélange aléatoire
    picture 32
    width 32,50
    height 32,50
    top 32,350
    left 32,10
    color 32,20,20,20
    2d_target_is 32
    2d_fill_color 0,0,0
    2d_pen_color 0,0,0
    2d_rectangle 1,1,50,50
    tirageCouleurAleatoire()
    2d_rectangle 3,3,16,16
    tirageCouleurAleatoire()
    2d_rectangle 35,19,48,32
    tirageCouleurAleatoire()
    2d_rectangle 19,19,32,32
    tirageCouleurAleatoire()
    2d_rectangle 35,35,48,48
    tirageCouleurAleatoire()
    2d_rectangle 19,3,32,16
    tirageCouleurAleatoire()
    2d_rectangle 3,35,16,48
    tirageCouleurAleatoire()
    2d_rectangle 35,3,48,16
    tirageCouleurAleatoire()
    2d_rectangle 19,35,32,48
    tirageCouleurAleatoire()
    2d_rectangle 3,19,16,32
    2d_pen_color 0,0,0
    2d_point 3,3
    2d_point 15,3
    2d_point 3,15
    2d_point 15,15
    2d_point 19,3
    2d_point 31,3
    2d_point 19,15
    2d_point 31,15
    2d_point 35,3
    2d_point 47,3
    2d_point 35,15
    2d_point 47,15
    2d_point 3,19
    2d_point 15,19
    2d_point 3,31
    2d_point 15,31
    2d_point 19,19
    2d_point 31,19
    2d_point 19,31
    2d_point 31,31
    2d_point 35,19
    2d_point 47,19
    2d_point 35,31
    2d_point 47,31
    2d_point 3,35
    2d_point 15,35
    2d_point 3,47
    2d_point 15,47
    2d_point 19,35
    2d_point 31,35
    2d_point 19,47
    2d_point 31,47
    2d_point 35,35
    2d_point 47,35
    2d_point 35,47
    2d_point 47,47
    cursor_point 32
    hint 32,"Mélanger le cube"
    on_click 32,melanger    
    
    ' copier le modèle de bouton en mosaïque en mémoire
    2d_image_copy 11,0,0,50,50
    
    ' creer bouton R.A.Z.
    picture 33
    width 33,50
    height 33,50
    top 33,350
    left 33,70
    2d_target_is 33
    2d_image_paste 11,0,0
    2d_flood 8,8,r%,v%,b%
    2d_flood 24,8,r%,v%,b%
    2d_flood 40,8,r%,v%,b%
    2d_flood 8,24,r%,v%,b%
    2d_flood 24,24,r%,v%,b%
    2d_flood 40,24,r%,v%,b%
    2d_flood 8,40,r%,v%,b%
    2d_flood 24,40,r%,v%,b%
    2d_flood 40,40,r%,v%,b%
    cursor_point 33
    hint 33,"Réinitialiser"
    on_click 33,reinitialiser
    
    ' creer bouton Aide
    picture 34
    width 34,50
    height 34,50
    top 34,430
    left 34,10
    2d_target_is 34
    2d_image_paste 12,0,0
    2d_pen_color 240,240,0
    2d_fill_color 240,240,0
    2d_rectangle 7,8,44,42
    2d_flood 6,6,240,240,0
    print_target_is 34
    font_size 34,24
    font_name 34,"Arial"
    print_locate 16,8
    hint 34,"Mode d'emploi"
    print "?"
    cursor_point 34
    on_click 34,aide
    
    ' creer bouton Quitter
    picture 35
    width 35,50
    height 35,50
    top 35,430
    left 35,70
    2d_target_is 35
    2d_image_paste 12,0,0
    2d_pen_color 240,40,40
    2d_fill_color 240,40,40
    2d_rectangle 7,8,44,42
    2d_flood 6,6,240,40,40
    2d_pen_color 0,0,0
    2d_pen_width 3
    2d_circle 25,26,13
    2d_pen_color 240,40,40
    2d_fill_color 0,0,0
    2d_rectangle 21,9,29,26
    hint 35,"Quitter le jeu"
    cursor_point 35
    on_click 35,quitter
    
    for i% = 20 to 31
        on_click i%,clic
    next i%
    
    command_target_is 0
end_sub
' ------------------------------------------------------------------------------
sub tirageCouleurAleatoire()
    dim_local couleur%
    couleur% = int(rnd(6))
    select couleur%
        case 0
            r% = 232 : v% = 40 : b% = 40
        case 1
            r% = 40 : v% = 232 : b% = 40
        case 2
            r% = 40 : v% = 40 : b% = 232
        case 3
            r% = 232 : v% = 127 : b% = 40
        case 4
            r% = 245 : v% = 245 : b% = 0
        case 5
            r% = 255 : v% = 255 : b% = 255
    end_select
    2d_fill_color r%,v%,b%
    2d_pen_color r%,v%,b%
end_sub
' ------------------------------------------------------------------------------
clic:
    inactive 2
    off_mouse_down 2

    for i% = 20 to 31
        off_click i%
    next i%
    
    select number_click
        case 20
            rotation_couronne(90,"x",-2)
        case 21
            rotation_couronne(-90,"x",-2)
        case 22
            rotation_couronne(-90,"z",-2)
        case 23
            rotation_couronne(90,"z",-2)
        case 24
            rotation_couronne(90,"z",2)
        case 25
            rotation_couronne(-90,"z",2)
        case 26
            rotation_couronne(-90,"x",2)
        case 27
            rotation_couronne(90,"x",2)
        case 28
            rotation_couronne(-90,"y",-2)
        case 29
            rotation_couronne(90,"y",-2)
        case 30
            rotation_couronne(90,"y",2)
        case 31        
            rotation_couronne(-90,"y",2)
    end_select

    for i% = 20 to 31
        on_click i%,clic
    next i%

    active 2
    on_mouse_down 2,orienterCube
    null% = mouse_left_down(2)
    null% = mouse_left_up(2)
return
' ------------------------------------------------------------------------------
deplacerCommandes:
    select number_click
        case 4
            mark_on 4
            mark_off 5
            left 2,0
            left 10,500
            left 16,65
        case 5
            mark_on 5
            mark_off 4
            left 2,140
            left 10,0
            left 16,190
    end_select        
return
' ------------------------------------------------------------------------------
melanger:
    off_mouse_down 2

    for i% = 20 to 35
        off_click i%
    next i%
   ' mélanger 3 fois
   for nombre_de_rotation% = 1 to 3
      Angle_rot% = aleatoire%(1,3) * 90 * sgn(rnd(1)-0.5)
      '
      ' pas 2 fois le même axe
      axe_old = axe_new
      repeat
         axe_new = aleatoire%(1,3)
      until axe_new <> axe_old
      select axe_new
         case 1: axe$="x"
         case 2: axe$="y"
         case 3: axe$="z"
      end_select
      '
      select aleatoire%(1,2)
         case 1: face$="-2"
         case 2: face$="2"
'         case 3: face$="2"
      end_select
      '
      '
      ' les rotations du rubiks cube sont visibles
      rotation_couronne(Angle_rot%,axe$,face$)
      '
    next nombre_de_rotation%
    

    for i% = 20 to 31
        on_click i%,clic
    next i%
    
    on_click 32,melanger
    on_click 33,reinitialiser
    on_click 34,aide
    on_click 35,quitter

    pause 20
    on_mouse_down 2,orienterCube
    null% = mouse_left_up(2)
    null% = mouse_left_down(2)
return
' ------------------------------------------------------------------------------
reinitialiser:
    ' placement de la caméra par défaut
    x_positionCamera% = 54
    y_positionCamera% = 25
    cam_x_position cos(x_positionCamera%) * cos(y_positionCamera%) * distanceCamera%
    cam_z_position sin(x_positionCamera%) * cos(y_positionCamera%) * distanceCamera%
    cam_y_position sin(y_positionCamera%) * distanceCamera%

   obj%=0
   for x=-2 to 2 step 2
      for y=-2 to 2 step 2
         for z=-2 to 2 step 2
            obj%=obj%+1
            '
            ' position et orientation mémorisées dans un grid
            3d_position obj%,x,y,z
            '
            3d_rotate obj%,0,0,0 : troisD_point_position(obj%,0,0,0) : troisD_point_position(obj%,0,0,1) : ' RAZ cube  
            '
            ' positions et orientations initiales mémorisées dans un grid
            ' grid_write 1,obj%,1,str$(obj%)
            grid_write original%,obj%,posX%,str$(x)
            grid_write original%,obj%,posY%,str$(y)
            grid_write original%,obj%,posZ%,str$(z)
            '
            grid_write original%,obj%,Orientation_X%,"1"
            grid_write original%,obj%,Orientation_Y%,"2"
            grid_write original%,obj%,Orientation_Z%,"3"
         next z
      next y
   next x
   display
return
' ------------------------------------------------------------------------------
afficherApropos:
     message "A créer"
return
' ------------------------------------------------------------------------------
aide:
    message "A créer"
return
' ------------------------------------------------------------------------------
quitter:
    terminate
return

Minibug a écrit:
Autre gros problème que je soulevais déjà hier :
Dans ton interface il n'est pas possible de déplacer les couronnes centrales de chaque face. Un oubli ?
Et ça c'est un gros problème car on ne pourra jamais résoudre un cube sans cette option !

scratch  Il n’y a pas de problème de ce côté-là.
Revenir en haut Aller en bas
Minibug

Minibug


Nombre de messages : 4570
Age : 58
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

Projet d'un Rubik's cube en 3D - Page 7 Empty
MessageSujet: Re: Projet d'un Rubik's cube en 3D   Projet d'un Rubik's cube en 3D - Page 7 EmptyVen 21 Oct 2022 - 12:47

Marc a écrit:
J’ai identifié deux anomalies :

Effectivement cela a l'air de mieux fonctionner ! Wink


Marc a écrit:
Il n’y a pas de problème de ce côté-là.

Ah bon ?! Tu fais comment ?

S'il faut déplacer la couronne 1 et la couronne 3 pour simuler le mouvement de la couronne 2 c'est pas vraiment ni pratique ni logique !
Certes, le résultat est là mais en terme de jouabilité c'est pas génial pour reconstruire le cube...

Le but premier étant de pouvoir refaire le cube avec les faces de chaque couleur après l'avoir mélangé.
Dans le cas présent c'est pas vraiment simple ou alors j'ai loupé quelque chose.... geek
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
mindstorm

mindstorm


Nombre de messages : 685
Age : 55
Localisation : charente
Date d'inscription : 13/02/2013

Projet d'un Rubik's cube en 3D - Page 7 Empty
MessageSujet: Re: Projet d'un Rubik's cube en 3D   Projet d'un Rubik's cube en 3D - Page 7 EmptyVen 21 Oct 2022 - 12:58

Bonjour à Tous
Pour tout vous dire, je n'ai jamais joué au Rubicks Cube avec plaisir.
C'est pour cela que dans le tiroir avec le cube, il y a la notice de résolution!
Maintenant, j'ai réussi hier à résoudre le cube de marc (avec le bug (chez moi) mais fonctionnel) en appliquant les formules.
Bien sur, c'est une sacré gymnastique que de mémoriser toutes les faces!
Pour mon programme, j'ai prévu un module "coup de pouce" qui intégrera les formules de ma notice et bien sur,
la nécessaire identification de l'orientation du cube.
Comme ce n'est pas pour demain...une idée pour les programmeurs en avance.
Merci de penser à tous ceux qui mettent plusieurs jours pour résoudre le cube  pale
Revenir en haut Aller en bas
Marc

Marc


Nombre de messages : 2466
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Projet d'un Rubik's cube en 3D - Page 7 Empty
MessageSujet: Re: Projet d'un Rubik's cube en 3D   Projet d'un Rubik's cube en 3D - Page 7 EmptyVen 21 Oct 2022 - 14:27

Minibug a écrit:
Ah bon ?! Tu fais comment ?

Pour résoudre un Rubik’s cube, je n’ai jamais eu besoin de tourner une des trois couronnes centrales.

Regarde les formules toutes faites, données sur Internet. Jamais il n’est question de faire tourner une des couronnes centrales.

Pour coder une rotation d’une couronne centrale dans une formule, il faudrait 3 lettres :
une pour identifier la face, une pour l’axe de rotation et une pour le sens de rotation.

Gestuelle : il est plus pratique et rapide de tourner les deux faces opposées que d’essayer de faire tourner la couronne centrale.

Papydall a publié dans ce fil de discussion, le 20 octobre à 18h21, toute une explication sur le Rubik’s Cube et son codage de formules. A aucun endroit il est question de faire tourner une quelconque couronne centrale.



Je souhaite que ma version de Rubik’s Cube reste très basic tout en étant entièrement fonctionnelle.

D’autres versions plus élaborées arrivent…
Je lis que Mindstorm en prépare une.
Papydall, Silverman et d’autres peut-être, nous préparent-ils aussi quelque chose ?

A suivre…


Pour ma version, outre la recherche de bugs, il me reste à faire :
- l’à-propos ;
- l’aide (mode d’emploi) ;
- mettre le code-source en ordre, voir ce que l’on peut "factoriser" dans le code.
- plus tous les imprévus !

Merci à tous pour votre précieuse aide et vos tests.
Revenir en haut Aller en bas
Jean Claude

Jean Claude


Nombre de messages : 5950
Age : 70
Localisation : 83 Var
Date d'inscription : 07/05/2009

Projet d'un Rubik's cube en 3D - Page 7 Empty
MessageSujet: Re: Projet d'un Rubik's cube en 3D   Projet d'un Rubik's cube en 3D - Page 7 EmptyVen 21 Oct 2022 - 15:32

Bonjour à tous,
j'ai hâte de voir la suite..
cheers
bounce
Revenir en haut Aller en bas
Minibug

Minibug


Nombre de messages : 4570
Age : 58
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

Projet d'un Rubik's cube en 3D - Page 7 Empty
MessageSujet: Re: Projet d'un Rubik's cube en 3D   Projet d'un Rubik's cube en 3D - Page 7 EmptyVen 21 Oct 2022 - 17:58

@Marc :

Effectivement ne n'avais jamais approfondi le sujet. mea-culpa !

Cela dit certains algos utilise bien la couronne centrale pour le placement des arêtes quand d'autres s'en passent aisément. Wink
Donc tu as raison, pas besoin de déplacer la couronne centrale.

Je suis resté dans les méthodes ancestrales du siècle dernier et a l'époque il n'y avait pas de Rubik's cube sur PC !
lol! lol! lol!
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
Marc

Marc


Nombre de messages : 2466
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Projet d'un Rubik's cube en 3D - Page 7 Empty
MessageSujet: Re: Projet d'un Rubik's cube en 3D   Projet d'un Rubik's cube en 3D - Page 7 EmptyVen 21 Oct 2022 - 20:52

Bonsoir à tous !

J’ai fini la fenêtre de l’A-propos.

L’accès se fait par le menu contextuel (clic-droit).

Projet d'un Rubik's cube en 3D - Page 7 Rubiks14


Pour fermer la fenêtre de l’A-propos, il suffit de cliquer… n’importe où !

Voici le lien pour télécharger cette dernière version :

https://e-nautia.com/yoda/disk?p=10365764

Merci de m'informer si vous remarquez une erreur, un oubli ou un bug.


Bonne soirée à tous !
Revenir en haut Aller en bas
Minibug

Minibug


Nombre de messages : 4570
Age : 58
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

Projet d'un Rubik's cube en 3D - Page 7 Empty
MessageSujet: Re: Projet d'un Rubik's cube en 3D   Projet d'un Rubik's cube en 3D - Page 7 EmptyVen 21 Oct 2022 - 22:44

Bonsoir les amis !

Que de mouvement sur le forum ce soir !! Laughing Laughing

Je viens de reprendre le programme réalisée par Silverman...

J'ai retravaillé l'interface et le principe des flèches qui n'étaient pas top pour les remplacer par des icones actives.
Chacune des icones peut avoir 2 états selon l'endroit ou vous cliquez. Cela permet les déplacements dans les 2 sens...

Vous pouvez télécharger le programme ici.

Bonne soirée à tous et bon amusement !

Projet d'un Rubik's cube en 3D - Page 7 Sans_114
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
Marc

Marc


Nombre de messages : 2466
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Projet d'un Rubik's cube en 3D - Page 7 Empty
MessageSujet: Re: Projet d'un Rubik's cube en 3D   Projet d'un Rubik's cube en 3D - Page 7 EmptyVen 21 Oct 2022 - 23:35

@Minibug

J’ai téléchargé et testé ton programme.

C’est une idée originale d’avoir troqué les flèches par des mini Rubik’s Cube.
Cela permet d’être sûr de cibler la bonne couronne à faire tourner.

Je suis content que tu n’aies pas lâché l’idée de faire un Rubik’s Cube.

Bonne continuation !


Dernière édition par Marc le Sam 22 Oct 2022 - 9:19, édité 2 fois
Revenir en haut Aller en bas
papydall

papydall


Nombre de messages : 7017
Age : 74
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Projet d'un Rubik's cube en 3D - Page 7 Empty
MessageSujet: Re: Projet d'un Rubik's cube en 3D   Projet d'un Rubik's cube en 3D - Page 7 EmptySam 22 Oct 2022 - 3:28

Bravo Marc !

Je pense que tu as oublié la commande SHAPE et ses consoeurs (SHAPE_CIRCLE, SHAPE_ELLIPSE, SHAPE_RECTANGLE, SHAPE_RECTANGLE_ROUNDED, SHAPE_SQUARE, SHAPE_SQUARE_ROUNDED)
Pour coder les coins arrondis de tes objets, tu utilises plusieurs lignes de code, alors qu'un simple SHAPE_RECTANGLE_ROUNDEDED peut faire l'affaire et son boulot est propre!

Bon, je te file (si tu l'acceptes) mon code de SUB CreerApropos()

Code:

SUB creerApropos()
    form 40 : width 40,450 : height 40,450 : command_target_is 40 : hide 40
    caption 40,"A-Propos du Rubik's cube"
    shape 41 : width 41,350 : height 41,350 : top 41,30 : left 41,30
    shape_square_rounded 41
    
    picture 42 : width 42,width(41)-50 : height 42,height(41)-50
    top 42,45 : left 42,45 : 2d_target_is 42
    ' Ellipse
    2d_pen_color 0,0,132 : 2d_pen_dot : 2d_ellipse 60,190,290,300
    2d_pen_solid

    ' textes
    font_color 42,0,0,132 : 2d_fill_color 255,255,255
    print_target_is 42   : font_size 42,12 : font_name 42,"Arial"        
    print_locate 74,25   : print "PANORAMIC Rubik's Cube"        
    font_size 42,8       : print_locate 268,25 : print chr$(174)
    font_size 42,10      : print_locate 138,50 : print "Version M.01"
    print_locate 38,90   : print "Jeu créé par une équipe du forum PANORAMIC*"
    print_locate 38,110  : print "Ecrit en langage PANORAMIC 0.9.29i9."
    print_locate 38,160  : print "Composition de l'équipe :"
    print_locate 140,205 : print "Minibug"
    print_locate 220,220 : print "Jack"
    print_locate 120,270 : print "Mindstorm"
    print_locate 85,230  : print "Silverman"
    print_locate 160,240 : print "Papydall"
    print_locate 230,255 : print "Marc"
    print_locate 22,320  : print "*https://panoramic.1fr1.net/"
    print_locate 248,320 : print "Octobre 2022"
    on_click 42,fermerApropos
END_SUB
rem ============================================================================

REM : Pour quitter cette fenêtre, cliquer dans le SHAPE


@ Minibug
Je verrai ton programme dans l'après-midi
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Minibug

Minibug


Nombre de messages : 4570
Age : 58
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

Projet d'un Rubik's cube en 3D - Page 7 Empty
MessageSujet: Re: Projet d'un Rubik's cube en 3D   Projet d'un Rubik's cube en 3D - Page 7 EmptySam 22 Oct 2022 - 6:41

@Marc :
Merci. Mais le mérite en revient avant tout à Silverman puisque c'est lui qui a développé le moteur du programme.
Je n'ai fait que le travail d'habillage. Wink

@Papydall :
Prends ton temps... Le programme ne devrait pas s'envoler !  Laughing


Dernière édition par Minibug le Sam 22 Oct 2022 - 10:48, édité 1 fois
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
Marc

Marc


Nombre de messages : 2466
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Projet d'un Rubik's cube en 3D - Page 7 Empty
MessageSujet: Re: Projet d'un Rubik's cube en 3D   Projet d'un Rubik's cube en 3D - Page 7 EmptySam 22 Oct 2022 - 9:50

Bonjour à tous !

@Papydall

Merci Papydall !
Tu as raison, la commande SHAPE_SQUARE_ROUNDED est pratique mais elle ne permet pas de choisir le rayon des bords arrondis.

Excellent week-end à tous !
Revenir en haut Aller en bas
silverman

silverman


Nombre de messages : 970
Age : 52
Localisation : Picardie
Date d'inscription : 18/03/2015

Projet d'un Rubik's cube en 3D - Page 7 Empty
MessageSujet: Re: Projet d'un Rubik's cube en 3D   Projet d'un Rubik's cube en 3D - Page 7 EmptySam 22 Oct 2022 - 11:18

Waou, bravo pour vos réalisations!
Idea : C'est un beau projet de groupe qui mériterait sa place dans la rubrique des projets réalisé en panoramic Very Happy
Revenir en haut Aller en bas
papydall

papydall


Nombre de messages : 7017
Age : 74
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Projet d'un Rubik's cube en 3D - Page 7 Empty
MessageSujet: Re: Projet d'un Rubik's cube en 3D   Projet d'un Rubik's cube en 3D - Page 7 EmptySam 22 Oct 2022 - 13:06

Marc a écrit:

Tu as raison, la commande SHAPE_SQUARE_ROUNDED est pratique mais elle ne permet pas de choisir le rayon des bords arrondis.

Ok!
Et maintenant si on faisait une petite recréation pour oublier le rubik's cube le temps d'observer l'exécution de  ce court code.

Code:

rem ============================================================================
rem      Super ellipse ou rectangle à coins arrondis
rem ============================================================================
rem Le s/p Super_ellipse(...) permet de tracer un rectangle (ou un carré) à coins
rem arrondis.
rem Il permet aussi d’afficher un texte au centre du rectangle / carré
rem Si vous ne désirez pas afficher le texte, supprimez le dernier argument de
rem Super_ellipse(a,b,n,x1,y1,t$)
rem Vous pouvez régler l’épaisseur du tracé, la couleur du tracer et/ou la couleur
rem du fond.
rem Bref, vous pouvez faire plein de choses avec les équations paramétriques de
rem la super ellipse
rem ============================================================================
rem Voici les équations paramétriques :
rem         _______________________________________________
rem        |                                               |
rem        |  x = power(abs(cos(t)),2/n) * a * sgn(cos(t)) |
rem        |  y = power(abs(sin(t)),2/n) * b * sgn(sin(t)) |
rem        |_______________________________________________|

rem  Avec t variant de 0° à 360°
rem  Le paramètre n détermine la nature de la super-ellipse(hypo ou hyper-ellipse)
rem  et sa forme.
rem  Plus la valeur de n augmente, plus la courbe obtenue tend vers un rectangle.
rem ============================================================================
dim n,titre$

picture 9999
alpha 9998


titre$ = "***** SALUT TOUT LE MONDE *****" + chr$(13) + "VOICI UN RECTANGLE A COINS ARRONDIS"
Super_ellipse(150,180,20,50,50,titre$)
message "Ok"
cls
titre$ = "Plus n augmente, plus la super ellipse tent vers" +chr$(13)
titre$ = titre$  + "un rectangle" + chr$(13)
for n = 2 to 130 step 2
    Super_ellipse(150,180,n,50,50,titre$ + "n = " + str$(n)) : pause 2000
next n
caption 0,"Terminé !"
end
rem ============================================================================
' Paramètres :
' a : demi-diamètre horizontal
' b : demi-diamètre vertical
' n : détermine la nature de la super-ellipse(hypo ou hyper-ellipse) et sa forme
' Plus la valeur de n augmente, plus la courbe obtenue tend vers un rectangle.
' x1,y1 : position du rectangle
' t$ : texte à afficher
SUB Super_ellipse(a,b,n,x1,y1,t$)
    dim_local t,x,y,xc,yc,w,h
    degrees

    w = width(0) : h = height(0) : xc = w/2 : yc = h/2
    x1 = x1-8 : y1 = y1-8
    top 9999,y1 : left 9999,x1 : width 9999,2*(a+10) : height 9999,2*(b+10)
    xc = width(9999)/2  : yc = height(9999)/2
    color 9999,255,0,0  : ' Vous pouvez REMer cette ligne ou modifier la couleur
    2d_target_is 9999   : 2d_poly_from xc + a,yc
    ' 2d_pen_width 2      : ' Vous pouvez REMer cette ligne
    for t = 0 to 360
        x = power(abs(cos(t)),2/n) * a * sgn(cos(t))
        y = power(abs(sin(t)),2/n) * b * sgn(sin(t))
        2d_poly_to xc+x,yc+y
    next t
    2d_flood xc-a+10,yc,255,255,0
    top 9998, top(9999)+b :left 9998,left(9999)+a/4
    color 9998,255,255,0 : font_color 9998,0,0,255 : font_bold 9998
 
    caption 9998,t$
END_SUB
rem ============================================================================
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Projet d'un Rubik's cube en 3D - Page 7 Empty
MessageSujet: Re: Projet d'un Rubik's cube en 3D   Projet d'un Rubik's cube en 3D - Page 7 EmptySam 22 Oct 2022 - 14:14

Pas mal papydall !
Perso j'ai ma petite sub toute simple pour faire des rectangles à coins arrondis:
Code:
SUB Rectaron(x,y,w,h,r)
  ' Rectangle w x h, en x,y, coins arrondis de rayon r, sur le 2D_Target
  ' paramètres de tracé courants: épaisseur et couleur de trait
  DEGREES
  2D_LINE x+r,y,x+w-r,y: 2D_ARC x+w-r,y+r,r,90,360
  2D_LINE x+w,y+r,x+w,y+h-r: 2D_ARC x+w-r,y+h-r,r,0,270
  2D_LINE x+w-r,y+h,x+r,y+h: 2D_ARC x+r,y+h-r,r,270,180
  2D_LINE x,y+h-r,x,y+r: 2D_ARC x+r,y+r,r,180,90
END_SUB
Revenir en haut Aller en bas
Contenu sponsorisé





Projet d'un Rubik's cube en 3D - Page 7 Empty
MessageSujet: Re: Projet d'un Rubik's cube en 3D   Projet d'un Rubik's cube en 3D - Page 7 Empty

Revenir en haut Aller en bas
 
Projet d'un Rubik's cube en 3D
Revenir en haut 
Page 7 sur 9Aller à la page : Précédent  1, 2, 3, 4, 5, 6, 7, 8, 9  Suivant
 Sujets similaires
-
» Un p'tit cube
» The Cube
» cube avec belle texture
» finaliser un projet
» Projet débarquement

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: