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 ...

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

...mais heu.....je comprends pas

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
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

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


je crois que tu es aussi fatigué que moi car là aussi on les negatifs qui reste...
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.

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 ?

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 ?

C'est une blague, là?

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 ?

un fana de l'optimisation peut être

...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)

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

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