Page 1 sur 2

0 a 360 ° n'y plus ni moins

Publié : dim. 24/sept./2006 11:37
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:

Publié : dim. 24/sept./2006 11:43
par Anonyme
Angle%360

@++

Publié : dim. 24/sept./2006 11:51
par Thyphoon
Cpl.Bator a écrit :Angle%360

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

Publié : dim. 24/sept./2006 11:55
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

@++

Publié : dim. 24/sept./2006 12:02
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

Publié : dim. 24/sept./2006 13:02
par Anonyme
ha oui , c'est vrai, ca va de -360 a 360
Alors tu fait (Angle%180)*2 :wink:

Publié : dim. 24/sept./2006 13:08
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

Publié : dim. 24/sept./2006 13:28
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
@++

Publié : dim. 24/sept./2006 13:44
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

Publié : dim. 24/sept./2006 14:02
par Anonyme
T'es un fana de l'optimisation ^^
D'ailleurs a quand les sources commentées de ton éclairage ? :P

Publié : dim. 24/sept./2006 14:13
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:

Publié : dim. 24/sept./2006 14:28
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

Publié : dim. 24/sept./2006 15:35
par djes
Déjà regarde tes tests, tu verras que la plupart sont... inutiles.

Publié : dim. 24/sept./2006 17:57
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:

Publié : dim. 24/sept./2006 18:18
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