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 |
|
|
| Roues dentées... qui tournent | |
| | Auteur | Message |
---|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Roues dentées... qui tournent Dim 19 Aoû 2018 - 15:09 | |
| C'est très rustique et ça demanderait des ajustements, mais c'est juste pour voir. L'intérêt c'est la sub de tracé d'une étoile, inclinable éventuellement (an%<> 0) On peut ajuster la profondeur des branches dans la sub (variable ri%) - Code:
-
DIM x1%,y1%,w1%,nbr1%,an%,an2% DIM x2%,y2%,w2%,nbr2%
PICTURE 1: FULL_SPACE 1: 2D_TARGET_IS 1: 2D_PEN_WIDTH 2 x1% = 50: y1% = 50: w1% = 300: nbr1% = 20: ' roue dentée 1 w2% = 150: x2% = x1%+w1%-10: y2% = y1%+(w1%-w2%)/2: nbr2% = 10: ' roue dentée 2
FOR an% = 0 TO 360 STEP 2 CLS 2D_CIRCLE x1%+w1%/2,y1%+w1%/2,20: ' axe de rotation Etoile_Rot(x1%,y1%,w1%,nbr1%,an%): ' rotation sens trigonométrique an2% = 360-an% 2D_CIRCLE x2%+w2%/2,y2%+w2%/2,10 Etoile_Rot(x2%,y2%,w2%,nbr2%,an2%): ' rotation sens des aiguilles PAUSE 100 NEXT an% END ' ============================================================================== SUB Etoile_Rot(x%,y%,w%,nbr%,an%) ' Etoile en x%,y%, largeur/hauteur w%, nbr% branches ' an% = inclinaison (degrés) par rapport à la verticale DIM_LOCAL i%,rx%,ry%,ri%,t,xc%,yc%,xe%(100),ye%(100) rx% = w%/2: ry% = rx%: ' rayon externe xc% = x%+rx%: yc% = y%+ry%: ' coordonnées du centre ri% = rx%/2.62: ' rayon interne, à ajuster ri% = 8*rx%/10 DEGREES t = 90+an% FOR i% = 0 TO 2*nbr%-2 STEP 2 xe%(i%) = xc%+rx%*COS(t): ye%(i%) = yc%-rx%*SIN(t) t = t+360/nbr% NEXT i% t = 90+an%+180/nbr% FOR i% = 1 TO 2*nbr%-1 STEP 2 xe%(i%) = xc%+ri%*COS(t): ye%(i%) = yc%-ri%*SIN(t) t = t+360/nbr% NEXT i% 2D_POLY_FROM xe%(0),ye%(0) FOR i% = 1 TO nbr%*2-1: 2D_POLY_TO xe%(i%),ye%(i%): NEXT i% 2D_POLY_TO xe%(0),ye%(0) END_SUB ' ============================================================================== | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Roues dentées... qui tournent Dim 19 Aoû 2018 - 17:47 | |
| en un peu plus satisfaisant: - Code:
-
LABEL Quit DIM xc1%,yc1%,dout1%,dint1%,nde1%,da1% DIM xc2%,yc2%,dout2%,dint2%,nde2%,da2%,rapp%
PICTURE 1: FULL_SPACE 1: 2D_TARGET_IS 1: ON_CLICK 1,Quit 2D_PEN_WIDTH 2 xc1% = 250: yc1% = 200 dout1% = 300: ' diamètre extérieur dint1% = 260: ' diamètre intérieur nde1% = 30: ' nombre de dents (ajustable par la sub) da1% = 0: ' angle de départ xc2% = 435: yc2% = yc1% dout2% = 100 dint2% = 60 nde2% = 10 da2% = 20: ' angle de départ rapp% = nde1%/nde2%: ' rapport du nombre de dents WHILE 2>1 FOR da1% = 360 TO 0 STEP -2 CLS Roue_dentee(xc1%,yc1%,dout1%,dint1%,nde1%,da1%) 2D_CIRCLE xc1%,yc1%,20: ' axe roue 1 da2% = -1*rapp%*da1%-15: ' angle rotation roue 2, dans le rapport du nombre de dents, sens inverse Roue_dentee(xc2%,yc2%,dout2%,dint2%,nde2%,da2%) 2D_CIRCLE xc2%,yc2%,10: ' axe roue 2 PAUSE 100 NEXT da1% END_WHILE END ' ============================================================================== Quit: TERMINATE ' ============================================================================== SUB Roue_dentee(xc%,yc%,dex%,din%,nde%,da%) ' Dessin d'un roue dentée avec les paramètres courants (couleur, épaisseur etc.) ' Centrée en xc%,yc%, diamètres ext. dex% et int. din%, nombre de dents nbe% ' da% = angle de départ (decgrés) de la 1ère dent, à l'extrême droite. ' si da% = 0: la dent est horizontale. ' NB le nombre de dents peut être ajusté (en plus) par la sub pour un rebouclage ' régulier des dents. DIM_LOCAL x%,y%,rex%,rin%,an%,t% rex% = dex%/2: rin% = din%/2 ' ajustage éventuel du nombre de dents pour rebouclage correct an% = 360/nde%: WHILE an%<>360/nde%: nde%=nde%+1: an%=360/nde%: END_WHILE DEGREES x% = xc%+rex%*COS(da%): y% = yc%-rex%*SIN(da%): ' pointe de la dent de départ 2D_POLY_FROM x%,y% FOR t% = an%+da% TO 360+da% STEP an% x% = xc%+rin%*COS(t%-an%/2): y% = yc%-rin%*SIN(t%-an%/2) 2D_POLY_TO x%,y% x% = xc%+rex%*COS(t%): y% = yc%-rex%*SIN(t%) 2D_POLY_TO x%,y% NEXT t% END_SUB ' ============================================================================== Pour stopper, cliquer dans le Picture. Ce que je ne comprends pas bien, c'est que par moments le mouvement est fluide, plusieurs secondes, et puis ça se met à tressauter, et ça redevient fluide... ? | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Roues dentées... qui tournent Ven 24 Aoû 2018 - 9:19 | |
| Salut JL35 !
Effectivement, cycliquement les roues ralentissent puis reprennent leur vitesse. Peut-être qu'avec une compilation, le phénomène disparaîtra. En tous cas, ça s'engrène parfaitement. Bravo !
| |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Roues dentées... qui tournent Ven 24 Aoû 2018 - 10:28 | |
| Bonjour à tous, - JL35 a écrit:
- Ce que je ne comprends pas bien, c'est que par moments le mouvement est fluide, plusieurs secondes, et puis ça se met à tressauter, et ça redevient fluide... ?
Oui, j'ai tenté de placer un DISPLAY, mais ça n'apporte rien. Comme dit Marc, une version compilée serait peut-être plus fluide. En attendant tu peux toujours donner un petit coup de lime pour arrondir les dents de l'engrenage ça coincera moins. Plus simple: mettre les 2 roues dans un bain d'huile. | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Roues dentées... qui tournent Ven 24 Aoû 2018 - 11:32 | |
| Bonjour !
@JL35 J'ai la tête qui tourne.... J'ai remarqué une anomalie : dans ta boucle "FOR da1% = 360 TO 0 STEP -2" tu affiches 2 fois de suite la position "0" des engrenages : Une fois quand da1% = 0 et une fois quand da1%=360. 360°=0° Ce qui provoque un arrêt de rotation d'un pas de boucle à chaque tour de grande roue. Il faut donc remplacer dans la boucle le 360 par 359.
Voilà une petit goutte d'huile qui devrait améliorer la rotation.
Bonne continuation ! | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Roues dentées... qui tournent Ven 24 Aoû 2018 - 12:16 | |
| Bien vu Marc, il y a aussi CLS à remplacer par 2D_CLEAR. Et aussi supprimer la croix rouge de sortie pour éviter le message d'erreur concernant la boucle WHILE/END_WHILE, avec Border_hide 0 Bon, ça ne baigne pas encore tout à fait dans l'huile, mais ça s’améliore. - Code:
-
LABEL Quit DIM xc1%,yc1%,dout1%,dint1%,nde1%,da1% DIM xc2%,yc2%,dout2%,dint2%,nde2%,da2%,rapp%
PICTURE 1: FULL_SPACE 1: 2D_TARGET_IS 1: ON_CLICK 1,Quit Border_hide 0 alpha 2 : font_bold 2 : font_size 2,12 : caption 2,"Cliquez sur une roue pour quitter" 2D_PEN_WIDTH 2 xc1% = 250: yc1% = 200 dout1% = 300: ' diamètre extérieur dint1% = 260: ' diamètre intérieur nde1% = 30: ' nombre de dents (ajustable par la sub) da1% = 0: ' angle de départ xc2% = 435: yc2% = yc1% dout2% = 100 dint2% = 60 nde2% = 10 da2% = 20: ' angle de départ rapp% = nde1%/nde2%: ' rapport du nombre de dents WHILE 2>1 FOR da1% = 359 TO 0 STEP -2 2D_CLEAR : ' CLS Roue_dentee(xc1%,yc1%,dout1%,dint1%,nde1%,da1%) 2D_CIRCLE xc1%,yc1%,20: ' axe roue 1 da2% = -1*rapp%*da1%-15: ' angle rotation roue 2, dans le rapport du nombre de dents, sens inverse Roue_dentee(xc2%,yc2%,dout2%,dint2%,nde2%,da2%) 2D_CIRCLE xc2%,yc2%,10: ' axe roue 2 PAUSE 100 NEXT da1% END_WHILE END ' ============================================================================== Quit: TERMINATE return ' ============================================================================== SUB Roue_dentee(xc%,yc%,dex%,din%,nde%,da%) ' Dessin d'un roue dentée avec les paramètres courants (couleur, épaisseur etc.) ' Centrée en xc%,yc%, diamètres ext. dex% et int. din%, nombre de dents nbe% ' da% = angle de départ (decgrés) de la 1ère dent, à l'extrême droite. ' si da% = 0: la dent est horizontale. ' NB le nombre de dents peut être ajusté (en plus) par la sub pour un rebouclage ' régulier des dents. DIM_LOCAL x%,y%,rex%,rin%,an%,t% rex% = dex%/2: rin% = din%/2 ' ajustage éventuel du nombre de dents pour rebouclage correct an% = 360/nde%: WHILE an%<>360/nde%: nde%=nde%+1: an%=360/nde%: END_WHILE DEGREES x% = xc%+rex%*COS(da%): y% = yc%-rex%*SIN(da%): ' pointe de la dent de départ 2D_POLY_FROM x%,y% FOR t% = an%+da% TO 360+da% STEP an% x% = xc%+rin%*COS(t%-an%/2): y% = yc%-rin%*SIN(t%-an%/2) 2D_POLY_TO x%,y% x% = xc%+rex%*COS(t%): y% = yc%-rex%*SIN(t%) 2D_POLY_TO x%,y% NEXT t% END_SUB ' ============================================================================== A+PS: Je pense qu'en utilisant la 3D, ça pourrait baigner dans l'huile. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Roues dentées... qui tournent Ven 24 Aoû 2018 - 17:57 | |
| Merci les gars, que des bonnes idées, je note ! Pour la 3D, tu as peut-être raison Jean Claude, mais ça ne me tente que modérément de me plonger là-dedans... | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Roues dentées... qui tournent Ven 24 Aoû 2018 - 18:04 | |
| Ah la 3D, moi aussi ça me fait un peut "peur". Je pensais surtout à Marc qui a déjà de l'expérience dans ce domaine. A+ | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Roues dentées... qui tournent Ven 24 Aoû 2018 - 20:53 | |
| Malheureusement ce n’est pas possible en 3D. Il faudrait avoir une couleur de transparence (comme pour les sprites) pour pouvoir réaliser l'emboîtement des dents de ces engrenages.
| |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Roues dentées... qui tournent Ven 24 Aoû 2018 - 21:05 | |
| - Marc a écrit:
- Malheureusement ce n’est pas possible en 3D.
Il faudrait avoir une couleur de transparence (comme pour les sprites) pour pouvoir réaliser l'emboîtement des dents de ces engrenages. Alors il reste un SCENE2D et des SPRITE(s). Sérieusement, je me demande comment faire tourner un SPRITE sur lui même, je ne suis pas certain que cela soit possible ??? A+ | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Roues dentées... qui tournent Ven 24 Aoû 2018 - 21:37 | |
| En Panoramic, un sprite ne peut pas tourner... | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Roues dentées... qui tournent Ven 24 Aoû 2018 - 21:53 | |
| Bidouillage rapide avec 6 sprites : - Code:
-
LABEL Quit DIM xc1%,yc1%,dout1%,dint1%,nde1%,da1% DIM xc2%,yc2%,dout2%,dint2%,nde2%,da2%,rapp% DIM i%,SP%, vitesse% WIDTH 0,620 HEIGHT 0,480 PICTURE 50: FULL_SPACE 50: 2D_TARGET_IS 50 SCENE2D 51: FULL_SPACE 51: ON_CLICK 51,Quit 2D_PEN_WIDTH 2 xc1% = 250: yc1% = 200 dout1% = 300: ' diamètre extérieur dint1% = 260: ' diamètre intérieur nde1% = 30: ' nombre de dents (ajustable par la sub) da1% = 0: ' angle de départ xc2% = 435: yc2% = yc1% dout2% = 100 dint2% = 60 nde2% = 10 da2% = 20: ' angle de départ rapp% = nde1%/nde2%: ' rapport du nombre de dents SP%=1 ' WHILE 2>1 FOR da1% = 11 TO 0 STEP -2 CLS Roue_dentee(xc1%,yc1%,dout1%,dint1%,nde1%,da1%) 2D_CIRCLE xc1%,yc1%,20: ' axe roue 1 da2% = -1*rapp%*da1%-15: ' angle rotation roue 2, dans le rapport du nombre de dents, sens inverse Roue_dentee(xc2%,yc2%,dout2%,dint2%,nde2%,da2%) 2D_CIRCLE xc2%,yc2%,10: ' axe roue 2 PAUSE 100 IMAGE da1% SPRITE SP% 2D_IMAGE_COPY da1%,0,0,620,480 SPRITE_IMAGE_LOAD SP%,da1% SPRITE_HIDE SP% SP%=SP%+1 NEXT da1% ' END_WHILE
WHILE 2>1 vitesse%=MOUSE_Y_POSITION(51)/2 IF vitesse% < 5 THEN vitesse%=5 FOR i% = 1 TO 6 SPRITE_SHOW i% IF i% = 1 SPRITE_HIDE i%+5 ELSE SPRITE_HIDE i%-1 END_IF CAPTION 0, INT(vitesse%) PAUSE INT(vitesse%) NEXT i% END_WHILE
END ' ============================================================================== Quit: TERMINATE ' ============================================================================== SUB Roue_dentee(xc%,yc%,dex%,din%,nde%,da%) ' Dessin d'un roue dentée avec les paramètres courants (couleur, épaisseur etc.) ' Centrée en xc%,yc%, diamètres ext. dex% et int. din%, nombre de dents nbe% ' da% = angle de départ (decgrés) de la 1ère dent, à l'extrême droite. ' si da% = 0: la dent est horizontale. ' NB le nombre de dents peut être ajusté (en plus) par la sub pour un rebouclage ' régulier des dents. DIM_LOCAL x%,y%,rex%,rin%,an%,t% rex% = dex%/2: rin% = din%/2 ' ajustage éventuel du nombre de dents pour rebouclage correct an% = 360/nde%: WHILE an%<>360/nde%: nde%=nde%+1: an%=360/nde%: END_WHILE DEGREES x% = xc%+rex%*COS(da%): y% = yc%-rex%*SIN(da%): ' pointe de la dent de départ 2D_POLY_FROM x%,y% FOR t% = an%+da% TO 360+da% STEP an% x% = xc%+rin%*COS(t%-an%/2): y% = yc%-rin%*SIN(t%-an%/2) 2D_POLY_TO x%,y% x% = xc%+rex%*COS(t%): y% = yc%-rex%*SIN(t%) 2D_POLY_TO x%,y% NEXT t% END_SUB ' ======================== EDIT : je viens d'ajouter un asservissement de la vitesse à la position Y de la souris. La souris positionnée en haut du SCENE2D = vitesse maximum. La souris positionnée en bas de la fenêtre = vitesse plus lente.
Dernière édition par Marc le Ven 24 Aoû 2018 - 22:18, édité 1 fois | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Roues dentées... qui tournent Ven 24 Aoû 2018 - 22:01 | |
| Ben oui, dommage, à ma connaissance il n'y a pas de commandes de rotation des sprites, ça m'aurait bien intéressé. J'ai fait par ailleurs (pas publié) une sub d'affichage d'un texte donné autour d'un cercle donné, j'aurais bien voulu le faire avec des sprites (le caractère à afficher dans un sprite, rotation de l'angle voulu, puis apposition au bon endroit...). Au lieu de ça j'ai dû faire appel à une ressource externe (convert.exe) pour faire pivoter chaque caractère avant de l'appliquer sur le cercle. Ça marche, mais ce n'est pas du pur Panoramic... Il y a une fonction de KGF.dll qui permet (entre autres) de faire tourner une image ('TorturePicture') mais ce n'est pas très simple à utiliser, il va falloir que j'approfondisse. Ceci dit, l'absence de l'ami Klaus commence à être vraiment inquiétante... PS bonsoir Marc, on s'est croisés, je regarde ça tout de suite. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Roues dentées... qui tournent Ven 24 Aoû 2018 - 22:05 | |
| A première vue, Bravo Marc ! c'est bien fluide, chapeau ! C'est évidemment bien plus rapide que de dérouler la sub à chaque affichage. Il fallait y penser, j'adopte sans condition. - Jean Claude a écrit:
- En attendant tu peux toujours donner un petit coup de lime pour arrondir les dents de l'engrenage, ça coincera moins.
Un peu de patience Jean Claude, pas besoin de lime, tu laisses tourner pendant ton absence (8 jours...), et au retour tu verras qu'avec l'usure tout ira mieux.
Dernière édition par JL35 le Ven 24 Aoû 2018 - 22:24, édité 1 fois | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Roues dentées... qui tournent Ven 24 Aoû 2018 - 22:24 | |
| Mince, effectivement on se croise et recroise !
J'ai édité mon dernier source en ajoutant rapidement une vitesse variable. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Roues dentées... qui tournent Ven 24 Aoû 2018 - 22:25 | |
| Effectivement, je pensais à ça, la vitesse variable...
Ah oui, là c'est vraiment super ! La vitesse maxi est vraiment impressionnante, je ne pensais pas que ça pourrait aller aussi vite !
Encore bravo et re-bravo Marc !
Juste une petite remarque, pour pinailler: dans la boucle, vitesse% étant un entier par définition, il n'est pas utile de mettre INT(vitesse%) | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Roues dentées... qui tournent Sam 25 Aoû 2018 - 0:26 | |
| - Citation :
- Juste une petite remarque, pour pinailler: dans la boucle, vitesse% étant un entier par définition, il n'est pas utile de mettre INT(vitesse%)
Oui, tout à fait ! Dans la précipitation… Divisant la position de la souris par 2, j’allais obtenir un nombre à virgule. Je me suis dit que j’allais utiliser un float, d’où la présence des INT. Mais en cours de développement, j’ai pris un int avec comme nom variable (vitesse%) et j’ai quand même mis INT()… Etourderie de ma part. - Citation :
- J'ai fait par ailleurs (pas publié) une sub d'affichage d'un texte donné autour d'un cercle donné, j'aurais bien voulu le faire avec des sprites (le caractère à afficher dans un sprite, rotation de l'angle voulu, puis apposition au bon endroit...).
Au lieu de ça j'ai dû faire appel à une ressource externe (convert.exe) pour faire pivoter chaque caractère avant de l'appliquer sur le cercle. Ça marche, mais ce n'est pas du pur Panoramic... Pour faire tourner une lettre ou un texte d’un angle quelconque, tu peux utiliser la 3D avec un 3D_PLANE comme sur la boussole : https://panoramic.1fr1.net/t5912-boussoleAu lieu de l’aiguille, tu inscris une lettre, un texte ou n’importe quel dessin, voire un fichier BMP externe. Tu peux l’orienter de l’angle que tu veux. Peut-être y a-t-il quelque chose à exploiter de ce coté-là. - Citation :
- Encore bravo et re-bravo Marc !
C’est trop gentil, je n’ai pas fait grand-chose. C’est toi qui as fait ces engrenages et je pense que ça a dû être un sacré casse-tête à réaliser. Donc à toi : BRAVO ! | |
| | | Contenu sponsorisé
| Sujet: Re: Roues dentées... qui tournent | |
| |
| | | | Roues dentées... qui tournent | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |