Cercle, sinusoïdes, ellipses...sans pi, sans fonctions,..etc
Publié : ven. 09/déc./2005 21:30
Well, I’m standing next to a mountain...
Je crois qu’un ordinateur ne sait faire que des additions( je suis pas sûr de ça mais je tente le coup !).
Les jeux avec un processeur Z80 étaient capables d’animer parfois un nombre impressionnant d’objets (par contre mon MSX ne pouvait pas afficher plus de 4 sprites sur la même ligne !), je les soupçonne d’être coupables d’additions à répétition.
Donc dans mes futurs superméga jeux je calculerai mes trajectoires en faisant des additions pour que mon processeur tienne le coup avec 1002.57 sprites animés simultanément (jusque là tout va bien).
Exemple « le cercle » :
Une équation de cercle en coordonnées polaires ça donne
x = R.cos(a)
y = R.sin(a)
Si on dérive tout ça
dx = -R.sin(a).da
dy = R.cos(a).da
Que je peux aussi écrire
dx = -y.da
dy = x.da
Et même mieux, en posant dx = x (après) – x(avant) et en mettant un grand coup de canif aux maths on obtient :
x(après) = x(avant) –y(avant)*da
y(après) = y(avant) + x(avant)*da
Ben là y a plus d’angles, plus de sinus, plus rien quoi ! COOOOL!
A partir de n’importe quel point courant, je peux tracer un cercle sans me poser la moindre question (idéal pour un jeu).
Ca donne ça :
Et maintenant ça va plus !
En théorie, si on diminue le pas (c’est à dire « da ») la courbe est de plus en plus fidèle à ce qu’on cherche.
Hé bé là ... ça foire royalement !
Dès qu’on change le pas on a de mauvaises surprises !
Où est mon erreur ???
Si quelqu’un à une idée !
P.S : je sais pas encore afficher un sprite, si vous savez, remplacez le plot par un sprite, vous verrez ça marche très bien !
P.S : ça marche également très bien avec les paraboles, les rebonds avec amortissement, les trajectoires où on tient compte des frottements de l’air....., toutes les courbes de la galaxie (à part peut-être celle des sexygirls)
Merci d'avance (vous avez vu j'essaye de suis les conseils, mais j'ai parfois du mal!)
Je crois qu’un ordinateur ne sait faire que des additions( je suis pas sûr de ça mais je tente le coup !).
Les jeux avec un processeur Z80 étaient capables d’animer parfois un nombre impressionnant d’objets (par contre mon MSX ne pouvait pas afficher plus de 4 sprites sur la même ligne !), je les soupçonne d’être coupables d’additions à répétition.
Donc dans mes futurs superméga jeux je calculerai mes trajectoires en faisant des additions pour que mon processeur tienne le coup avec 1002.57 sprites animés simultanément (jusque là tout va bien).
Exemple « le cercle » :
Une équation de cercle en coordonnées polaires ça donne
x = R.cos(a)
y = R.sin(a)
Si on dérive tout ça
dx = -R.sin(a).da
dy = R.cos(a).da
Que je peux aussi écrire
dx = -y.da
dy = x.da
Et même mieux, en posant dx = x (après) – x(avant) et en mettant un grand coup de canif aux maths on obtient :
x(après) = x(avant) –y(avant)*da
y(après) = y(avant) + x(avant)*da
Ben là y a plus d’angles, plus de sinus, plus rien quoi ! COOOOL!
A partir de n’importe quel point courant, je peux tracer un cercle sans me poser la moindre question (idéal pour un jeu).
Ca donne ça :
Code : Tout sélectionner
;cercle, ellipes, sinus, cosinus...
OpenWindow(0, 0, 0, 360,240, 1, "3 secondes, ça vient!")
StartDrawing(WindowOutput())
x = 40 ;valeur initiale de x égale au rayon du cercle
y = 0 ;valeur initiale de y
#pas=0.1
For i = 1 To 240
x = x - y * #pas ;calcul de x
y = y + x * #pas ;calcul de y
Plot(x+60,y+160,$0000FF) ;tracé du cercle
Plot(1.5 * x+270,y+160,0) ;tracé d'une ellipse horizontale
Plot(x+160,1.5 * y+160,$F0000F) ;tracé d'une ellipse verticale
Plot (i+50,y+50,$0000FF) ;tracé du sinus
Plot (i+50, x+50,$00FF00) ;tracé du cosinus
Next i
StopDrawing()
Delay(3000) ;affichage de l'image durant trois secondes
En théorie, si on diminue le pas (c’est à dire « da ») la courbe est de plus en plus fidèle à ce qu’on cherche.
Hé bé là ... ça foire royalement !
Dès qu’on change le pas on a de mauvaises surprises !
Où est mon erreur ???
Si quelqu’un à une idée !
P.S : je sais pas encore afficher un sprite, si vous savez, remplacez le plot par un sprite, vous verrez ça marche très bien !
P.S : ça marche également très bien avec les paraboles, les rebonds avec amortissement, les trajectoires où on tient compte des frottements de l’air....., toutes les courbes de la galaxie (à part peut-être celle des sexygirls)
Merci d'avance (vous avez vu j'essaye de suis les conseils, mais j'ai parfois du mal!)