Bonjour tout le monde,
J'ai fais un petit bout de moteur physique ou une balle rebondi sans vitesse initial mais a une certaine hauteur tombe sous l'effet de la gravité sur un plan horizontale et rebondi selon son coefficient de rebond (coeff de restitution) variant de 0 à 1 (si 1 alors l'energie est entierement conservé). Et donc j'aimerai que quand ce coeff est à 1 la balle apres un rebond remonte à la meme hauteur qu'elle est tombé (étant donné que aucune énergie n'a été perdu) malheuresement avec le système de frame c'est très dur à faire pour une raison simple. La balle ne touche pas le plan en un seul point pile sur une frame donné en général la balle va traverser le plan et il fodra la replacé ce que je fais, je me sers de la norme de son vecteur vitesse pour la faire descendre sur le plan puis remonté pour simuler le rebond selon la longueur de son vecteur vitesse. Donc après le rebond je me retrouve dans la plus part des cas avec une balle plus haute ou plus basse qu'elle ne l'était avant et je ne peux pas utiliser V1=-V0 qui inverserait la vitesse de la balle pour simuler le rebond car la balle étant un peu plus haute ou plus basses je si j'utilise la même vélocité la balle montera plus bas ou plus haut que comme elle l'était quand on l'a laché ! Donc je dois trouvé une équation de sa vitesse après rebond ! Si qu'elqu'un pouvait m'aider sa serait super simpa parcque la je bloque énormement. Merci d'avance.
une idée qui m'est venue, si tu as déjà la fonction rebond qui la déplace, pourquoi ne pas ajouter un exp(-1 + coef)
avec un coef de 1, ça ferait un exp(0) => 1, donc le mouvement se conserve
avec un coef de 0, ça ferait un exp(-1) => < 1
donc le mouvement s'amortie.
c'est qu'une idée lancée en l'air, ça ressemble plus à du bidouillage^^
__________________________
Spirit - modérateur casu ^-^'
Aparement tu detectes lorsque la deux images entrent en contact.
Mais si tu te sers uniquement des positions de tes objets ca donne quoi??
Je m'eplique :
Si au lieu de faire :
si image_boule touche image_plan
alors vitesse_boule<-vitesseboule*-1
finsi
(c'est ca que tu fais en gros non?)
si tu fais plutot :
si distance(centre_boule-plan)<rayon_boule
alors vitesse_boule<-vitesseboule*-1
ca marcherait pas mieu?
De cette maniere tu ne fais pas tes calculs sur un image actualisée toutes les 20ms mais sur un calcul processeur actualisée 20 fois par ms...
Pour la distance d'un point à plan je vais essayer de voir si je retrouve ca dans mes cours(c'est fou ce qu'on oublie vite les cours de maths)... sinon google
__________________________
L'élève heureux est celui qui, comme la rivère, suit son cours dans son lit.
Et n'oubliez pas :Seb, c'est bien!
lol non ce n'est pas du tout sa mon problème. J'utilise biensur les méthodes mathématiques pour calculer mon intersection entre ma sphere et mon plan. Mon problème c'est que quand la détection est detecté le plan est déja DANS la sphere car la sphere à trop avancé, avant elle ne le touché pas, une frame après, le plan est dans la sphere, ce que je fais c'est que je repositionne ma sphere sur le plan puis je calcule la vitesse qui n'a pas été "consommé" c-a-d celle qui resté si la sphere n'était pas rentré dans le plan et j'utilise le reste de cette vitesse pour calculer la position de la sphere après rebond. Mon problème c'est que je n'arrive pas à determiner la nouvelle vitesse et le V1 = -V0 ne marche pas car la sphere ayant rebondi est soit plus haut soit plus bas que sa derniere position et donc en faisant V1 = -V0 elle remontera plus haut ou plus bas qu'avant. Il me faudrai donc l'équation de la vitesse par rapport au temps.
Tu devrais séparer la position affichiée de la balle et celle calculée. Ainsi la position calculée pourrait être légèrement inférieure à zéro, mais la position affichée ne le serait pas. Après le rebond, tu peux ainsi corriger le calcul.
Soit x la position théorique et x_affiche la position affichée:
[quote]g = 9.81 ; v_init = 0
x = (1/2)*g*t² + v_init*t + x_init
if (x < 0) : x_affiche = 0[/quote]
__________________________
Aidez les autres membres en publiant sur le forum le code que nous vous avons aidé à créer !
[img]http://mena.com.mx/gonzalo/iconos/14x14x4/img/hacker.gif[/img][url=http://www.python.org][img]http://galerie.ulthar.net/galerie/sports/short-track/2005.11.2/images/logo_python.gif[/img][/url][url=http://www.ubuntu.com][img]http://hexade.googlepages.com/ubuntu.png[/img][/url]
[url=http://www.frappr.com/moteurprog]Où sont les membres de MP ?[/url]
ERREUR BBCODE SUR CE MESSAGE : - Une balise -i n'est pas fermée !
si tu connais l'accélération de ta sphère en fonction du temps, tu intègres pour avoir la vitesse :p^^
après tu réintègres et t'as la position en fonction du temps (sous forme parapétrique en plus, c'est mieux :))
à moins que je me goure, mais c'est ce qu'on fait à l'école depuis 6mois ^^"
edit: exact yougo, c'était ce que je voulais dire, mais sans mettre les formules qui sont enfouis dans un classeur :P:
__________________________
Spirit - modérateur casu ^-^'
oui enfin bon l'utilité d'un moteur graphique c'est de pouvoir resoudre les problemes sans avoir de formules...
Là ca va le cas est simple ( y a mm pas les frottements de l'air!) mais quand il faudra gérer la chute d'un par exemple corps (corps humain, ouioui)une formule ne pourra jamais etre étblit (ou alors tellement complexe que ca vaut pas le coup). Donc faut trouver d'autre moyens pour apporximer au mieu la chose.
A vrai dire, faire ce genres de calculs pour des cas théoriques aussi simple (j'ai jamais vu un rebond sans perte d'energie^^) n'est pas interressant, vu que les résultats seront faux et qu'on peut en avoir bp plus facilement avec ces formules... mais faut bien commencer!!
__________________________
L'élève heureux est celui qui, comme la rivère, suit son cours dans son lit.
Et n'oubliez pas :Seb, c'est bien!
Prenons un exemple, ce que l'on connait :
SLastPos=Position de la sphere avant rebond
SPos=Position de la sphere après rebond sans calcul (sphere dans le plan)
SNewPos=position de la sphere directement sur le plan (comme si on la posé dessus)
PPos=Position du plan avec comme vecteur x et z
SRadius=Rayon de la sphere
Vel=Vecteur Vitesse qui déplace la sphere de LastPos en Pos
Gravity=Vecteur Gravité (g)
ElapsedTime=Delta t
On cherchera en premier temps SPos2 qui calculera la position de la sphere après le rebond, et Vel2 qui est la nouvelle vitesse après le rebond.
Après je ramasse les copies ^^
Merci a tous
[quote]resoudre les problemes sans avoir de formules[/quote]
faudra m'expliquer comment tu fais ça.
Hormis pour des cas prédéfinis de mouvement...
__________________________
Spirit - modérateur casu ^-^'
ERREUR BBCODE SUR CE MESSAGE : - La valeur de la balise "quote" n'est pas correcte !
lol c'est impossible sa ou en tt cas pas pour des mouvements linéaire ou interpolé ! c'est d'ailleur pour sa qu'on été inventé les formules ! pour gérer le cas général.