[TUTO]-Sinus & Cosinus
Publié : mar. 06/déc./2011 13:47
Vous trouvez que les sinus et cosinus c'est rebutant ?
C'est pas faux, je passe même mon chemin dès que je vois des calculs à base de sinus et cosinus
Je me suis donc forcé (
) à créé une approche, j'espère simple et compréhensible, par un code
A quoi sert le sinus et le cosinus ? Pour moi, j'espère ne pas me tromper, cela permet de calculer des amplitudes sur l'axe des ordonnées X grâce au Cosinus, et sur l'axe des ordonnées Y grâce au Sinus (ps : Aux matheux merci de m'informer de mon erreur par mp afin de ne pas trop polluer le tuto
)
Donc voici l'exemple :
C'est pas faux, je passe même mon chemin dès que je vois des calculs à base de sinus et cosinus
Je me suis donc forcé (

A quoi sert le sinus et le cosinus ? Pour moi, j'espère ne pas me tromper, cela permet de calculer des amplitudes sur l'axe des ordonnées X grâce au Cosinus, et sur l'axe des ordonnées Y grâce au Sinus (ps : Aux matheux merci de m'informer de mon erreur par mp afin de ne pas trop polluer le tuto

Donc voici l'exemple :
Code : Tout sélectionner
Global coef.f = 0.0 ; permet de calculer les anges Cos et Sin
Global balle_x.i, balle_y.i ; Position de notre balle
#Pas = 0.10 ; plus vous affinez cette valeur plus le calcul est précis
; mais plus cela sera lent à l'écran
#Amplitude = 60 ; il nous faut un peu de place pour afficher tout ca
#rayon = 30 ; rayon de notre balle
; Calcul de la coordonnée X de notre balle (Cos)
Procedure Balle_X()
balle_x = Cos(coef) * #Amplitude
EndProcedure
; Variante, ici pour afficher comme une ellipse
Procedure Balle_X_Ellipse()
balle_x = Cos(coef) * #Amplitude * 2
EndProcedure
; Calcul de la coordonée Y de la balle (Sin)
Procedure Balle_Y()
balle_y = Sin(coef) * #Amplitude
EndProcedure
; Variante, on veut afficher un rebond
Procedure Balle_Y_Rebond()
balle_y = Abs(Sin(coef) * -#Amplitude)
EndProcedure
If InitSprite() = 0
MessageRequester("Error", "Can't open screen & sprite enviroment!", 0)
End
EndIf
If OpenWindow(0, 0, 0, 320, 200, "Sinus & Cosinus", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_ScreenCentered)
If OpenWindowedScreen(WindowID(0), 0, 0, 320, 200, 1, 0, 0)
; On créé notre Balle
; je rajoute +1 sinon mon cercle n'est pas parfait
CreateSprite(0, #rayon+1, #rayon+1)
If StartDrawing(SpriteOutput(0))
; le cercle commence par le centre
Circle(#rayon / 2, #rayon / 2, #rayon / 2, RGB(255, 0, 155))
StopDrawing()
EndIf
Repeat
Repeat
Event = WaitWindowEvent(10)
If Event = #PB_Event_CloseWindow
End
EndIf
Until Event = 0
; Affichage
FlipBuffers()
; Efface l'écran
ClearScreen(RGB(0, 0, 200))
; on ajout a chaque fois à coef le pas
; pas la peine de revenir à un coef 0 car, de toutes facons,
; les valeurs min et max du sinus ou du cosinus se situeront toujours
; entre -1 et 1
coef + #Pas
; on calcul les coordonées en x (avec le cosinus)
; Mettre/Enlever les remarques pour différents tests
Balle_X()
;Balle_X_Ellipse()
; et en y (avec le sinus)
Balle_Y()
;Balle_Y_Rebond()
; affiche la baballe :-P
DisplayTransparentSprite(0, 150+balle_x, 70-balle_y)
ForEver
Else
MessageRequester("Error", "Can't open windowed screen!", 0)
EndIf
EndIf