Hello!
Je me suis dit que des ellipses verticales ou horizontales ça faisait pas trop Star Trek.
Alors j'ai voulu les incliner. Avec la méthode traditionnelle, il n' y a qu'à rajouter un déphasage(idem pour les courbes de Lissajous, il suffit de jouer avec l'amplitude, la pulsation, ...)
TROOOP facile!
Avec les différentielles j'ai cru au départ, qu'il fallait au moins l'API Wonderbra ou l'API Mac Gyver (ou pire l'API Rahan)!
Il faut juste rajouter deux lignes pour le calcul de la trajectoire, "j'espique":
Pour une
ellipse inclinée on a:
xellipse =xe=Xmax*cos(a)
yellipse=ye=Ymax*sin(a+phi)
a est l'angle qui varie, Xmax l'amplitude et phi le déphasage
Si on dérive
dxe=-Xmax*sin(a)da
dye=Ymax*cos(a+phi)=Ymax*(cos(a)*cos(phi)-sin(a)sin(phi))*da
Là ça craint un peu, sauf si "j'invente" deux variables x et y, les mêmes que la dernière fois (x=cos(a) et y=sin(a))
ça donne donc
dxe=-Xmax*y*da
dye=Ymax*(x*cos(phi)-y*sin(phi))
Voilà le code ( c'est un peu complètement du copier-coller car pour l'instant ça ressemble à du Kryptonnien pour moi! Merci Dobro!)
Code : Tout sélectionner
; *********** initialisation *********
x.f = 50 ;variables x et y qui vont permettrent de calculer xe et ye
y.f = 0
xe.f =0 ;coordonnées xe et ye de l'ellipse
ye.f=0
da.f=0.03 ; pas ou variation de l'angle a
Xmax.f=4 ;demi axe horizontal de l'ellipse
Ymax.f=2 ;demi axe vertical de l'ellipse
cosphi.f=Cos(3.1416/4); cos et sin du déphasage (ici ~pi/4)
sinphi.f= Sin(3.1416/4)
; ******************************
InitMouse ()
; ******** ** pour le sprite *****************
InitSprite ()
; ***************************************
OpenWindow (1, 1,1, 800, 600, #PB_Window_SystemMenu , "test" ) ; on ouvre une fenetre
OpenWindowedScreen ( WindowID (1) , 0, 0, 800, 600, 1, 1, 1) ; on met un ecran dedans !!
; *********** on va creer le sprite !! *****************
CreateSprite (1,16,16) ; on cree un sprite de 16*16
StartDrawing ( SpriteOutput (1)) ; on va dessiner dedans un rond jaune !
Circle (8,8, 8, RGB ($F1,$F8,$C)) ; le voila le beau rond jaune
StopDrawing ()
; ********* le sprite est terminer on va jouer avec !! ******
;
Repeat ; boucle principale
Event= WaitWindowEvent () ; on regarde si quelqu'un a cliqué sur la croix pour quitter
; ************************** ton prog ici ****************
For i = 1 To 1520
ExamineMouse ()
If MouseButton (2) ; le bouton de souris droit fait quitter !
End
EndIf
x = x - y * da ;calcul de x
y = y + x * da ;calcul de y
;*************************lignes à rajouter***********************************
xe=xe-Xmax*y*da ;calcul de xe
ye=ye+Ymax*da*(x*cosphi-y*Sinphi) ; calcul de ye
DisplaySprite (1, xe+500,ye+350); affichage du sprite
;*******************************************************************************
FlipBuffers () ; <---- ceci pour voir le dessin se faire +Lent !!
;ClearScreen (0, 0, 0) ; <--- ceci efface l'ecran !!
Next i
; ***************************************************
;FlipBuffers() ;<--- c'est la place normale pour le flipbuffer
;ClearScreen(0, 0, 0); <--- c'est la place normale pour le clearscreen !!
Until Event= #PB_Event_CloseWindow
Return
J'ai enlevé clearscreen juste pour faire joli!
Il ne reste plus qu'à faire un prog avec plinplin de mouvements (cycloïdes, hélices, ......)
PS>DOBRO: J'ai une formation classique à la base puis avec le temps j'ai glissé du côté obscur de la guitare: les accords(d'ailleurs, j'avais presque terminé l'algo d'un générateur d'accords...je m'y remettrai peut-être!)
Donc.. un peu de blues, de bossa, du picking de la variété quelquefois.
Je suis gaucher ça a été un peu galère pour ne plus être unplugged!
J'aspire à suivre le chemin du Voodoo Chile!