Petit probleme de trigo :-(

Signaler
Messages postés
17
Date d'inscription
samedi 14 février 2004
Statut
Membre
Dernière intervention
11 janvier 2010
-
Messages postés
1267
Date d'inscription
mercredi 1 janvier 2003
Statut
Membre
Dernière intervention
28 février 2007
-
Bon voila, je fais un petit jeu a la diablo, mais voila, petit probleme, quand je clique dans la fenetre le personnage se deplace vers la cible en utilisant une droite(ax+b), donc si j'ai cliqué a droite du personnage j'incrément x+1, et a gauche x-1, ce qui trouve la position y du personnage, donc il avance en ligne droite sur ma cible.

Probleme: quand j'utilise cette methode, si je clique a un angle de 0 degré(donc, devant le personnage), il avancera normalement, mais plus je m'aproche de l'axe des y(90 degré), plus le personnege avance rapidement, et quand je suis directement sur l'axe y, le personnage est collé sur ma souris.

J'en connais la cause: quand j'incrémente x et je trouve y, si mon (point actuelle) et mon (point cible) forme une droite serré(ex:80 degré) alors quand mon bond de x+1 propulse mon personnage non pas de 1 vers la cible, mais de 5 ou 6 ou plus.

Pour remedier a ça, j'ai pensé former un cercle trigonométrique autour de mon point actuelle (y=a*Sin(b*x+c)+d) et de trouve le point d'intersection entre la droite (ax+b) et le cercle ==­>

(ax+b = aSIN(bx+c)+d)
ce qui me donnerais l'équation pour x, x=blablabla

donc, pour trouver mon y, je ferais
y= aSIN(b*(blablabla)+c)+d

Bref, j'aurais x=1, et mon nouveau y, trouvé par la formule, qui ferait avancer mon personnage vers ma cible en ligne droite, probleme :P:P:P:P JE ME RAPPELLE PLUS COMMENT SORTIR LE X DE aSin(bx+c)+d

Si, je vous est raconté tout ca, c'est pour savoir si vous avez une approche plus simple a mon probleme. si non, aidez moi a sortir
ce putin de x. Merci :-)

fryser_d@hotmail.com

11 réponses

Messages postés
12
Date d'inscription
jeudi 22 juillet 2004
Statut
Membre
Dernière intervention
22 juillet 2004

Je pense que l'approche du cercle est bien, car elle permet de se déplacer d'une unité dans n'importe quelle direction. Maintenant je ne sais pas si elle peut être traitée de façon plus efficace.

bonne chance !

BiLLKiLL
Messages postés
1267
Date d'inscription
mercredi 1 janvier 2003
Statut
Membre
Dernière intervention
28 février 2007
3
Si j'ai bien suivi, ce que tu veux faire c'est faire aller ton perso directement du point où il se trouve (disons A) au point où tu cliques (disons B) ?
A ta place, je ferais comme ça :
-calcul du vecteur AB : AB (xB-xA, yB-yA).
-tu normalises ce vecteur (tu lui donnes la longueur 1); pour ça tu le divises par sa longueur, soit racine(x*x + y*y + z*z)
-toutes les x millisecondes, tu translates ton perso selon le vecteur normalisé (disons N), en fonction d'un coefficient k qiu déterminera la vitesse : pos_perso += k*N

Enfin c'est ce qu'il me semble...

Patience et longueur de temps font plus que force ni que rage....
Messages postés
252
Date d'inscription
vendredi 13 juin 2003
Statut
Membre
Dernière intervention
25 avril 2011

Hello

Je ne connais point ta formule du cercle trigo.

Lorsque tu avances de 1 selon l'axe des abscisses, tu avances de a selon l'axe des y (puisque on est sur la droite d'équation y = ax+b)
La distance parcourue est donc de sqrt(1²+a²). Si l'on divise cette distance par elle-même, elle devient 1...

On a donc comme formules
float dx powf(1+a*a, -0.5f) ; // ou dx 1.0f / sqrtf(1+a*a) ;
float dy = a * dx ;

x += dx ; y += dy ;

Et le personnage en (x, y) se déplace d'une unité dans la direction de la droite y = ax + b.
Pour le sens, il faut multiplier dx par +ou- 1 au début (pour que le signe soit aussi valable pour dy).

A++

Chouchou
Messages postés
168
Date d'inscription
mardi 31 décembre 2002
Statut
Membre
Dernière intervention
21 avril 2005

y= aSIN(b*x+c)+d
> x (arcsin(y-d)-c)/b.
Mais c une mauvaise solution.
la meilleur methode, c'est soit d'utiliser un vecteur de direction, et un vecteur de vitesse, voir un vecteur d'accéleration.

le mouvement d'un objet est toujours caractérisé par vecteur deplacement, vitesse, accélération.
En info tu peux simplifier dans ton cas par la methode à Funto66.

JackosKing For EvEr
Messages postés
20
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
27 mai 2008

Pour positionner ton personnage, tu pourrais peut-être utiliser les coordonées cylindriques. La position est alors déterminée par un rayon et un angle. Pour déplacer ton personnage, il te suffit alors d'incrémenter la valeur du rayon, ce qui t'évite de calculer le point d'intersection de ta droite et de ton cercle.

d.rogo :)
Messages postés
1267
Date d'inscription
mercredi 1 janvier 2003
Statut
Membre
Dernière intervention
28 février 2007
3
Coordonnées cylindriques? On m'a toujours dit que ça s'appelait coordonnées cartésiennes...
Mais le problème avec ton système c'est qu'on reste dépendant de l'origine du repère, alors que le point de départ du personnage varie (il peut partir dun point ou partir d'un autre...).
Mais surtout ça utilise les calculs de trigo après pour passer des coordonnées polaires aux cartésiennes pour l'affichage, et ça ça bouffe du temps ça :(

Patience et longueur de temps font plus que force ni que rage....
Messages postés
17
Date d'inscription
samedi 14 février 2004
Statut
Membre
Dernière intervention
11 janvier 2010

Je ne suis pas famillier avec les vecteurs :P, de la facon que tu en parle, j'ai l'impression qu'un vecteur est les cordonnees d'un point dans une matrice, dans mon cas a 2 dimentions. Sinon je ne sais pas de quoi tu parles, pourais tu m'expliquer s.t.p ?
Messages postés
17
Date d'inscription
samedi 14 février 2004
Statut
Membre
Dernière intervention
11 janvier 2010

Je ne suis pas famillier avec les vecteurs :P, de la facon que tu en parle, j'ai l'impression qu'un vecteur est les cordonnees d'un point dans une matrice, dans mon cas a 2 dimentions. Sinon je ne sais pas de quoi tu parles, pourais tu m'expliquer s.t.p ?
Messages postés
1267
Date d'inscription
mercredi 1 janvier 2003
Statut
Membre
Dernière intervention
28 février 2007
3
Ben mon truc n'a rien à voir avec les matrices (c'est bien à moi que tu parles?...).
Un vecteur c'est 3 trucs :
-direction (la droite sur laquelle il est)
-sens (vers quelle demi-droite il pointe)
-distance (norme)
Et tu peux représenter ça comme tu représenterais un point 2D : un vecteur a une coordonnée X et une coordonnée Y.
Et dans ce que je raconte, ben ça parle de translater des points en suivant un vecteur; tu aditionnes les coordonnées de ton point à celles du vecteur et tu obtions les coordonnées du point translaté.

Enfin, je vois pas trop quoi expliquer, dis-moi exactement ce que tu ne comprends pas dans mon explication...

Patience et longueur de temps font plus que force ni que rage....
Messages postés
17
Date d'inscription
samedi 14 février 2004
Statut
Membre
Dernière intervention
11 janvier 2010

Oua ! bravo, tu viens d'expliquer en quelques mots ce que des site complet esseye de dire, et j'ai enfin compris. Enfin de compte c une translation d'un point en un autre point qui forme une droite.
Messages postés
1267
Date d'inscription
mercredi 1 janvier 2003
Statut
Membre
Dernière intervention
28 février 2007
3
Voilà :)
Ben bonne chance avec ça alors ^^

Patience et longueur de temps font plus que force ni que rage....