ndubien
Messages postés557Date d'inscriptiondimanche 25 septembre 2005StatutMembreDernière intervention10 mai 20144 21 déc. 2010 à 18:29
Bonjour,
Il est vrai que l'utilisation de la formule "Py(t) = Py(0) + Vy(0)*t + 1/2*g*t" pour calculer la vitesse en y est bien plus judicieuse que le recours à l'énergie cinétique.
Je ne l'avais pas encore vue lors de l'implémentation de ce programme mais c'est vrai que c'est une méthode beaucoup plus juste, efficace et rapide que celle implémentée dans le programme (la preuve, les différences entre les deux courbes obtenues si l'on implémente l'une ou l'autre des méthode).
A bientôt...
Mal_au_DOS
Messages postés39Date d'inscriptionsamedi 3 juin 2006StatutMembreDernière intervention28 octobre 2008 17 janv. 2008 à 19:16
Je pense serieusement que ma formule est bonne.
Prenons la formule py(t)=py(0)+t*vy(0)+gt^2*t^2
Lorsque t augmente, py(0) est constant, t*vy(0) augmente(puisque vy(0)>0) et gt^2*t^2 augmente aussi, donc vy(t) ne fait qu'augmenter, ce qui veut dire que le solide ne vas pas décrire de cloche mais va s'élever dans les airs.
Après si vous n'êtes pas convaincus il faut intégrer deux fois l'accélération qui n'est autre que la dérivée seconde de la position, afin d'obtenir cette expression; voir les cours de terminale S sur les équations horaires.
dans ton cas, il te suffit de faire une fonction Y(float x, float V){return Y0+V*x-0.5*g*x² ;} voilà
ensuite tu fait ta boucle normal et tu affiche à chaque fois le solide aux coordonnées (X, Y(X)).
ndubien
Messages postés557Date d'inscriptiondimanche 25 septembre 2005StatutMembreDernière intervention10 mai 20144 17 janv. 2008 à 17:33
Bonjour ACX01B et MAL_AU_DOS,
laquelle de ces deux expressions est vraie (est à utiliser)?
Mal_au_DOS
Messages postés39Date d'inscriptionsamedi 3 juin 2006StatutMembreDernière intervention28 octobre 2008 29 déc. 2007 à 00:00
heu en réalité je crois plutôt que la formule c'est:
Py(t) = Py(0) + Vy(0)*t - 0.5g*t^2
en effet selon la formule de ACX01B le pauvre solide ne redescendrait pas puisque quand t augmente la position de Py(t) ne peut qu'augmenter.
Joli prog A++
acx01b
Messages postés280Date d'inscriptiondimanche 7 septembre 2003StatutMembreDernière intervention 8 juillet 20146 21 déc. 2007 à 19:47
salut j'ai l'impression que tu n'as pas vu la formule
py(t) = py(0) + t.vy(0) + g.t^2/2
py(t) c'est le position en y de l'objet à l'instant t
oui ton programme est faut car tu n'as pas utilisé cette formule (qui est la seule qui soit bonne) mais puisque ton pas de discrétisation est petit ça ne se voit pas
après il faut gérer le rebond là ça se complique hé oui
tu l'auras deviné ils faut résoudre l'équation py(x) = 0
et changer le signe de vy(x) ainsi qu'appliquer une petit coefficient de restitution (inférieur à 1)
ndubien
Messages postés557Date d'inscriptiondimanche 25 septembre 2005StatutMembreDernière intervention10 mai 20144 21 déc. 2007 à 18:10
Finalement j'aurai besoin:
d'une unique boucle qui s'occupera de la montée et de la descente
ou bien de 2 (une pour montée, une autre pour descente)?
Désolé pour ces questions mais je n'ai pas encore vu expression en cours (enfin une expression comparable)...
Si par contre vous connaissez des sites internet qui expliquent ou même parlent cette technique, celà pourrait m'intérresser car il semble que cette solution soit beaucoup plus pratique que l'autre...
A bientôt...
cs_juju12
Messages postés966Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 4 mars 20104 21 déc. 2007 à 17:58
Non t c'est le temps écoulé en secondes
p(0) la position initiale de l'objet
ndubien
Messages postés557Date d'inscriptiondimanche 25 septembre 2005StatutMembreDernière intervention10 mai 20144 21 déc. 2007 à 17:46
Y aura-t'il toujours besoin de trouver zb?
ndubien
Messages postés557Date d'inscriptiondimanche 25 septembre 2005StatutMembreDernière intervention10 mai 20144 21 déc. 2007 à 17:45
Salut axc01b,
si je comprends bien ta réponse:
la vitesse en t est proportionnelle à t la hauteur en metre de la nouvelle position (et constante?)?
est-ce bien celà?
Cette technique me permettrait-elle de trouver les positions en dessous de la position y du lancer?
Question pour les unitées et valeurs:
v(t) = v(0) + g.t
v(t) est la vitesse en t en m.s-1
v(0) la vitesse à la position initiale en m.s-1
g = 9,81
et t la hauteur en m de l'objet par rapport à 0 ou par rapport au départ du lancer?
Sinon, en soit le programme actuel est-il faut?
Il est vrai que si votre technique fonctionne, il y aura beaucoup moins de calculs à faire, donc moins de pertes de temps et un programme avec une simulation plus rapide...
A bientôt...
acx01b
Messages postés280Date d'inscriptiondimanche 7 septembre 2003StatutMembreDernière intervention 8 juillet 20146 20 déc. 2007 à 23:59
c'est de la deuxième loi de newton:
dv / dt = a
c'est à dire que la dérivée de la vitesse : v'(t) c'est l'accélération a(t)
a(t) = f(t)/m
la force sur la masse
comme toi tu n'appliques que une force verticale la gravité
et qu'elle vaut m.g
alors a(t) = g
et v(t) = v(0) + intégrale de 0 à t de a(t)
puisque par définition a(t) c'est la dérivée de la vitesse
miracle l'accélération est constante donc
v(t) = v(0) + g.t
et donc la position
p(t) p(0) + intégrale de 0 à t de v(t)
p(0) + t.v(0) + intégrale de 0 à t de g.t
= p(0) + t.v(0) + g.t^2/2
(quand tu dérives g.t^2/2 ça fait bien g.t)
a+
Neo_Fr
Messages postés653Date d'inscriptionmardi 6 décembre 2005StatutMembreDernière intervention10 novembre 20142 20 déc. 2007 à 22:01
Ta fonction DoubleToChar retourne un pointeur sur la zone memoire allouée, ta juste a faire un free dessus..
Sinon tu peux passer un pointeur en parametre de facon a allouer et liberer la memoire en dehors de la fonction, comme ca pas besoin d'alloué et de liberer de la memoire a chaque MOUSEMOVE..
Neo_Fr
ndubien
Messages postés557Date d'inscriptiondimanche 25 septembre 2005StatutMembreDernière intervention10 mai 20144 20 déc. 2007 à 21:40
Salut Neo_Fr,
comment libérer la mémoire allouée par DoubleToChar (j'ai essayer free... peu être pas au bon endroit)?
Je vous remercie d'avance...
A bientôt...
ndubien
Messages postés557Date d'inscriptiondimanche 25 septembre 2005StatutMembreDernière intervention10 mai 20144 20 déc. 2007 à 14:38
Salut,
Neo_Fr: pour la fonction DoubleToChar, je vais essayer de voir pour libérer la mémoire car celà peut s'avérer génant voire très génant.
Sinon pour ce que dit acx01b, que je remercie pour la note,
Il faut que je regarde pour:
Vx(t) = Vx(0)
Vy(t) = Vy(0) + g*t
Px(t) = Px(0) + Vx(0)*t
Py(t) = Py(0) + Vy(0)*t + 1/2*g*t
mais il est fort probable que je me sois compliqué la vie ;)
Brève explication du fonctionnement du simulateur:
1 - je calcule la vitesse en y de l'objet
2 - j'ajoute 1/1000 de cette vitesse (soit le déplacement pour une milliseconde) à la position y de l'objet
3 - Puis c'est reparti pour un tour, et celà tant que l'objet n'est pas à sa position maximale ou minimale fixée à zéro. Le programme arrête cette boucle si l'objet est sorti de l'écran
Actuellement, je ne sais pas comment faire autrement, il est vrai que cette méthode ne fournit qu'une estimation des positions mais pour l'instant çà à l'air de bien fonctionner.
Pour information: La vitesse x est constante donc aucuns problèmes quant au déplacement de l'objet suivant x.
Merci pour ces commentaires...
Et à bientôt...
acx01b
Messages postés280Date d'inscriptiondimanche 7 septembre 2003StatutMembreDernière intervention 8 juillet 20146 20 déc. 2007 à 13:19
salut
j'ai l'impression sans en être sur que tu t'es compliqué sur la position et la vitesse de l'objet en fonction du temps:
Vx(t) = Vx(0)
Vy(t) = Vy(0) + g*t
Px(t) = Px(0) + Vx(0)*t
Py(t) = Py(0) + Vy(0)*t + 1/2*g*t
Neo_Fr
Messages postés653Date d'inscriptionmardi 6 décembre 2005StatutMembreDernière intervention10 novembre 20142 19 déc. 2007 à 20:28
Ta fonction DoubleToChar alloue de la memoire, memoire que tu ne libere pas..
21 déc. 2010 à 18:29
Il est vrai que l'utilisation de la formule "Py(t) = Py(0) + Vy(0)*t + 1/2*g*t" pour calculer la vitesse en y est bien plus judicieuse que le recours à l'énergie cinétique.
Je ne l'avais pas encore vue lors de l'implémentation de ce programme mais c'est vrai que c'est une méthode beaucoup plus juste, efficace et rapide que celle implémentée dans le programme (la preuve, les différences entre les deux courbes obtenues si l'on implémente l'une ou l'autre des méthode).
A bientôt...
17 janv. 2008 à 19:16
Prenons la formule py(t)=py(0)+t*vy(0)+gt^2*t^2
Lorsque t augmente, py(0) est constant, t*vy(0) augmente(puisque vy(0)>0) et gt^2*t^2 augmente aussi, donc vy(t) ne fait qu'augmenter, ce qui veut dire que le solide ne vas pas décrire de cloche mais va s'élever dans les airs.
Après si vous n'êtes pas convaincus il faut intégrer deux fois l'accélération qui n'est autre que la dérivée seconde de la position, afin d'obtenir cette expression; voir les cours de terminale S sur les équations horaires.
dans ton cas, il te suffit de faire une fonction Y(float x, float V){return Y0+V*x-0.5*g*x² ;} voilà
ensuite tu fait ta boucle normal et tu affiche à chaque fois le solide aux coordonnées (X, Y(X)).
17 janv. 2008 à 17:33
laquelle de ces deux expressions est vraie (est à utiliser)?
py(t) = py(0) + t.vy(0) + g.t^2/2
ou
Py(t) = Py(0) + Vy(0)*t - 0.5g*t^2
la seule différence est un -.
Merci d'avance...
A bientôt...
29 déc. 2007 à 00:00
Py(t) = Py(0) + Vy(0)*t - 0.5g*t^2
en effet selon la formule de ACX01B le pauvre solide ne redescendrait pas puisque quand t augmente la position de Py(t) ne peut qu'augmenter.
Joli prog A++
21 déc. 2007 à 19:47
py(t) = py(0) + t.vy(0) + g.t^2/2
py(t) c'est le position en y de l'objet à l'instant t
oui ton programme est faut car tu n'as pas utilisé cette formule (qui est la seule qui soit bonne) mais puisque ton pas de discrétisation est petit ça ne se voit pas
après il faut gérer le rebond là ça se complique hé oui
tu l'auras deviné ils faut résoudre l'équation py(x) = 0
et changer le signe de vy(x) ainsi qu'appliquer une petit coefficient de restitution (inférieur à 1)
21 déc. 2007 à 18:10
d'une unique boucle qui s'occupera de la montée et de la descente
ou bien de 2 (une pour montée, une autre pour descente)?
Désolé pour ces questions mais je n'ai pas encore vu expression en cours (enfin une expression comparable)...
Si par contre vous connaissez des sites internet qui expliquent ou même parlent cette technique, celà pourrait m'intérresser car il semble que cette solution soit beaucoup plus pratique que l'autre...
A bientôt...
21 déc. 2007 à 17:58
p(0) la position initiale de l'objet
21 déc. 2007 à 17:46
21 déc. 2007 à 17:45
si je comprends bien ta réponse:
la vitesse en t est proportionnelle à t la hauteur en metre de la nouvelle position (et constante?)?
est-ce bien celà?
Cette technique me permettrait-elle de trouver les positions en dessous de la position y du lancer?
Question pour les unitées et valeurs:
v(t) = v(0) + g.t
v(t) est la vitesse en t en m.s-1
v(0) la vitesse à la position initiale en m.s-1
g = 9,81
et t la hauteur en m de l'objet par rapport à 0 ou par rapport au départ du lancer?
Sinon, en soit le programme actuel est-il faut?
Il est vrai que si votre technique fonctionne, il y aura beaucoup moins de calculs à faire, donc moins de pertes de temps et un programme avec une simulation plus rapide...
A bientôt...
20 déc. 2007 à 23:59
dv / dt = a
c'est à dire que la dérivée de la vitesse : v'(t) c'est l'accélération a(t)
a(t) = f(t)/m
la force sur la masse
comme toi tu n'appliques que une force verticale la gravité
et qu'elle vaut m.g
alors a(t) = g
et v(t) = v(0) + intégrale de 0 à t de a(t)
puisque par définition a(t) c'est la dérivée de la vitesse
miracle l'accélération est constante donc
v(t) = v(0) + g.t
et donc la position
p(t) p(0) + intégrale de 0 à t de v(t)
p(0) + t.v(0) + intégrale de 0 à t de g.t
= p(0) + t.v(0) + g.t^2/2
(quand tu dérives g.t^2/2 ça fait bien g.t)
a+
20 déc. 2007 à 22:01
Sinon tu peux passer un pointeur en parametre de facon a allouer et liberer la memoire en dehors de la fonction, comme ca pas besoin d'alloué et de liberer de la memoire a chaque MOUSEMOVE..
Neo_Fr
20 déc. 2007 à 21:40
comment libérer la mémoire allouée par DoubleToChar (j'ai essayer free... peu être pas au bon endroit)?
Je vous remercie d'avance...
A bientôt...
20 déc. 2007 à 14:38
Neo_Fr: pour la fonction DoubleToChar, je vais essayer de voir pour libérer la mémoire car celà peut s'avérer génant voire très génant.
Sinon pour ce que dit acx01b, que je remercie pour la note,
Il faut que je regarde pour:
Vx(t) = Vx(0)
Vy(t) = Vy(0) + g*t
Px(t) = Px(0) + Vx(0)*t
Py(t) = Py(0) + Vy(0)*t + 1/2*g*t
mais il est fort probable que je me sois compliqué la vie ;)
Brève explication du fonctionnement du simulateur:
1 - je calcule la vitesse en y de l'objet
2 - j'ajoute 1/1000 de cette vitesse (soit le déplacement pour une milliseconde) à la position y de l'objet
3 - Puis c'est reparti pour un tour, et celà tant que l'objet n'est pas à sa position maximale ou minimale fixée à zéro. Le programme arrête cette boucle si l'objet est sorti de l'écran
Actuellement, je ne sais pas comment faire autrement, il est vrai que cette méthode ne fournit qu'une estimation des positions mais pour l'instant çà à l'air de bien fonctionner.
Pour information: La vitesse x est constante donc aucuns problèmes quant au déplacement de l'objet suivant x.
Merci pour ces commentaires...
Et à bientôt...
20 déc. 2007 à 13:19
j'ai l'impression sans en être sur que tu t'es compliqué sur la position et la vitesse de l'objet en fonction du temps:
Vx(t) = Vx(0)
Vy(t) = Vy(0) + g*t
Px(t) = Px(0) + Vx(0)*t
Py(t) = Py(0) + Vy(0)*t + 1/2*g*t
19 déc. 2007 à 20:28
Neo_Fr