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 4 Emptypar Pedro Aujourd'hui à 8:08

» Un autre pense-bête...
Projet d'un Rubik's cube en 3D - Page 4 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 4 Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
Projet d'un Rubik's cube en 3D - Page 4 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 4 Emptypar jjn4 Mar 12 Nov 2024 - 17:23

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

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

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

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

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

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

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

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

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

» fichier.exe
Projet d'un Rubik's cube en 3D - Page 4 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
-20%
Le deal à ne pas rater :
Drone Dji DJI Mini 4K (EU)
239 € 299 €
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
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 4 Empty
MessageSujet: Re: Projet d'un Rubik's cube en 3D   Projet d'un Rubik's cube en 3D - Page 4 EmptyVen 30 Sep 2022 - 14:30

Bonjour à tous !

@Mindstorm

La position d’un objet 3d est donnée par les fonctions :
o3d_x_position(N)
o3d_y_position(N)
o3d_z_position(N)

et pour les angles de rotation de l’objet 3d autour de ses axes :
o3d_x_rotate(N)
o3d_y_rotate(N)
o3d_z_rotate(N)

Je vais jeter un œil sur ton code pour le 3d_chain_break…

Quelques annotations à vérifier que j’avais faites :
- Lors d’un 3D_CHAIN_BREAK, l’objet 3d reprend ses anciennes coordonnées d’avant le 3D_CHAIN.
- Les fonctions o3d… retournent uniquement les coordonnées d’avant le 3D_CHAIN.

Bonne continuation !
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 4 Empty
MessageSujet: Re: Projet d'un Rubik's cube en 3D   Projet d'un Rubik's cube en 3D - Page 4 EmptyVen 30 Sep 2022 - 16:37

Merci Marc

Marc a écrit:
Quelques annotations à vérifier que j’avais faites :
- Lors d’un 3D_CHAIN_BREAK, l’objet 3d reprend ses anciennes coordonnées d’avant le 3D_CHAIN.
- Les fonctions o3d… retournent uniquement les coordonnées d’avant le 3D_CHAIN.
Je pense que c'est le 3d_mesh qui coince avec le 3d_breack_chain et ce serai un bug pour Jack
Je vais tester tes opérateurs et au pire je fais un tableau de donnés mais ce serait moins propre.
Tiens nous au courant de tes avancées
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 4 Empty
MessageSujet: Re: Projet d'un Rubik's cube en 3D   Projet d'un Rubik's cube en 3D - Page 4 EmptyVen 30 Sep 2022 - 18:15

Réponse à la question de Mindstorm dans le post du 30/09/2022 de 13:20.

Mindstorm a écrit:
Quelqu'un peut il me dire pourquoi 3d_chain_breack ne fonctionne pas dans mon code?

Je viens des essais. Je n'ai pas trouvé d'anomalie dans ton code. Effectivement, la commande 3d_chain_break ne rompt pas le chaînage initial entre le mesh et le cube.
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 4 Empty
MessageSujet: Re: Projet d'un Rubik's cube en 3D   Projet d'un Rubik's cube en 3D - Page 4 EmptyVen 30 Sep 2022 - 18:28

C'est encore plus parlant avec un bout de code
le cube reste maitre du mesh même avec le 3d_chain_breack
Heureusement avec tes commandes je vais gagner pas mal de temps pour identifier les faces à faire tourner
Si Jack passe par là et qu'il a un peut de temps?
Mais ce n'est pas très grave

Code:
scene3d 1
form 2:Left 2,600:height 2,800:top 2,0:width 2,70
full_space 1
cam_position 10,10,10
dim i%,j%,x,y,z,d,c,r,cub,mesh
print_target_is 2
triedre()

mesh=151 :cub=150
3d_mesh mesh
3d_load_object mesh,"cube.3ds"
3d_load_texture mesh, "cube.bmp"
rem constructioncube()
3d_cube cub,0.1



wait 1000
x=0:y=0:z=0
r=1
3d_chain cub,mesh
for i%=1 to 3
        z=r*30*i%
        3d_rotate cub,x,y,z
    wait 300
    next i%
    print "cub"
print o3d_x_rotate (cub)
print o3d_y_rotate (cub)   
print o3d_z_rotate (cub)
print "mesh"
print o3d_x_rotate (mesh)
print o3d_y_rotate (mesh)   
print o3d_z_rotate (mesh)
 
3d_chain_break cub,mesh

print "breack"

wait 1000

r=1
for i%=1 to 3
        x=r*30*i%
        3d_rotate cub,x,y,z
    wait 300
    next i%
print "cub"
print o3d_x_rotate (cub)
print o3d_y_rotate (cub)   
print o3d_z_rotate (cub)
print "mesh"
print o3d_x_rotate (mesh)
print o3d_y_rotate (mesh)   
print o3d_z_rotate (mesh) 

end
'___________________________________________________________________________

sub rotationprogressive()
    for i%=1 to 3
        z=r*30*i%
        3d_rotate d+1,x,y,z
        3d_rotate d+2,x,y,z
        3d_rotate d+3,x,y,z
        3d_rotate d+4,x,y,z
        3d_rotate d+5,x,y,z
        3d_rotate d+6,x,y,z
        3d_rotate d+7,x,y,z
        3d_rotate d+8,x,y,z
        3d_rotate d+9,x,y,z
    wait 300
    next i%
end_sub
'___________________________________________________________________________
     
 sub constructionmesh()
    for j%=1 to 9
        for i%=1 to 3
            mesh=(100*i%)+j%
            3d_mesh mesh
            3d_load_object mesh,"cube.3ds"
            3d_load_texture mesh, "cube.bmp"
        next i%
    next j%
 end_sub
 '__________________________________________________________________________
 
 sub constructioncube()
    for j%=1 to 9
        for i%=1 to 3
            cub=(10*i%)+j%
            3d_cube cub,1
        next i%
    next j%
 end_sub
 '_________________________________________________________________________
 
 sub chainage()
    for j%=1 to 9
        for i%=1 to 3
        cub=(i%*10)+j%
        mesh=(i%*100)+j%
        3d_chain cub,mesh
        next i%
    next j%
 end_sub
 '_________________________________________________________________________
 
 sub positionmesh()
    for j%=1 to 3
        z=2.01*(2-j%)
        c=j%*100
        3d_position c+1,0,0,z
        3d_position c+2,0,2.01,z
        3d_position c+3,0,-2.01,z
        3d_position c+4,2.01,0,z
        3d_position c+5,2.01,2.01,z
        3d_position c+06,2.01,-2.01,z
        3d_position c+7,-2.01,0,z
        3d_position c+8,-2.01,2.01,z
        3d_position c+9,-2.01,-2.01,z
    next j%
 end_sub
 '_________________________________________________________________________
 
 sub triedre()
    3d_cube 1,1    :3d_scale 1,12,0.1,0.1
    3d_cube 2,1    :3d_scale 2,0.1,12,0.1
    3d_cube 3,1    :3d_scale 3,0.1,0.1,12
    3d_cone 4,.8,.3 :3d_x_position 4,6 :3d_z_rotate 4,-90
    3d_cone 5,.8,.3 :3d_y_position 5,6
    3d_cone 6,.8,.3 :3d_z_position 6,6 :3d_x_rotate 6,-90
    3d_text 7,"X"    : 3d_x_position 7,6.5
    3d_text 8,"Y"    : 3d_y_position 8,6.5
    3d_text 9,"Z"    : 3d_z_position 9,7.1 :3d_y_rotate 9,90
 end_sub
   
 
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 4 Empty
MessageSujet: Re: Projet d'un Rubik's cube en 3D   Projet d'un Rubik's cube en 3D - Page 4 EmptyVen 30 Sep 2022 - 22:25

@Mindstorm

Sur mon prototype de Rubik’s Cube, je ne remarque pas de dysfonctionnement de l’instruction 3d_chain_break.

Comme pour toi, ma construction repose sur l’assemblage de 27 MESHs.
Le MESH central, qui n’est pas visible puisqu'il qu'il est masqué par les autres MESHs, sert de maître.

Je chaîne la couronne à faire pivoter au MESH central et je ne fais tourner que l’unique MESH central. Il entraîne les 9 autres cubes sans problème. Je romps les chaînages pour chainer une autre couronne sur le MESH central, puis la faire tourner, toujours sans anomalie.

Autrement, suite à ces constatations :

- Lorsque l’on rompt un chaînage, les cubes chaînés reprennent leur position d’avant chaînage.

- Les six fonctions O3D… ne retournent que les valeurs d’avant chaînage.

J’ai mappé le cube dans un tableau « cube%(27) ».
J’ai créé un tableau à deux dimensions « cubePosition%(27,6) » dans lequel je placerai manuellement les 6 valeurs O3D… pour chaque cube en fonction des modifications d’emplacement.

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 4 Empty
MessageSujet: Re: Projet d'un Rubik's cube en 3D   Projet d'un Rubik's cube en 3D - Page 4 EmptySam 1 Oct 2022 - 1:24

J’ai mis mon Rubik’s Cube de travail ici :

https://e-nautia.com/yoda/disk/Panoramic/Rubik_s_Cube/Cube_v6.zip

Le programme affiche 3 fenêtres :

1)- La vue 3d du Rubik’s Cube. Un cliquer-déplacer permet d’orienter le cube pour observer une face cachée.

2)- Un panneau de contrôle pour effectuer toutes les rotations possibles sur un Rubik’s cube. Le sens de rotation choisi est anti-trigonométrique. Après chaque rotation, il est impératif de revenir au point de départ sous peine d’obtenir un joli caléidoscope. Par exemple, si vous tournez la face bleue de 270°, il faudra la remettre à sa place en cliquant sur -270° avant d’opérer la rotation d’une autre face.

Projet d'un Rubik's cube en 3D - Page 4 Cube2_10


3)- Un panneau de commande pour cacher un ou plusieurs cubes. Ceci permet d’observer le comportement du cube central (qui porte le numéro 14). Le "Mindstorm’s Triède" peut être également caché.

Projet d'un Rubik's cube en 3D - Page 4 Cube3_10


Le code-source est commenté.
La partie « rotation » est en fin de code. Elle est composée de 6 petits sous-programmes : un par face. Ces SUBs reçoivent en paramètre l’angle de rotation à effectuer.


Ce programme est en cours de développement. Il n’est pas achevé. Il est mis à disposition pour comprendre et tester les commandes 3D appliquées sur un Rubik’s Cube.
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 4 Empty
MessageSujet: Re: Projet d'un Rubik's cube en 3D   Projet d'un Rubik's cube en 3D - Page 4 EmptySam 1 Oct 2022 - 7:03

Bonjour à tous !

Belle progression Marc ! Très pratique ton système de débogage...

Félicitation pour le résultat même si tu es encore loin d'avoir fini.
Je n'aurai jamais été capable d'en faire autant ! Mad

Vraiment bravo pour ces premiers résultats ! cheers
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 4 Empty
MessageSujet: Re: Projet d'un Rubik's cube en 3D   Projet d'un Rubik's cube en 3D - Page 4 EmptySam 1 Oct 2022 - 9:09

super travail Marc
Cela confirme mon analyse, il y a probablement un problème au chainage dé-chainage quand on mélange objet natif et mesh.
Je suis contant que tu n’emploie pas la même voie que moi et si sylverman ou Minibug veulent participer, j'ai trouvé une autre solution sans chainage cette nuit.
Il suffit de soumettre le déplacement et la rotation directement au cube.
Cette voie est accessible aux codeurs...
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 4 Empty
MessageSujet: Re: Projet d'un Rubik's cube en 3D   Projet d'un Rubik's cube en 3D - Page 4 EmptySam 1 Oct 2022 - 10:12

Bonjour Mindstorm,

Mindstorm a écrit:
si sylverman ou Minibug veulent participer, j'ai trouvé une autre solution sans chainage cette nuit.

Non j'ai définitivement abandonné l'idée. Je n'ai pas le niveau pour ce projet !
Je ne maitrise ni la 3D ni les fonctions trigonométriques.

Cela dit, je suis le sujet avec beaucoup d'attention et je vois que Marc progresse bien ! Laughing
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 4 Empty
MessageSujet: Re: Projet d'un Rubik's cube en 3D   Projet d'un Rubik's cube en 3D - Page 4 EmptySam 1 Oct 2022 - 10:30

Salut à tous !

Mindstorm a écrit:
Il suffit de soumettre le déplacement et la rotation directement au cube.

Je pense que tu veux faire tourner simultanément chaque petit cube élémentaire d’une face en leur appliquant une série de formules mathématiques ?
Si c’est le cas, voici une ébauche d’une version que j'avais faite où il n’y a pas de chaînage. Si cela peut t’aider…

Code:
' Debug Rubik's cube
dim cube%(27)

label rouge90, bleu90, vert90, jaune90, orange90, blanc90
label rouge180, bleu180, vert180, jaune180, orange180, blanc180
label rouge270, bleu270, vert270, jaune270, orange270, blanc270
label rouge_90, bleu_90, vert_90, jaune_90, orange_90, blanc_90
label rouge_180, bleu_180, vert_180, jaune_180, orange_180, blanc_180
label rouge_270, bleu_270, vert_270, jaune_270, orange_270, blanc_270
label orienterCube, quitter

degrees

interfaceGraphique3D()
creerPanneauControle()

end
' ------------------------------------------------------------------------------
orienterCube:
    off_mouse_down 1

    while mouse_left_up(1) = 0
        ' déplacement de la caméra en x
        cam_x_position cos(mouse_x_position(1))*12
        cam_z_position sin(mouse_x_position(1))*12
        
        ' déplacement de la caméra en y
        cam_y_position int(mouse_y_position(1)/20)-12  
    end_while

    on_mouse_down 1,orienterCube
return
' ------------------------------------------------------------------------------
sub interfaceGraphique3D()
    dim_local i%

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

    ' créer la scène 3d
    scene3d 1
    width 1,500
    height 1,500
    color 1,20,20,20
    
    ' placement de la caméra
    cam_position 8,8,8
    
    ' création des 27 cubes texturés
    for i% = 1 TO 27
        3d_mesh i%
        3d_load_object i%,"cube.3ds"
        3d_load_texture i%,str$(i%)+"DebugCube.bmp"
    next i%

    ' disposition des cubes dans les différentes tranches
    ' avant     centre    arrière
    ' 1 2 3    10 11 12   19 20 21    
    ' 4 5 6    13 14 15   22 23 24
    ' 7 8 9    16 17 18   25 26 27

    ' tranche avant
    3d_position 1,-2,2,2
    3d_position 2,0,2,2
    3d_position 3,2,2,2
    3d_position 4,-2,0,2
    3d_position 5,0,0,2
    3d_position 6,2,0,2
    3d_position 7,-2,-2,2
    3d_position 8,0,-2,2
    3d_position 9,2,-2,2

    ' tranche centrale
    3d_position 10,-2,2,0
    3d_position 11,0,2,0
    3d_position 12,2,2,0
    3d_position 13,-2,0,0
    3d_position 14,0,0,0
    3d_position 15,2,0,0
    3d_position 16,-2,-2,0
    3d_position 17,0,-2,0
    3d_position 18,2,-2,0
    
    ' tranche arrière
    3d_position 19,-2,2,-2
    3d_position 20,0,2,-2
    3d_position 21,2,2,-2
    3d_position 22,-2,0,-2
    3d_position 23,0,0,-2
    3d_position 24,2,0,-2
    3d_position 25,-2,-2,-2
    3d_position 26,0,-2,-2
    3d_position 27,2,-2,-2

    ' mappage des positions des cubes
    for i% = 1 to 27
        cube%(i%) = i%
    next i%

    on_mouse_down 1,orienterCube
end_sub
' ------------------------------------------------------------------------------
sub creerPanneauControle()
    form 100
    width 100,width(100) - width_client(100) + 320
    height 100,height(100) - height_client(100) + 320
    left 100,705
    top 100,380
    caption 100,"Panneau de contrôle"
    color 100,20,20,20
    on_close 100,quitter

    image 150
    
    creerBoutons()
    serigraphieBoutons()
end_sub
' ------------------------------------------------------------------------------
sub creerBoutons()
    dim_local i%, left_position%
    command_target_is 100
    
    ' modèle bouton
    picture 136
    width 136,50
    height 136,50
    top 136,260
    left 136,260
    color 136,0,0,1
    2d_target_is 136
    ' 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

    2d_flood 20,20,255,255,255
    2d_image_copy 150,0,0,50,50

    ' boutons rouges
    left_position% = 10
    for i% = 101 to 106
         picture i%
         width i%,50
         height i%,50
         top i%,10
         left i%,left_position%
         2d_target_is i%
         2d_image_paste 150,0,0
         2d_flood 20,20,232,40,40
         left_position% = left_position% + 50
    next i%

    ' boutons verts
    left_position% = 10
    for i% = 107 to 112
         picture i%
         width i%,50
         height i%,50
         top i%,60
         left i%,left_position%
         2d_target_is i%
         2d_image_paste 150,0,0
         2d_flood 20,20,40,232,40
         left_position% = left_position% + 50
    next i%

    ' boutons bleus
    left_position% = 10
    for i% = 113 to 118
         picture i%
         width i%,50
         height i%,50
         top i%,110
         left i%,left_position%
         2d_target_is i%
         2d_image_paste 150,0,0
         2d_flood 20,20,40,40,232
         left_position% = left_position% + 50
    next i%

    ' boutons oranges
    left_position% = 10
    for i% = 119 to 124
         picture i%
         width i%,50
         height i%,50
         top i%,160
         left i%,left_position%
         2d_target_is i%
         2d_image_paste 150,0,0
         2d_flood 20,20,232,127,40
         left_position% = left_position% + 50
    next i%

    ' boutons jaunes
    left_position% = 10
    for i% = 125 to 130
         picture i%
         width i%,50
         height i%,50
         top i%,210
         left i%,left_position%
         2d_target_is i%
         2d_image_paste 150,0,0
         2d_flood 20,20,245,245,0
         left_position% = left_position% + 50
    next i%

    ' boutons blancs
    left_position% = 10
    for i% = 131 to 135
         picture i%
         width i%,50
         height i%,50
         top i%,260
         left i%,left_position%
         2d_target_is i%
         2d_image_paste 150,0,0
         2d_flood 20,20,255,255,255
         left_position% = left_position% + 50
    next i%

    on_click 101,rouge_270
    on_click 102,rouge_180
    on_click 103,rouge_90
    on_click 104,rouge90
    on_click 105,rouge180
    on_click 106,rouge270
    on_click 107,vert_270
    on_click 108,vert_180
    on_click 109,vert_90
    on_click 110,vert90
    on_click 111,vert180
    on_click 112,vert270
    on_click 113,bleu_270
    on_click 114,bleu_180
    on_click 115,bleu_90
    on_click 116,bleu90
    on_click 117,bleu180
    on_click 118,bleu270
    on_click 119,orange_270
    on_click 120,orange_180
    on_click 121,orange_90
    on_click 122,orange90
    on_click 123,orange180
    on_click 124,orange270
    on_click 125,jaune_270
    on_click 126,jaune_180
    on_click 127,jaune_90
    on_click 128,jaune90
    on_click 129,jaune180
    on_click 130,jaune270
    on_click 131,blanc_270
    on_click 132,blanc_180
    on_click 133,blanc_90
    on_click 134,blanc90
    on_click 135,blanc180
    on_click 136,blanc270
    
    command_target_is 0
end_sub
' ------------------------------------------------------------------------------
sub serigraphieBoutons()
    dim_local colonne%, num_objet%

    num_objet% = 101
        for colonne% = 1 to  6
            print_target_is num_objet%
            2d_target_is num_objet%
                2d_fill_color color_pixel_red(num_objet%,25,25),color_pixel_green(num_objet%,25,25),color_pixel_blue(num_objet%,25,25)
                font_name num_objet%,"Arial"
                font_size num_objet%,11
                print_locate 8,16
                print "-270°"
            num_objet% = num_objet% + 6
        next colonne%

    num_objet% = 102
        for colonne% = 1 to  6
            print_target_is num_objet%
            2d_target_is num_objet%
                2d_fill_color color_pixel_red(num_objet%,25,25),color_pixel_green(num_objet%,25,25),color_pixel_blue(num_objet%,25,25)
                font_name num_objet%,"Arial"
                font_size num_objet%,11
                print_locate 8,16
                print "-180°"
            num_objet% = num_objet% + 6
        next colonne%

    num_objet% = 103
        for colonne% = 1 to  6
            print_target_is num_objet%
            2d_target_is num_objet%
                2d_fill_color color_pixel_red(num_objet%,25,25),color_pixel_green(num_objet%,25,25),color_pixel_blue(num_objet%,25,25)
                font_name num_objet%,"Arial"
                font_size num_objet%,11
                print_locate 12,16
                print "-90°"
            num_objet% = num_objet% + 6
        next colonne%

    num_objet% = 104
        for colonne% = 1 to  6
            print_target_is num_objet%
            2d_target_is num_objet%
                2d_fill_color color_pixel_red(num_objet%,25,25),color_pixel_green(num_objet%,25,25),color_pixel_blue(num_objet%,25,25)
                font_name num_objet%,"Arial"
                font_size num_objet%,11
                print_locate 15,16
                print "90°"
            num_objet% = num_objet% + 6
        next colonne%

    num_objet% = 105
        for colonne% = 1 to  6
            print_target_is num_objet%
            2d_target_is num_objet%
                2d_fill_color color_pixel_red(num_objet%,25,25),color_pixel_green(num_objet%,25,25),color_pixel_blue(num_objet%,25,25)
                font_name num_objet%,"Arial"
                font_size num_objet%,11
                print_locate 11,16
                print "180°"
            num_objet% = num_objet% + 6
        next colonne%

    num_objet% = 106
        for colonne% = 1 to  6
            print_target_is num_objet%
            2d_target_is num_objet%
                2d_fill_color color_pixel_red(num_objet%,25,25),color_pixel_green(num_objet%,25,25),color_pixel_blue(num_objet%,25,25)
                font_name num_objet%,"Arial"
                font_size num_objet%,11
                print_locate 11,16
                print "270°"
            num_objet% = num_objet% + 6
        next colonne%
end_sub
' ------------------------------------------------------------------------------
rouge90:
    inactive 0 : inactive 100
    rotationFaceRouge(-90)
    active 0 : active 100
return
' ------------------------------------------------------------------------------
bleu90:
    inactive 0 : inactive 100
    rotationFaceBleue(-90)
    active 0 : active 100
return
' ------------------------------------------------------------------------------
vert90:
    inactive 0 : inactive 100
    rotationFaceVerte(90)
    active 0 : active 100
return
' ------------------------------------------------------------------------------
jaune90:
    inactive 0 : inactive 100
    rotationFaceJaune(90)
    active 0 : active 100
return
' ------------------------------------------------------------------------------
orange90:
    inactive 0 : inactive 100
    rotationFaceOrange(90)
    active 0 : active 100
return
' ------------------------------------------------------------------------------
blanc90:
    inactive 0 : inactive 100
    rotationFaceBlanche(-90)
    active 0 : active 100
return
' ------------------------------------------------------------------------------
rouge180:
    inactive 0 : inactive 100
    rotationFaceRouge(-180)
    active 0 : active 100            
return
' ------------------------------------------------------------------------------
bleu180:
    inactive 0 : inactive 100
    rotationFaceBleue(-180)
    active 0 : active 100
return
' ------------------------------------------------------------------------------
vert180:
    inactive 0 : inactive 100
    rotationFaceVerte(180)
    active 0 : active 100
return
' ------------------------------------------------------------------------------
jaune180:
    inactive 0 : inactive 100
    rotationFaceJaune(180)
    active 0 : active 100
return
' ------------------------------------------------------------------------------
orange180:
    inactive 0 : inactive 100
    rotationFaceOrange(180)
    active 0 : active 100
return
' ------------------------------------------------------------------------------
blanc180:
    inactive 0 : inactive 100
    rotationFaceBlanche(-180)
    active 0 : active 100
return
' ------------------------------------------------------------------------------
rouge270:
    inactive 0 : inactive 100
    rotationFaceRouge(-270)
    active 0 : active 100
return
' ------------------------------------------------------------------------------
bleu270:
    inactive 0 : inactive 100
    rotationFaceBleue(-270)
    active 0 : active 100
return
' ------------------------------------------------------------------------------
vert270:
    inactive 0 : inactive 100
    rotationFaceVerte(270)
    active 0 : active 100
return
' ------------------------------------------------------------------------------
jaune270:
    inactive 0 : inactive 100
    rotationFaceJaune(270)
    active 0 : active 100
return
' ------------------------------------------------------------------------------
orange270:
    inactive 0 : inactive 100
    rotationFaceOrange(270)
    active 0 : active 100
return
' ------------------------------------------------------------------------------
blanc270:
    inactive 0 : inactive 100
    rotationFaceBlanche(-270)
    active 0 : active 100
return
' ------------------------------------------------------------------------------
rouge_90:
    inactive 0 : inactive 100
    rotationFaceRouge(90)
    active 0 : active 100
return
' ------------------------------------------------------------------------------
bleu_90:
    inactive 0 : inactive 100
    rotationFaceBleue(90)
    active 0 : active 100
return
' ------------------------------------------------------------------------------
vert_90:
    inactive 0 : inactive 100
    rotationFaceVerte(-90)
    active 0 : active 100
return
' ------------------------------------------------------------------------------
jaune_90:
    inactive 0 : inactive 100
    rotationFaceJaune(-90)
    active 0 : active 100
return
' ------------------------------------------------------------------------------
orange_90:
    inactive 0 : inactive 100
    rotationFaceOrange(-90)
    active 0 : active 100
return
' ------------------------------------------------------------------------------
blanc_90:
    inactive 0 : inactive 100
    rotationFaceBlanche(90)
    active 0 : active 100
return
' ------------------------------------------------------------------------------
rouge_180:
    inactive 0 : inactive 100
    rotationFaceRouge(180)
    active 0 : active 100
return
' ------------------------------------------------------------------------------
bleu_180:
    inactive 0 : inactive 100
    rotationFaceBleue(180)
    active 0 : active 100
return
' ------------------------------------------------------------------------------
vert_180:
    inactive 0 : inactive 100
    rotationFaceVerte(-180)
    active 0 : active 100
return
' ------------------------------------------------------------------------------
jaune_180:
    inactive 0 : inactive 100
    rotationFaceJaune(-180)
    active 0 : active 100
return
' ------------------------------------------------------------------------------
orange_180:
    inactive 0 : inactive 100
    rotationFaceOrange(-180)
    active 0 : active 100
return
' ------------------------------------------------------------------------------
blanc_180:
    inactive 0 : inactive 100
    rotationFaceBlanche(180)
    active 0 : active 100
return
' ------------------------------------------------------------------------------
rouge_270:
    inactive 0 : inactive 100
    rotationFaceRouge(270)
    active 0 : active 100
return
' ------------------------------------------------------------------------------
bleu_270:
    inactive 0 : inactive 100
    rotationFaceBleue(270)
    active 0 : active 100
return
' ------------------------------------------------------------------------------
vert_270:
    inactive 0 : inactive 100
    rotationFaceVerte(-270)
    active 0 : active 100
return
' ------------------------------------------------------------------------------
jaune_270:
    inactive 0 : inactive 100
    rotationFaceJaune(-270)
    active 0 : active 100
return
' ------------------------------------------------------------------------------
orange_270:
    inactive 0 : inactive 100
    rotationFaceOrange(-270)
    active 0 : active 100
return
' ------------------------------------------------------------------------------
blanc_270:
    inactive 0 : inactive 100
    rotationFaceBlanche(270)
    active 0 : active 100
return
' ------------------------------------------------------------------------------
sub rotationFaceRouge(r%)
    dim_local angleDepart%, angleStop%, sensRotation%
    ' Le centre de la face est ROUGE

    ' on détermine les sens de rotation
    if r% < 0
        sensRotation% = -1
    else
        sensRotation% = 1
    end_if
    
    angleDepart% = o3d_x_rotate(13)
    angleStop% = angleDepart% + r%
        
    for r% = angleDepart% to angleStop% step sensRotation%

        3d_x_rotate 13,r% :' centre rouge

        3d_x_rotate 19,r%
        3d_z_position 19,sqr(8)*cos(135+r%)
        3d_y_position 19,sqr(8)*sin(135+r%)

        3d_x_rotate 10,r%
        3d_z_position 10,2*cos(90+r%)
        3d_y_position 10,2*sin(90+r%)

        3d_x_rotate 1,r%
        3d_z_position 1,sqr(8)*cos(45+r%)
        3d_y_position 1,sqr(8)*sin(45+r%)

        3d_x_rotate 4,r%
        3d_z_position 4,2*cos(r%)
        3d_y_position 4,2*sin(r%)

        3d_x_rotate 7,r%
        3d_z_position 7,sqr(8)*cos(-45+r%)
        3d_y_position 7,sqr(8)*sin(-45+r%)

        3d_x_rotate 16,r%
        3d_z_position 16,2*cos(-90+r%)
        3d_y_position 16,2*sin(-90+r%)

        3d_x_rotate 25,r%
        3d_z_position 25,sqr(8)*cos(-135+r%)
        3d_y_position 25,sqr(8)*sin(-135+r%)

        3d_x_rotate 22,r%
        3d_z_position 22,2*cos(-180+r%)
        3d_y_position 22,2*sin(-180+r%)

        pause 5
    next r%
end_sub
' ------------------------------------------------------------------------------
sub rotationFaceBleue(r%)
    dim_local angleDepart%, angleStop%, sensRotation%
    ' Le centre de la face est BLEU

    ' on détermine les sens de rotation
    if r% < 0
        sensRotation% = -1
    else
        sensRotation% = 1
    end_if
    
    angleDepart% = o3d_z_rotate(5)
    angleStop% = angleDepart% + r%
        
    for r% = angleDepart% to angleStop% step sensRotation%

        3d_z_rotate 5,r% :' centre bleu

        3d_z_rotate 1,r%
        3d_x_position 1,sqr(8)*cos(135+r%)
        3d_y_position 1,sqr(8)*sin(135+r%)

        3d_z_rotate 2,r%
        3d_x_position 2,2*cos(90+r%)
        3d_y_position 2,2*sin(90+r%)

        3d_z_rotate 3,r%
        3d_x_position 3,sqr(8)*cos(45+r%)
        3d_y_position 3,sqr(8)*sin(45+r%)

        3d_z_rotate 6,r%
        3d_x_position 6,2*cos(r%)
        3d_y_position 6,2*sin(r%)

        3d_z_rotate 9,r%
        3d_x_position 9,sqr(8)*cos(-45+r%)
        3d_y_position 9,sqr(8)*sin(-45+r%)

        3d_z_rotate 8,r%
        3d_x_position 8,2*cos(-90+r%)
        3d_y_position 8,2*sin(-90+r%)

        3d_z_rotate 7,r%
        3d_x_position 7,sqr(8)*cos(-135+r%)
        3d_y_position 7,sqr(8)*sin(-135+r%)

        3d_z_rotate 4,r%
        3d_x_position 4,2*cos(-180+r%)
        3d_y_position 4,2*sin(-180+r%)

        pause 5
    next r%
end_sub
' ------------------------------------------------------------------------------
sub rotationFaceOrange(r%)
    dim_local angleDepart%, angleStop%, sensRotation%
    ' Le centre de la face est ORANGE

    ' on détermine les sens de rotation
    if r% < 0
        sensRotation% = -1
    else
        sensRotation% = 1
    end_if
    
    angleDepart% = o3d_x_rotate(15)
    angleStop% = angleDepart% + r%
        
    for r% = angleDepart% to angleStop% step sensRotation%

        3d_x_rotate 15,r% :' centre orange

        3d_x_rotate 3,r%
        3d_z_position 3,sqr(8)*cos(135+r%)
        3d_y_position 3,sqr(8)*sin(135+r%)

        3d_x_rotate 12,r%
        3d_z_position 12,2*cos(90+r%)
        3d_y_position 12,2*sin(90+r%)

        3d_x_rotate 21,r%
        3d_z_position 21,sqr(8)*cos(45+r%)
        3d_y_position 21,sqr(8)*sin(45+r%)

        3d_x_rotate 24,r%
        3d_z_position 24,2*cos(r%)
        3d_y_position 24,2*sin(r%)

        3d_x_rotate 27,r%
        3d_z_position 27,sqr(8)*cos(-45+r%)
        3d_y_position 27,sqr(8)*sin(-45+r%)

        3d_x_rotate 18,r%
        3d_z_position 18,2*cos(-90+r%)
        3d_y_position 18,2*sin(-90+r%)

        3d_x_rotate 9,r%
        3d_z_position 9,sqr(8)*cos(-135+r%)
        3d_y_position 9,sqr(8)*sin(-135+r%)

        3d_x_rotate 6,r%
        3d_z_position 6,2*cos(-180+r%)
        3d_y_position 6,2*sin(-180+r%)

        pause 5
    next r%
end_sub
' ------------------------------------------------------------------------------
sub rotationFaceVerte(r%)
    dim_local angleDepart%, angleStop%, sensRotation%
    ' Le centre de la face est VERTE

    ' on détermine les sens de rotation
    if r% < 0
        sensRotation% = -1
    else
        sensRotation% = 1
    end_if
    
    angleDepart% = o3d_z_rotate(23)
    angleStop% = angleDepart% + r%
        
    for r% = angleDepart% to angleStop% step sensRotation%

        3d_z_rotate 23,r% :' centre vert

        3d_z_rotate 21,r%
        3d_x_position 21,sqr(8)*cos(135+r%)
        3d_y_position 21,sqr(8)*sin(135+r%)

        3d_z_rotate 20,r%
        3d_x_position 20,2*cos(90+r%)
        3d_y_position 20,2*sin(90+r%)

        3d_z_rotate 19,r%
        3d_x_position 19,sqr(8)*cos(45+r%)
        3d_y_position 19,sqr(8)*sin(45+r%)

        3d_z_rotate 22,r%
        3d_x_position 22,2*cos(r%)
        3d_y_position 22,2*sin(r%)

        3d_z_rotate 25,r%
        3d_x_position 25,sqr(8)*cos(-45+r%)
        3d_y_position 25,sqr(8)*sin(-45+r%)

        3d_z_rotate 26,r%
        3d_x_position 26,2*cos(-90+r%)
        3d_y_position 26,2*sin(-90+r%)

        3d_z_rotate 27,r%
        3d_x_position 27,sqr(8)*cos(-135+r%)
        3d_y_position 27,sqr(8)*sin(-135+r%)

        3d_z_rotate 24,r%
        3d_x_position 24,2*cos(-180+r%)
        3d_y_position 24,2*sin(-180+r%)

        pause 5
    next r%
end_sub
' ------------------------------------------------------------------------------
sub rotationFaceBlanche(r%)
    dim_local angleDepart%, angleStop%, sensRotation%
    ' Le centre de la face est BLANCHE

    ' on détermine les sens de rotation
    if r% < 0
        sensRotation% = -1
    else
        sensRotation% = 1
    end_if
    
    angleDepart% = o3d_y_rotate(11)
    angleStop% = angleDepart% + r%
        
    for r% = angleDepart% to angleStop% step sensRotation%

        3d_y_rotate 11,r% :' centre blanc

        3d_y_rotate 3,r%
        3d_z_position 3,sqr(8)*cos(45+r%)
        3d_x_position 3,sqr(8)*sin(45+r%)

        3d_y_rotate 2,r%
        3d_z_position 2,2*cos(r%)
        3d_x_position 2,2*sin(r%)

        3d_y_rotate 1,r%
        3d_z_position 1,sqr(8)*cos(-45+r%)
        3d_x_position 1,sqr(8)*sin(-45+r%)

        3d_y_rotate 10,r%
        3d_z_position 10,2*cos(-90+r%)
        3d_x_position 10,2*sin(-90+r%)

        3d_y_rotate 19,r%
        3d_z_position 19,sqr(8)*cos(-135+r%)
        3d_x_position 19,sqr(8)*sin(-135+r%)

        3d_y_rotate 20,r%
        3d_z_position 20,2*cos(-180+r%)
        3d_x_position 20,2*sin(-180+r%)

        3d_y_rotate 21,r%
        3d_z_position 21,sqr(8)*cos(-225+r%)
        3d_x_position 21,sqr(8)*sin(-225+r%)

        3d_y_rotate 12,r%
        3d_z_position 12,2*cos(-270+r%)
        3d_x_position 12,2*sin(-270+r%)

        pause 5
    next r%
end_sub
' ------------------------------------------------------------------------------
sub rotationFaceJaune(r%)
    dim_local angleDepart%, angleStop%, sensRotation%
    ' Le centre de la face est JAUNE

    ' on détermine les sens de rotation
    if r% < 0
        sensRotation% = -1
    else
        sensRotation% = 1
    end_if
    
    angleDepart% = o3d_y_rotate(17)
    angleStop% = angleDepart% + r%
        
    for r% = angleDepart% to angleStop% step sensRotation%

        3d_y_rotate 17,r% :' centre jaune

        3d_y_rotate 27,r%
        3d_z_position 27,sqr(8)*cos(135+r%)
        3d_x_position 27,sqr(8)*sin(135+r%)

        3d_y_rotate 26,r%
        3d_z_position 26,2*cos(180+r%)
        3d_x_position 26,2*sin(180+r%)

        3d_y_rotate 25,r%
        3d_z_position 25,sqr(8)*cos(225+r%)
        3d_x_position 25,sqr(8)*sin(225+r%)

        3d_y_rotate 16,r%
        3d_z_position 16,2*cos(-90+r%)
        3d_x_position 16,2*sin(-90+r%)

        3d_y_rotate 7,r%
        3d_z_position 7,sqr(8)*cos(-45+r%)
        3d_x_position 7,sqr(8)*sin(-45+r%)

        3d_y_rotate 8,r%
        3d_z_position 8,2*cos(r%)
        3d_x_position 8,2*sin(r%)

        3d_y_rotate 9,r%
        3d_z_position 9,sqr(8)*cos(45+r%)
        3d_x_position 9,sqr(8)*sin(45+r%)

        3d_y_rotate 18,r%
        3d_z_position 18,2*cos(90+r%)
        3d_x_position 18,2*sin(90+r%)

        pause 5
    next r%
end_sub

' ------------------------------------------------------------------------------
quitter:
    terminate
return

Pour les rotations, mêmes remarques que pour le cube chainé. Il n’y a pas encore de mise en mémoire des 6 paramètres de chaque cube élémentaire après une rotation. Il faut donc retourner à la position initiale de la face avant d’en tourner une autre.

Bonne continuation !
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 4 Empty
MessageSujet: Re: Projet d'un Rubik's cube en 3D   Projet d'un Rubik's cube en 3D - Page 4 EmptySam 1 Oct 2022 - 11:14

Marc a écrit:
Il n’y a pas encore de mise en mémoire des 6 paramètres de chaque cube élémentaire après une rotation
Je ne suis pas sur de te comprendre, regarde mon démonstrateur.
Chaque cube conservent la mémoire de ça rotation "cub 90 0 90"
Pour reprendre l'idée que un codeur est capable de résoudre ce qui parait ne pas être dans son champ de compétence.
Il suffit de lui dire que chaque cube mesh comporte toutes les couleurs et en tournant sur lui même il se comporte comme un pixel.
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 4 Empty
MessageSujet: Re: Projet d'un Rubik's cube en 3D   Projet d'un Rubik's cube en 3D - Page 4 EmptySam 1 Oct 2022 - 12:23

Bonjour Mindstorm,

J'ai appliqué la texture des carrés de marc sur ton code de la page précédente.
Ca permet d'avoir une meilleur visibilité.

C'est vrai que ton code est relativement simple et court comparé à celui de Marc.
Mais est il possible d'effectuer les autres déplacements aussi facilement ?
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
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 4 Empty
MessageSujet: Re: Projet d'un Rubik's cube en 3D   Projet d'un Rubik's cube en 3D - Page 4 EmptySam 1 Oct 2022 - 12:28

mindstorm a écrit:
... et si sylverman ou Minibug veulent participer, j'ai trouvé une autre solution sans chainage cette nuit.
En fait, je participe silencieusement. cheers
Pour le problème de 3d_chain_break, je me suis rendu compte que ça ne fonctionnait pas correctement lorsque j'ai posté le bug de 3d_chain. Du coup, j'ai opté pour la solution sans chainage, alors j'utilise le cube fourni par Jack pour coder. J'avance lentement  drunken
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 4 Empty
MessageSujet: Re: Projet d'un Rubik's cube en 3D   Projet d'un Rubik's cube en 3D - Page 4 EmptySam 1 Oct 2022 - 21:18

Bonjour à tous
@Minibug
La réponse est simple,
pour un codeur qui maitrise les Matrices (par exemple papydall sunny ) rien de plus facile.
Pour un dessinateur industriel qui révise son bac, un peut de transpiration pour chercher ces cours pale ... (une heure sur internet pour moi)
mais promis, le code doit être cours.
Pour toi, pense à la méthode de la main droite santa et regarde mes déplacements, ils ne sont pas si simple! (dans le repère X,Y,Z les coordonnées i,j,k du cube tourne avec le cube(c'est un mini trièdre qui appartient au cube))

Pour Silverman , normalement après avoir codé la rotation du cube pour obtenir la bonne couleur sur la bonne face...(soit pas mal de ligne de code il me semble!)
la solution sera au bout du tunnel car les cubes ne se déplacent pas et le choix des faces en est facilité.

attention Marc vas tous nous ridiculiser king
bon courage
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 4 Empty
MessageSujet: Re: Projet d'un Rubik's cube en 3D   Projet d'un Rubik's cube en 3D - Page 4 EmptySam 1 Oct 2022 - 22:17

Mindstorm a écrit:
attention Marc vas tous nous ridiculiser

Ca risquerai bien d'arriver...

Il maitrise parfaitement la programmation et en plus il est très à l'aise en trigonométrie.
Et pout terminer il travaille de façon méthodique et il est très organisé.
Rien qu'à voir le travail de préparation sur le cube.... drunken
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 4 Empty
MessageSujet: Re: Projet d'un Rubik's cube en 3D   Projet d'un Rubik's cube en 3D - Page 4 EmptyDim 2 Oct 2022 - 11:40

Pour vous permettre de coiffer Marc sur le poteau
Un dernier coup de pouce
Le trièdrev"ijk" visible.
Pour ma part j'utilise ma main droite (le pouce est i, l'index j et le majeur k)

première étape
i est sur l'axe X,j sur l'axe Y et k sur l'axe Z
si je veux une rotation suivant l'axe Z de 90° je tourne le cub suivant l'axe k(z du cub) de 90°
après la rotation i est passé sur l'axe Y , j est en -X et k ne change pas
Donc, si je veux maintenant une rotation suivant l'axe X de 90°
je cherche l'axe du cub qui est sur l'axe X et son sens soit -j(-zcub)
j'ai fini
pour tourné suivant l'axe des X de 90° il suffit tournée le cub suivant l'axe j(ycub)mais de -90°
et ainsi de suite
le code est fini, il suffit de l'écrire lol!

Code:
scene3d 1
form 2:Left 2,600:height 2,800:top 2,0:width 2,70
full_space 1
cam_position 10,10,10
dim i%,j%,x,y,z,d,c,r,cub,mesh,cubi,cubj,cubk
print_target_is 2
triedre()

mesh=151 :cub=150:cubi=145:cubj=146:cubk=147
3d_mesh mesh
3d_load_object mesh,"cube.3ds"
3d_load_texture mesh, "cube.bmp"
rem constructioncube()
3d_cube cub,0.1  :3d_chain cub,mesh
triedreijk()


wait 2000
x=0:y=0:z=0
r=1

for i%=1 to 3
        z=r*30*i%
        3d_rotate cub,x,y,z
        3d_rotate cubi,x,y,z
        3d_rotate cubj,x,y,z
        3d_rotate cubk,x,y,z
    wait 300
    next i%
    print "cub"
print o3d_x_rotate (cub)
print o3d_y_rotate (cub)    
print o3d_z_rotate (cub)

wait 1000



end
'___________________________________________________________________________

sub rotationprogressive()
    for i%=1 to 3
        z=r*30*i%
        3d_rotate d+1,x,y,z
        3d_rotate d+2,x,y,z
        3d_rotate d+3,x,y,z
        3d_rotate d+4,x,y,z
        3d_rotate d+5,x,y,z
        3d_rotate d+6,x,y,z
        3d_rotate d+7,x,y,z
        3d_rotate d+8,x,y,z
        3d_rotate d+9,x,y,z
    wait 300
    next i%
end_sub
'___________________________________________________________________________
      
 sub constructionmesh()
     for j%=1 to 9
         for i%=1 to 3
             mesh=(100*i%)+j%
             3d_mesh mesh
             3d_load_object mesh,"cube.3ds"
             3d_load_texture mesh, "cube.bmp"
         next i%
     next j%
 end_sub
 '__________________________________________________________________________
 
 sub constructioncube()
     for j%=1 to 9
         for i%=1 to 3
             cub=(10*i%)+j%
             3d_cube cub,1
         next i%
     next j%
 end_sub
 '_________________________________________________________________________
 
 sub chainage()
     for j%=1 to 9
         for i%=1 to 3
         cub=(i%*10)+j%
         mesh=(i%*100)+j%
         3d_chain cub,mesh
         next i%
     next j%
 end_sub
 '_________________________________________________________________________
 
 sub positionmesh()
     for j%=1 to 3
         z=2.01*(2-j%)
         c=j%*100
         3d_position c+1,0,0,z
         3d_position c+2,0,2.01,z
         3d_position c+3,0,-2.01,z
         3d_position c+4,2.01,0,z
         3d_position c+5,2.01,2.01,z
         3d_position c+06,2.01,-2.01,z
         3d_position c+7,-2.01,0,z
         3d_position c+8,-2.01,2.01,z
         3d_position c+9,-2.01,-2.01,z
     next j%
 end_sub
 '_________________________________________________________________________
 
 sub triedre()
     3d_cube 1,1     :3d_scale 1,12,0.1,0.1
     3d_cube 2,1     :3d_scale 2,0.1,12,0.1
     3d_cube 3,1     :3d_scale 3,0.1,0.1,12
     3d_cone 4,.8,.3 :3d_x_position 4,6 :3d_z_rotate 4,-90
     3d_cone 5,.8,.3 :3d_y_position 5,6
     3d_cone 6,.8,.3 :3d_z_position 6,6 :3d_x_rotate 6,-90
     3d_text 7,"X"     : 3d_x_position 7,6.5
     3d_text 8,"Y"     : 3d_y_position 8,6.5
     3d_text 9,"Z"     : 3d_z_position 9,7.1 :3d_y_rotate 9,90
 end_sub
 '_________________________________________________________________________
 
 
 sub triedreijk()
     3d_cube cubi,0.1
     3d_cube cubj,0.1
     3d_cube cubk,0.1
     3d_text 10004,"i" :3d_x_position 10004,2:3d_color 10004,200,0,0 :3d_chain cubi,10004
     3d_text 10005,"j" :3d_y_position 10005,2:3d_color 10005,200,0,0 :3d_chain cubj,10005
     3d_text 10006,"k" :3d_z_position 10006,2:3d_color 10006,200,0,0 :3d_chain cubk,10006    
 end_sub    
 

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 4 Empty
MessageSujet: Re: Projet d'un Rubik's cube en 3D   Projet d'un Rubik's cube en 3D - Page 4 EmptyLun 3 Oct 2022 - 15:09

Bon, en fait c'était pas si compliqué à réaliser, mais panoramic nous a réservé une bien mauvaise surprise le fourbe!
Il m'a fallu moins de deux jours pour coder, et après une pause de qq jours, quatre de plus pour comprendre pourquoi mon code ne fonctionnait pas correctement(des copier-coller-merdé...). Pourtant, tout était logique dans le code, c'était incompréhensible scratch  scratch  scratch
Je décide de tester le fondamental et là, miracle! En vérifiant le sens de rotation de chaque axe, et bien devinez... Il y en a un qui tourne à l'envers, un rebelle,  si si !!!
Les axes Y et Z tournent en sens horaire, tandis que L'axe X tourne dans le sens anti-horaire, lui! C'était juste à cause de ça que mon code ne marchait pas Shocked .
Et le votre aussi, forcément tongue

Après avoir tenu compte de ce problème dans le programme, ça marche beaucoup mieux Very Happy . Bien que le code ne soit pas complètement nettoyé et commenté, je le présente quand même. Voici 10 rotations de couronnes, au hasard :

Code:

dim posX%,posY%,posZ%
dim NorientX%,NorientY%,NorientZ%

dim i%,obj%,Angle_rot,A%,x,y,z,Norient%,pos%,rot%,axe$,face$,tmp
dim objX,objY,objZ
dim txt$
dim test%,arrondi%

posX%=3
posY%=4
posZ%=5
NorientX%=9
NorientY%=10
NorientZ%=11

creation_scene()

' MAIN =========================================================================
'
' Angle_rot = +-90 ou +-180 ou +-270
' axe$  =  "x" ou "y" ou "z"
' face$ = "-2" ou "0" ou "2"
'
' ==============================================================================

' qq tests aléatoires
for test%=1 to 10
  arrondi%=rnd(2.499)+1
  Angle_rot = arrondi% * 90 * sgn(rnd(1)-0.5)
  '
  arrondi% = rnd(2.499)+1
  select arrondi%
      case 1: axe$="x"
      case 2: axe$="y"
      case 3: axe$="z"
  end_select
  '
  arrondi% = rnd(2.499)+1
  select arrondi%
      case 1: face$="-2"
      case 2: face$="0"
      case 3: face$="2"
  end_select
  '
  caption 0,"Test n°"+str$(test%)+" :  Angle = "+str$(Angle_rot)+"°  /  Axe = "+axe$+"  /  Couronne = "+face$
  rotation_couronne(Angle_rot,axe$,face$)
next test%
caption 0,"Terminé"



END
' ==============================================================================
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
  '
  Norient%=pos%+6
  rot%=pos%-2
  '
  for A%=sgn(Angle_rot) to Angle_rot step sgn(Angle_rot)
      for i%=1 to 27
        if grid_read$(1,i%,pos%)=face$
            '
            objX=val(grid_read$(1,i%,posX%))
            objY=val(grid_read$(1,i%,posY%))
            objZ=val(grid_read$(1,i%,posZ%))
            Matrice_Rotation(objX,objY,objZ,A%,rot%)
            '
            3d_position i%,x,y,z
            '
            tmp=val(grid_read$(1,i%,Norient%))
            if Norient%=NorientX% and abs(tmp)>1 then tmp=0-tmp
            if Norient%=NorientY% and abs(tmp)=1 then tmp=0-tmp
            if Norient%=NorientZ% and abs(tmp)=1 then tmp=0-tmp
            '
            select tmp
              case -3: 3d_z_rotate i%,o3d_z_rotate(i%)-1*sgn(Angle_rot)
              case -2: 3d_y_rotate i%,o3d_y_rotate(i%)-1*sgn(Angle_rot)
              case -1: 3d_x_rotate i%,o3d_x_rotate(i%)-1*sgn(Angle_rot)
              case 1 : 3d_x_rotate i%,o3d_x_rotate(i%)+1*sgn(Angle_rot)
              case 2 : 3d_y_rotate i%,o3d_y_rotate(i%)+1*sgn(Angle_rot)
              case 3 : 3d_z_rotate i%,o3d_z_rotate(i%)+1*sgn(Angle_rot)
            end_select
        end_if
      next i%
      display
  next A%

  ' mise à jour des données
  for i%=1 to 27
      if grid_read$(1,i%,pos%)=face$
        '
        ' positions
        x=val(grid_read$(1,i%,posX%))
        y=val(grid_read$(1,i%,posY%))
        z=val(grid_read$(1,i%,posZ%))
        Matrice_Rotation(x,y,z,Angle_rot,rot%)
        grid_write 1,i%,posX%,str$(x)
        grid_write 1,i%,posY%,str$(y)
        grid_write 1,i%,posZ%,str$(z)
        '
        ' sens de rotation
        x=val(grid_read$(1,i%,NorientX%))
        y=val(grid_read$(1,i%,NorientY%))
        z=val(grid_read$(1,i%,NorientZ%))
        Matrice_Rotation(x,y,z,Angle_rot,rot%)
        grid_write 1,i%,NorientX%,str$(x)
        grid_write 1,i%,NorientY%,str$(y)
        grid_write 1,i%,NorientZ%,str$(z)
      end_if
  next i%
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 creation_scene()
  ' données stockées dans un grid
  create_hide
  grid 1
  ' left 1,450 : width 1,800 : height 1,680 : full_space 0 :' débogage pour CREATE_HIDE en rem
  create_show
 
  grid_row 1,27
  grid_row_fixed 1,0
 
  grid_column 1,11
  grid_column_fixed 1,0
 
  ' creation scène
  degrees
 
  SCENE3D 2:HEIGHT 2,400:WIDTH 2,400
  axes_show
  color 2,64,64,64
  ' la caméra est créée en 0,0,5
  ' on la déplace pour voir 3 faces du cube
  CAM_POSITION -10,6,6
 
  ' on crée 27 cubes texturés
  FOR I%=1 TO 27
      ' txt$=str$(I%) : 3D_MESH I%:3D_LOAD_OBJECT I%,"CUBE.3DS":3D_LOAD_TEXTURE I%,"CUBE"+txt$+".BMP" :' débogage
      3D_MESH I%:3D_LOAD_OBJECT I%,"CUBE.3DS":3D_LOAD_TEXTURE I%,"CUBEmarc.BMP"
  NEXT I%
 
  ' X axe rouge, sens de rotation anti-horaire
  ' Y axe vert, sens de rotation horaire
  ' Z axe bleu, sens de rotation horaire

  ' placement et texturage 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 1,obj%,posX%,str$(x)
            grid_write 1,obj%,posY%,str$(y)
            grid_write 1,obj%,posZ%,str$(z)
            grid_write 1,obj%,NorientX%,"1"
            grid_write 1,obj%,NorientY%,"2"
            grid_write 1,obj%,NorientZ%,"3"
        next z
      next y
  next x
end_sub
Au passage, ça rend vraiment bien avec la texture fourni par Marc!

EDIT: Fait quelques modifications mineures


Dernière édition par silverman le Lun 3 Oct 2022 - 20:32, édité 9 fois
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 4 Empty
MessageSujet: Re: Projet d'un Rubik's cube en 3D   Projet d'un Rubik's cube en 3D - Page 4 EmptyLun 3 Oct 2022 - 16:59

Chapeau Sylverman
A première vue ce n'est pas un bug!
Sylverman a écrit:
Les axes Y et Z tournent en sens horaire, tandis que L'axe X tourne dans le sens anti-horaire, lui!
Tu n'a juste pas utilisé la méthode de la main droite.
A confirmer par un codeur mathématicien Smile

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 4 Empty
MessageSujet: Re: Projet d'un Rubik's cube en 3D   Projet d'un Rubik's cube en 3D - Page 4 EmptyLun 3 Oct 2022 - 17:02

Bonjour Silverman,

Comme tu n'as joint aucun fichier j'ai adapté les fichiers bmp avec ceux de Marc, le cube.3ds et le cube.bmp.
J'ai tester ton code...mais a part afficher le cube c'est tout ce que je vois... scratch
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
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 4 Empty
MessageSujet: Re: Projet d'un Rubik's cube en 3D   Projet d'un Rubik's cube en 3D - Page 4 EmptyLun 3 Oct 2022 - 17:28

@mindstorm
Peu importe le placement des axes, ils ont une rotation propre imposé par le moteur 3D. Par exemple en darkbasic (langage de programmation 3D que j'ai pratiqué), le sens de rotation est le même pour les 3 axes, c'est commode et le rubik's cube aurait été simple à coder. En panoramic, après avoir compris le problème, il a fallu pour les axes, inverser les rotations uniquement quand : Y ou Z sont venus se superposer à X (on s'apprête à tourner autour de X), X est venu se superposer à Y (on s'apprête à tourner autour de Y), X est venu se superposer à Z (on s'apprête à tourner autour de Z). Sans cet axe inversé, ça n'aurait pas été difficile à coder et je suis convaincu que les panoramiciens auraient déjà fini de coder le rubik's cube.
Un code qui montre l'inversion de la rotation de X par rapport aux 2 autres axes:
Code:
dim i%


form 1 : top 1,32 : left 1,0
caption 1,"Rotation autour de l'axe X"
command_target_is 1
scene3d 10 : 3d_target_is 10
axes_show
cam_position -5,0,0
light_position -5,0,0
point_position 0,0,0.01
3d_cube 11,1


form 2 : top 2,32 : left 2,320
caption 2,"Rotation autour de l'axe Y"
command_target_is 2
scene3d 20 : 3d_target_is 20
axes_show
cam_position 0,-5,0
light_position 0,-5,0
point_position 0,0,0.01
3d_cube 21,1


form 3 : top 3,32 : left 3,640
caption 3,"Rotation autour de l'axe Z"
command_target_is 3
scene3d 30 : 3d_target_is 30
axes_show
cam_position 0,0,-5
light_position 0,0,-5
point_position 0,0,0.01
3d_cube 31,1

command_target_is 0

for i%=1 to 360
  3d_x_rotate 11,o3d_x_rotate(11)+1
  3d_y_rotate 21,o3d_y_rotate(21)+1
  3d_z_rotate 31,o3d_z_rotate(31)+1
  pause 1
  display
next i%
L'axe testé sort de l'oeil et regarde l'horizon. Pour X, on vois bien que ça tourne à l'envers!


@minibug
Oh la boulette! Une modification de dernière minute. J'ai ajouté les ligne 62 et 66 et j'y avait mis des "or" à la place des "and". Ca marche maintenant et c'est corrigé dans mon post précédent Embarassed


Dernière édition par silverman le Lun 3 Oct 2022 - 20:39, édité 2 fois
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 4 Empty
MessageSujet: Re: Projet d'un Rubik's cube en 3D   Projet d'un Rubik's cube en 3D - Page 4 EmptyLun 3 Oct 2022 - 19:19

lol! lol! lol!
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 4 Empty
MessageSujet: Re: Projet d'un Rubik's cube en 3D   Projet d'un Rubik's cube en 3D - Page 4 EmptyLun 3 Oct 2022 - 20:26

Tu as raison sylverman
la méthode de la main droit t'aurait juste évité de chercher le sens de rotation de chaque axe.
Tu reste le vainqueur sans conteste de ce jeu!!!
Je continu sur ma voie (je code très lentement pale par manque de pratique)
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 4 Empty
MessageSujet: Re: Projet d'un Rubik's cube en 3D   Projet d'un Rubik's cube en 3D - Page 4 EmptyLun 3 Oct 2022 - 21:18

Bravo Silverman ! cheers

Oui tu est le premier a avoir un cube entièrement fonctionnel !!
Tu es le champion en titre !!! Very Happy Very Happy Very Happy

En plus le fonctionnement de ta sub est très simple avec les paramètres à renseigner.

Du coup je vais peut être tenter une interface utilisateur avec des boutons permettant les déplacements.
et peut être 2 ou 3 autres choses que j'ai en tête...
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 4 Empty
MessageSujet: Re: Projet d'un Rubik's cube en 3D   Projet d'un Rubik's cube en 3D - Page 4 EmptyLun 3 Oct 2022 - 21:27

Bonsoir à tous !

Waouuhh ! Bravo Silverman !  cheers   cheers   cheers

Très belle réussite !
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 4 Empty
MessageSujet: Re: Projet d'un Rubik's cube en 3D   Projet d'un Rubik's cube en 3D - Page 4 EmptyMar 4 Oct 2022 - 19:19

Bonsoir tout le monde !

En partant du code de Silverman, j'ai réalisé une petite interface pour piloter les mouvements du cube.
Ce n'est pas super en terme d'esthétique car j'ai utilisé des images de flèches existantes.
Mais elle ne sont pas toutes dans l'angle exacte du cube. Je reprendrai cela plus tard...

En attentant vous pouvez télécharger le fichier depuis ce lien.
Il suffit de le déposer ou vous voulez. vous cliquez pour l'installer et c'est tout !
Ensuite vous cliquez sur le fichier RubiksCube.exe pour le lancement comme d'habitude.

Encore un grand merci à toute la communauté et plus particulièrement à Silverman pour son code !
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
Contenu sponsorisé





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

Revenir en haut Aller en bas
 
Projet d'un Rubik's cube en 3D
Revenir en haut 
Page 4 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: