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 |
|
|
| N'est pas Néo qui veut | |
| | Auteur | Message |
---|
Froggy One
Nombre de messages : 598 Date d'inscription : 06/01/2012
| Sujet: N'est pas Néo qui veut Mer 13 Mar 2013 - 10:20 | |
| Bon, j'avais du temps devant moi, alors vite ! au PANORAMIC ! Grâce à vous tous, je progresse dans mon ridicule mais si important (pour moi) projet de FAIRE TOURNER UN RECTANGLE !!! Pas de problème grâce à la matrice, oui mais voilà : c'est l'angle qui me pose un problème (déjà, dans les wargames, les Angles...)
J'ai cru comprendre (ne riez pas, je suis plutôt littéraire) que l'angle devait être converti par une formule du style :
Ang=Ang * 2 * pi / 360
Donc, si je veux faire tourner ma figure de 15°, tout baigne !!! ben non. si je boucle de 0 à 15, ET SANS CETTE FORMULE (que je cache provisoirement derrière un REM) j'ai une figure qui s'éloigne de façon quasi exponentielle tandis que si je l'applique, PANORAMIC cesse tout bonnement de fonctionner.
Voici mon code, à l'attention de tout Samaritain du web :
caption 0, "TANK move 0.0" rem 320 240
rem Affichage des éléments
top 0,(screen_y-height(0))/2 left 0,(screen_x-width(0))/2 ' picture 1:full_space 1:2d_target_is 1 color 1,50,130,13 ' rem 'Dimensions du rectangle dim LargRect%,HautRect% LargRect%=64:HautRect%=32
rem Calcul du 'centre de la fenêtre
dim xc%,yc% xc%=int(width(1)/2) yc%=int(height(1)/2)
rem on place les 4 coins du rectangle
dim xhd%,xhg%,xbg%,xbd% dim yhd%,yhg%,ybg%,ybd%
xhd%=xc%+int(LargRect%/2) yhd%=yc%-int(HautRect%/2) xhg%=xc%-int(LargRect%/2) yhg%=yc%-int(HautRect%/2) xbg%=xhg% ybg%=yc%+int(HautRect%/2) xbd%=xhd% ybd%=ybg%
rem on place les points pour voir
2d_point xc%,yc% 2d_point xhd%,yhd% 2d_point xhg%,yhg% 2d_point xbg%,ybg% 2d_point xbd%,ybd%
rem et on trace
2d_line xhd%,yhd%,xhg%,yhg% 2d_line xhg%,yhg%,xbg%,ybg% 2d_line xbg%,ybg%,xbd%,ybd% 2d_line xbd%,ybd%,xhd%,yhd%
rem silence on tourne
dim x1,y1,x2,y2,x3,y3,x4,y4 rem ce sont les xhd%, yhd% etc. transformés par rotation
dim Ang,pi:pi= 4* ATN(1) Ang=15 Ang=Ang * 2 * pi/360
dim mathg,mathd,matbg,matbd rem ce sont les coordonnées de la matrice, Néo !
for Ang=5 to 15
mathg=cos(Ang) mathd=sin(Ang) matbg=0-sin(Ang) matbd=cos(Ang)
x1=(mathg*xhd%)+(matbg*yhd%):y1=(mathd*xhd%)+(matbd*yhd%) x2=(mathg*xhg%)+(matbg*yhg%):y2=(mathd*xhg%)+(matbd*yhg%) x3=(mathg*xbg%)+(matbg*ybg%):y3=(mathd*xbg%)+(matbd*ybg%) x4=(mathg*xbd%)+(matbg*ybd%):y4=(mathd*xbd%)+(matbd*ybd%)
2d_line x1,y1,x2,y2 2d_line x2,y2,x3,y3 2d_line x3,y3,x4,y4 2d_line x4,y4,x1,y1
next Ang
Où c'est-t-y que j'ai m... é, dites-moi ? | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: N'est pas Néo qui veut Mer 13 Mar 2013 - 10:44 | |
| Tu as mélangé les notions de degrés et radians. Tu veux déterminer ton angle en degrés, et tu passe cette valeur aux fonctions trigonométriques. Or, celles-ci n'acceptent que les valeurs en radians. Le radian d'un angle se calcule par: radian = degré * pi / 180 Donc, voici ton code adapté à cela (j'ai marqué les modifs faites, et j'ai désactivé les lignes inutiles): - Code:
-
caption 0, "TANK move 0.0" rem 320 240
rem Affichage des éléments
top 0,(screen_y-height(0))/2 left 0,(screen_x-width(0))/2 ' picture 1:full_space 1:2d_target_is 1 color 1,50,130,13 ' rem 'Dimensions du rectangle dim LargRect%,HautRect% LargRect%=64:HautRect%=32
rem Calcul du 'centre de la fenêtre
dim xc%,yc% xc%=int(width(1)/2) yc%=int(height(1)/2)
rem on place les 4 coins du rectangle
dim xhd%,xhg%,xbg%,xbd% dim yhd%,yhg%,ybg%,ybd%
xhd%=xc%+int(LargRect%/2) yhd%=yc%-int(HautRect%/2) xhg%=xc%-int(LargRect%/2) yhg%=yc%-int(HautRect%/2) xbg%=xhg% ybg%=yc%+int(HautRect%/2) xbd%=xhd% ybd%=ybg%
rem on place les points pour voir
2d_point xc%,yc% 2d_point xhd%,yhd% 2d_point xhg%,yhg% 2d_point xbg%,ybg% 2d_point xbd%,ybd%
rem et on trace
2d_line xhd%,yhd%,xhg%,yhg% 2d_line xhg%,yhg%,xbg%,ybg% 2d_line xbg%,ybg%,xbd%,ybd% 2d_line xbd%,ybd%,xhd%,yhd%
rem silence on tourne
dim x1,y1,x2,y2,x3,y3,x4,y4 rem ce sont les xhd%, yhd% etc. transformés par rotation
dim Ang,pi:pi= 4* ATN(1) ' Ang=15 ' Ang=Ang * 2 * pi/360
dim mathg,mathd,matbg,matbd rem ce sont les coordonnées de la matrice, Néo !
dim angrad : ' <======= variable pour contenir l'angle en radians
for Ang=5 to 15
angrad = ang * pi/180 : ' <======= calculer l'angle en radians
mathg=cos(Angrad) : ' <======= utiliser l'angle en radians mathd=sin(Angrad) : ' <======= utiliser l'angle en radians matbg=0-sin(Angrad) : ' <======= utiliser l'angle en radians matbd=cos(Angrad) : ' <======= utiliser l'angle en radians
x1=(mathg*xhd%)+(matbg*yhd%):y1=(mathd*xhd%)+(matbd*yhd%) x2=(mathg*xhg%)+(matbg*yhg%):y2=(mathd*xhg%)+(matbd*yhg%) x3=(mathg*xbg%)+(matbg*ybg%):y3=(mathd*xbg%)+(matbd*ybg%) x4=(mathg*xbd%)+(matbg*ybd%):y4=(mathd*xbd%)+(matbd*ybd%)
2d_line x1,y1,x2,y2 2d_line x2,y2,x3,y3 2d_line x3,y3,x4,y4 2d_line x4,y4,x1,y1
next Ang
Petite remarque: la prochaine fois, lorsque tu posteras un code, entoure-le des balises (code)...(/code). Attention: utilise les parenthèses carrées (alt-( et alt-) at lieu des parenthèses rondes, bien sûr) ou utilise la bouton "<>" dans la barre d'outils de la fenêtre de conception du post ! Bonne chance !
Dernière édition par Klaus le Mer 13 Mar 2013 - 14:05, édité 2 fois | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: N'est pas Néo qui veut Mer 13 Mar 2013 - 12:43 | |
| Je poste juste une modif, je ne suis pas sur d'avoir compris, mais bon sur ma pause repas, je fais vite. Klaus, tu rajoutes la variables qui va bien pour l'angle en radian, mais tu ne l'utilise pas (ou alors ça m'a échappé ...) Je pense que tu voulais faire un truc du genre: - Code:
-
caption 0, "TANK move 0.0"
' Affichage des éléments
top 0,(screen_y-height(0))/2 : left 0,(screen_x-width(0))/2 picture 1:full_space 1:2d_target_is 1 : color 1,50,130,13 ' rem 'Dimensions du rectangle dim LargRect%,HautRect% : LargRect%=64:HautRect%=32
' Calcul du centre de la fenêtre
dim xc%,yc% : xc%=int(width(1)/2) : yc%=int(height(1)/2)
' 0n place les 4 coins du rectangle
dim xhd%,xhg%,xbg%,xbd%,yhd%,yhg%,ybg%,ybd%
xhd%=xc%+int(LargRect%/2) : yhd%=yc%-int(HautRect%/2) xhg%=xc%-int(LargRect%/2) : yhg%=yc%-int(HautRect%/2) xbg%=xhg% : ybg%=yc%+int(HautRect%/2) xbd%=xhd% : ybd%=ybg%
rem silence on tourne
dim x1,y1,x2,y2,x3,y3,x4,y4 rem ce sont les xhd%, yhd% etc. transformés par rotation
dim Ang,pi:pi= 4* ATN(1) dim mathg,mathd,matbg,matbd, angrad
' Coordonnées de la matrice, Néo !
for Ang= -30 to 40 step 2
angrad = ang * pi/180 mathg=cos(Angrad) : mathd=sin(Angrad) : matbg=0-sin(Angrad) : matbd=cos(Angrad) x1=(mathg*xhd%)+(matbg*yhd%):y1=(mathd*xhd%)+(matbd*yhd%) x2=(mathg*xhg%)+(matbg*yhg%):y2=(mathd*xhg%)+(matbd*yhg%) x3=(mathg*xbg%)+(matbg*ybg%):y3=(mathd*xbg%)+(matbd*ybg%) x4=(mathg*xbd%)+(matbg*ybd%):y4=(mathd*xbd%)+(matbd*ybd%) 2d_line x1,y1,x2,y2 : 2d_line x2,y2,x3,y3 : 2d_line x3,y3,x4,y4 : 2d_line x4,y4,x1,y1
next Ang | |
| | | mindstorm
Nombre de messages : 685 Age : 55 Localisation : charente Date d'inscription : 13/02/2013
| Sujet: Re: N'est pas Néo qui veut Mer 13 Mar 2013 - 12:59 | |
| bonjour a tous juste une petite pierre a l edifice.il faut veiller a choisir le point de rotation qui n est pas forcement un des quatres angle faite l essai avec une feuille de papier c est plus facile. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: N'est pas Néo qui veut Mer 13 Mar 2013 - 14:06 | |
| Tu as raison, Jicehel ! Quel étourdi je fais ! J'ai corrigé dans le source que j'ai posté... | |
| | | mindstorm
Nombre de messages : 685 Age : 55 Localisation : charente Date d'inscription : 13/02/2013
| Sujet: Re: N'est pas Néo qui veut Mer 13 Mar 2013 - 18:52 | |
| bonsoir a tous je viens de recuperer mon ordinateur et je confirme, la rotation ce fait sur le point 0,0 alors qu il faudrai quelle se situ au milieu des deux coin bas. la solution est de faire un changement de repaire de 0,0 vers Xr,Yr malheureusement je ne sait pas le faire avec les matrices, il y aura surement un Panoramicien bienveillant de passage | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: N'est pas Néo qui veut Mer 13 Mar 2013 - 19:18 | |
| C'est simple: 1. avant d'effectuer la rotation, tu soustraits les coordonnées x et y du point de rotation de tous les points. Conséquence: tu obtiens des coordonnées temporaires avec le point de rotation en (0,0). 2. tu effectues ta rotation normalement 3. tu additionnes les coordonnées réelles du point de rotation à tous les points. Conséquence: le point de rotation se retrouvra à nouveau à sa place, et les autres points auront leur place définitive.
Cela s'appelle: 1. une translation de (x0,y0) en (0,0) 2. une rotation autour de (0,0) 3. une translation de (0,0) en (x0,x0)
Simple, non ? | |
| | | mindstorm
Nombre de messages : 685 Age : 55 Localisation : charente Date d'inscription : 13/02/2013
| Sujet: Re: N'est pas Néo qui veut Mer 13 Mar 2013 - 23:36 | |
| merci karl pour tes lumieres a toi la balle froggy one bon courage | |
| | | Froggy One
Nombre de messages : 598 Date d'inscription : 06/01/2012
| Sujet: Néo et des bas Jeu 14 Mar 2013 - 14:14 | |
| Merci à tous, j'étais parti sur une autre piste mais l'idée de Klaus est à essayer. Je m'y mets dès que j'ai un peu plus de temps libre... | |
| | | Froggy One
Nombre de messages : 598 Date d'inscription : 06/01/2012
| Sujet: Youpi Jeu 14 Mar 2013 - 14:45 | |
| Cela fonctionne très bien effectivement avec l'astuce de Klaus. Bon, j'y retourne, merci encore ! | |
| | | Contenu sponsorisé
| Sujet: Re: N'est pas Néo qui veut | |
| |
| | | | N'est pas Néo qui veut | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |