0 a 360 ° n'y plus ni moins

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

0 a 360 ° n'y plus ni moins

Message par Thyphoon »

Bonjour !

j'utilise des tables pour les sinus et les cosinus
pour avoir mon resultat je dois donné un angle entre 0 et 360 mais parfois je me retrouve avec des Angle légèrement inferrieur a 0 ou légèrement supperrieur a 360
y a t'il un moyen plus optimisé que le code si-dessou pour que l'angle sois toujours entre 0 et 360 ?

Code : Tout sélectionner

If Angle>360 
  Angle=Angle-360
ElseIf Angle<0
  Angle=Angle+360
EndIf   
Peut être que je cherche pour ien ... :roll:
Anonyme

Message par Anonyme »

Angle%360

@++
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

Cpl.Bator a écrit :Angle%360

@++
Merci beaucoup :D ...mais heu.....je comprends pas :oops:
Anonyme

Message par Anonyme »

Bah tu as juste à mettre ca a la place de tes if endif
Et ton angle restera dans une fourchette de 0 a 360 :D

Par Exemple 370%360 renvera 10

@++
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

Bon j'avais donc bien compris...
mais lorsque je teste si mon angle =-25 alors
angle%360 me renvoie -25 alors qu'il devrait me donné 360-25 ! non ?

En tout cas un grand merci
Anonyme

Message par Anonyme »

ha oui , c'est vrai, ca va de -360 a 360
Alors tu fait (Angle%180)*2 :wink:
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

Cpl.Bator a écrit :ha oui , c'est vrai, ca va de -360 a 360
Alors tu fait (Angle%180)*2 :wink:
:lol: je crois que tu es aussi fatigué que moi car là aussi on les negatifs qui reste... :wink:

Code : Tout sélectionner

 For angle=-10 To 400
 
 Debug Str(angle)+" > "+Str((angle%180)*2)
 
 Next
Anonyme

Message par Anonyme »

Arf, j'avais pas vraiment tester

voila :

Code : Tout sélectionner

For angle=-360 To 360
  
  If angle<0
    Debug Str(-angle%360)
  EndIf
  
  If angle=>0
    Debug Str(angle%360)
  EndIf
  
Next
@++
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

Merci beaucoup ! En tout cas ça m'a permis de me familiarisé un peu avec le "%"
mais en faisant des tests...

Code : Tout sélectionner

TA=ElapsedMilliseconds()
For n=1 To 10000
  For angle=-360 To 720 

    If angle>=0 And angle<=360
      A=Angle
    ElseIf angle<0 
      A=-angle%360 
    ElseIf angle=>0 
      A=angle%360 
    EndIf 
   
  Next 
Next
Debug ElapsedMilliseconds()-TA
TB=ElapsedMilliseconds()
For n=1 To 10000
  For angle=-360 To 720 
    If angle>=0 And angle<=360
      A=Angle
    ElseIf Angle<0 
      A=Angle+360 
    ElseIf Angle>360
      A=Angle-360 
    EndIf  
  Next
Next  
Debug ElapsedMilliseconds()-TB
ma solution est très légèrement plus rapide. :P comme quoi des fois je me complique la vie ....lollllllll
Anonyme

Message par Anonyme »

T'es un fana de l'optimisation ^^
D'ailleurs a quand les sources commentées de ton éclairage ? :P
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Cpl.Bator a écrit :T'es un fana de l'optimisation ^^
D'ailleurs a quand les sources commentées de ton éclairage ? :P
C'est une blague, là? :wink:
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

Cpl.Bator a écrit :T'es un fana de l'optimisation ^^
D'ailleurs a quand les sources commentées de ton éclairage ? :P
un fana de l'optimisation peut être :lol: ...mais un mauvais...j'essaye d'optimisé...mais je ne sais pas toujours ni où ni comment m'y prendre
pour les sources de mon éclairage Je vais te filer ça sous peu ... (j'éspère d'ici 10 minutes si tout vas bien) :D
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Déjà regarde tes tests, tu verras que la plupart sont... inutiles.
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

djes a écrit :Déjà regarde tes tests, tu verras que la plupart sont... inutiles.
tu veux dire que ça serait mieux comme ça ?

Code : Tout sélectionner

TA=ElapsedMilliseconds() 
For n=1 To 10000 
  For Angle=-360 To 720 
    if Angle<0 
      A=-Angle%360 
    ElseIf angle>360 
      A=Angle%360
   Else
     A=Angle
    EndIf 
    
  Next 
Next 
Debug ElapsedMilliseconds()-TA 
TB=ElapsedMilliseconds() 
For n=1 To 10000 
  For Angle=-360 To 720 
    If Angle<0 
      A=Angle+360 
    ElseIf Angle>360 
      A=Angle-360
    Else
     A=Angle 
    EndIf  
  Next 
Next  
Debug ElapsedMilliseconds()-TB 
Bon je sais maintenant que c'est pas vraiment dans ce genre de code qu'on vas gagner beaucoup en optimisation.
En verité ce qui me genait au depart c'était de me dùire que j'allais toujours passer par une condition alors que dans 90% du temps l'Angle est bien dans les bonne valeur....mais a vouloir trop bien faire...j'ai tendanec a compliquer :cry:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

et comme ça c'est pas plus simple ?


; AVANT
TA= ElapsedMilliseconds ()
For n=1 To 10000
     For Angle=-360 To 720
         If Angle<0
            A=-Angle%360
         ElseIf Angle>360
            A=Angle%360
         Else
            A=Angle
         EndIf
     Next
Next

Debug ElapsedMilliseconds ()-TA

; APRES
TB= ElapsedMilliseconds ()
For n=1 To 10000
     For Angle=-360 To 720
        A=Angle%360
        A= Int ( Abs (A))
     Next
Next
Debug ElapsedMilliseconds ()-TB
Répondre