Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Projet d'un Rubik's cube en 3D | |
|
+7mindstorm Jack Jean Claude silverman Marc jjn4 Minibug 11 participants | |
Auteur | Message |
---|
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Projet d'un Rubik's cube en 3D Jeu 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 cubeComme 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 droiteY : Rotation du cube vers la face hauteZ : Rotation du cube vers la face avantMethode de résolutionLe 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-rubikhttps://thecube.guru/fr/resolution-rubiks-cube/ | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Projet d'un Rubik's cube en 3D Jeu 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. 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. | |
| | | mindstorm
Nombre de messages : 685 Age : 55 Localisation : charente Date d'inscription : 13/02/2013
| Sujet: Re: Projet d'un Rubik's cube en 3D Jeu 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 | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Projet d'un Rubik's cube en 3D Jeu 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=10365054J’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. | |
| | | mindstorm
Nombre de messages : 685 Age : 55 Localisation : charente Date d'inscription : 13/02/2013
| Sujet: Re: Projet d'un Rubik's cube en 3D Jeu 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 | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Projet d'un Rubik's cube en 3D Jeu 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. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Projet d'un Rubik's cube en 3D Jeu 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! | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Projet d'un Rubik's cube en 3D Ven 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.
| |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Projet d'un Rubik's cube en 3D Ven 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. | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Projet d'un Rubik's cube en 3D Ven 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. | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Projet d'un Rubik's cube en 3D Ven 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 ! Il n’y a pas de problème de ce côté-là. | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Projet d'un Rubik's cube en 3D Ven 21 Oct 2022 - 12:47 | |
| - Marc a écrit:
- J’ai identifié deux anomalies :
Effectivement cela a l'air de mieux fonctionner ! - 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.... | |
| | | mindstorm
Nombre de messages : 685 Age : 55 Localisation : charente Date d'inscription : 13/02/2013
| Sujet: Re: Projet d'un Rubik's cube en 3D Ven 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 | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Projet d'un Rubik's cube en 3D Ven 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. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Projet d'un Rubik's cube en 3D Ven 21 Oct 2022 - 15:32 | |
| Bonjour à tous, j'ai hâte de voir la suite.. | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Projet d'un Rubik's cube en 3D Ven 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. 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 ! | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Projet d'un Rubik's cube en 3D Ven 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). 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=10365764Merci de m'informer si vous remarquez une erreur, un oubli ou un bug. Bonne soirée à tous ! | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Projet d'un Rubik's cube en 3D Ven 21 Oct 2022 - 22:44 | |
| Bonsoir les amis ! Que de mouvement sur le forum ce soir !! 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 ! | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Projet d'un Rubik's cube en 3D Ven 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 | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Projet d'un Rubik's cube en 3D Sam 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 | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Projet d'un Rubik's cube en 3D Sam 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. @Papydall : Prends ton temps... Le programme ne devrait pas s'envoler !
Dernière édition par Minibug le Sam 22 Oct 2022 - 10:48, édité 1 fois | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Projet d'un Rubik's cube en 3D Sam 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 ! | |
| | | silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: Projet d'un Rubik's cube en 3D Sam 22 Oct 2022 - 11:18 | |
| Waou, bravo pour vos réalisations! : C'est un beau projet de groupe qui mériterait sa place dans la rubrique des projets réalisé en panoramic | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Projet d'un Rubik's cube en 3D Sam 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 ============================================================================
| |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Projet d'un Rubik's cube en 3D Sam 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 | |
| | | Contenu sponsorisé
| Sujet: Re: Projet d'un Rubik's cube en 3D | |
| |
| | | | Projet d'un Rubik's cube en 3D | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |