Algorithme de balle minigolf

Signaler
-
 Utilisateur anonyme -
bonjours à tous,

Voila, je suis entraint de faire un minigolf, et j'aimerai trouver un algorithme qui me permet de modifier la direction de la balle lorsqu'elle rencontre un obstacle.

Je ne suis pas très calé en math, donc j'ai beaucoup de mal avec les cos les tan et les sin.
 
bon ce que j'ai fais jusqu'a present, c'est la position de la balle moins la direction voulu diviser par 20 pour x et y ce qui me donne quotax et quotay, puis sur une boucle de 100, je rajoute quotax à ballex, et quotay à balley.

si je rencontre un obstacle horizontale alors quotay = -quotay (en faite j'inverse la direction verticale)
et si je rencontre un obstacle verticale alors quotax = -quotax

çà marche comme çà, mais je voudrai un formule unique, si je rencontre un obstacle. afin de gerer des obstacles diagonale ou autre forme.

Voila, je sais pas si je suis très clair, je ne vous donne pas le code car je l'ai écrit en Lua, mais un algo reste un algo, vous pouvez me donner des exemples en vb je comprends très bien ce language.

merci de votre aide.

cau'X

10 réponses

Messages postés
381
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
5 septembre 2010
3
Salut,
J'ai fais un truc similaire assez poussé pour une gestion d'obstacle.
Jettes un coup d'oeuil à ma source :
[codes/SIMULATEUR-MOUVEMENT-PARTICULE_40323.aspx
SIMULATEUR DE MOUVEMENT DE PARTICULE]
 Fiko ;-)

La reponse vous convient pensez > Accepter <
<hr />

Oui c'est exactement çà, les petites particules noir réagissent comme une balle de golf, il faut que je regarde ton code en profondeur pour voir l'algorithme utilisé.

Maintenant je sais pas si ton algorithme (une fois que je l'aurai trouvé dans ton code) puisse etre utilisé quelque soit l'obstacle rencontré, mais merci d'avoir répondu si vite.

cau'X
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
Bonjour,

Je pense qu'il vaut mieux que tu aiulles d'abord sur un site traitant de cinétique.
Les trajectoires ne dépendent en effet pas du seul angle de collision, mais également (entres autres choses plus complexes), des frictions, vitesses, rotations partielles de l'objet sur lui-même, densités et rigidités relatives, pentes, etc...
Il te suffira, si tu n'as pas de mini golf près de chez toi, d'aller simplement observer les gestes faits par des joueurs de pétanque pour comprendre à quel point ces notions de cinétique interviennent sans cesse....
A moins que tu ne veuilles, bien sur, transformer ton jeu de mini-golf en simple "billard" conventionnel (mais même ainsi, il te faudra inclure les notions de vitesses et de rotation de l'objet sur lui-même).
Messages postés
381
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
5 septembre 2010
3
Regarde la gestion d'obstacle dans ma source c'est exactement ce qu'il te faut.
Tu peus dessiner des obstacle comme bon te semble.

Bon courage

 Fiko ;-)

La reponse vous convient pensez > Accepter <
<hr />

oui je comprends bien, mais je veux quelque chose de très simple, c'est un jeu en 2D vu de haut, sans pentes, pour la vitesse de la balle je n'ai pas de problèmes, c'est déja réglé, ainsi que certain frottement, comme le fait de passer sur du sable.

non je cherche un algorithme simple, qui m'évite de prévoir tout un tas de collision. c'est très simple à faire comme je l'ai expliqué dans le premier message:
     la position x,y de la balle et incrémenté d'une partie de la distance à chaque boucle(quota), et si elle rencontre un obstacle horizontale, alors j'inverse la valeur du quota verticale, ce qui à pour effet de changer la direction de la balle, sans changer l'angle, si la balle partez du bas gauche pour allez vers haut droite: si elle rencontre un obstacle horizontale, alors elle se déplace vers bas droite.
idem pour les obstacle verticale en inversant le quota horizontale.

ce que je cherche c'est une formule qui enveloppe les deux, afin de ne pas me soucier de la forme de l'objet.

j'ai essayé des truc comme:
attente = quotax
quotax = quotay
quotay = -attente

çà marche pour les diagonale, mais ça fait des truc bizarre, c'est pas très naturelle comme mouvement.

cau'X
Messages postés
381
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
5 septembre 2010
3
Bon alors j'ai envie de dire quelle loi de comporetemnt tu veux mettre à ta balle (loi mécanique).
Si on prend le cas d'un rebond parfait à savoir : par de frottement, pas de déformation, pas d'effet (liée à la rotation de ta balle), l'obstacle est une droite, ... :
- Il faut partir de tes deux pas de temps pour lesquels 1-la balle ne touche pas l'obstacle et 2-la balle à traversé (ou se trouve sur) l'obstacle.
- Extrapoler le point d'impact en fonction de ces deux positions (intersection entre les deux points et l'obstacle)
- Calculer la nouvelle équation de la droite après le rebond
- Calculer la nouvelle position au prorata de la vitesse et en fonction du pas de temps...

Ca demande quand même du bouloy pour mettre en code...
 Fiko ;-)

La reponse vous convient pensez > Accepter <
<hr />
Messages postés
63
Date d'inscription
dimanche 5 novembre 2000
Statut
Membre
Dernière intervention
1 décembre 2013

bon aller je viens de finir mes epreuves de bac de physique sur la cinetque et on recomence
(deuxieme loi de newton la somme des force = masse * vecteur acceleration)on a donc  m*A somme des Force. puisque ton objet est en chute libre (a moin que tu veuille rajouter les force de frotement mais la ca devient compliqué) il n'est soumis q'a son poids. d'ou    m A P = m * g (g = constante de peusenteur qui vaut 9.81)
on a donc  A = g.
Puisque g est la constante de pesanteur, elle est orrienté vers le bas on a donc pour l'acceleration de ta balle A.x=0 et A.y=-9.81
L'acceleration est la derivee de la vitesse par raport au temps d'ou la vitesse et la primitive de l'acceleration par raport au temps on a donc :
V.x = C1
V.y = -9.81*t + C2
or au condition initial ton objet est lance a une vitesse Vo et un angle Alfa par raport au sol on a donc V(0).x C1 Vo*cos(alfa) => C1= Vo*cos(alfa)V(0).y -9.81*0 + C2 Vo*sin(alfa) => Vo*sin(alfa)

on a donc V(t).x = Vo * Cos(alfa)
                V(t).y = -9.81 * t + Vo * Sin(alfa)
NB : V = sqr( V(t).x ² + V(t).y) ² )

pour la posion il faut encore une fois prendre la primitive ce qui donne :
x(t) = Vo*Cos(alfa) * t + Xo
y(t) = -1/2 * 9.81 * t^2 + Vo*sin(Alfa) * t + Yo

Lorsque ta balle entre en contact avec un obstacle, elle perd de l'energie, cela se traduis par une perte de vitesse ainsi quand il aura colision, ta balle aura une nouvelle equation ou Vo sera egal a V juste avent la collision * 100 % (pas de perte) 70 % (un petit peu de perte) * 10% (beaucoup de perte)
Maintenant lors de la collision il aura un nouvelle angle alfa celui ci sera egale a  - l'angle forme entre la posion juste avent l'impact, le point d'impacte et la normal au plan de collsion. Et ca recomence pour chaque collision.

oui mais quand je parle de "y", je pense à l'ordonnée de ma balle par rapport à mon ecran, ou x,y = 0 est le coin haut gauche de l'ecran et x = 480, y = 272 est le coin bas droite de l'ecran (soit un ecran de 480x272 pixel)

n'oublions pas que c'est un jeu vu de haut , donc en clair on se fout de la force de gravité.

mais c'est intéressant ce que tu dis, même si je ne sais comment l'exploiter dans mon code.
cau'X
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
"n'oublions pas que c'est un jeu vu de haut , donc en clair on se fout de la force de gravité."

Ah....tiens...

J'igorais que la force de gravité dépendait de cet aspect là : l'angle d'observation ...
Pauvre de moi alors   (et un salut à Neron, qui le mérite bien )

ouais, laissez tomber
ça m'étonne que personne n'est venu me parler du poids de la lune qui peut jouer un facteur mineur sur la dirction de la balle.

tout ça pour un petit jeu de m**** pour téléphone portable.
cau'X