Petit probleme de trigo :-(

fryser_d Messages postés 17 Date d'inscription samedi 14 février 2004 Statut Membre Dernière intervention 11 janvier 2010 - 22 juil. 2004 à 21:34
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 - 30 juil. 2004 à 00:46
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

cs_willbill Messages postés 12 Date d'inscription jeudi 22 juillet 2004 Statut Membre Dernière intervention 22 juillet 2004
22 juil. 2004 à 21:46
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
0
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
22 juil. 2004 à 22:45
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....
0
cs_Chouchou182 Messages postés 252 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 25 avril 2011 1
22 juil. 2004 à 23:06
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
0
JackosKing Messages postés 168 Date d'inscription mardi 31 décembre 2002 Statut Membre Dernière intervention 21 avril 2005
23 juil. 2004 à 08:50
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Gord21_cs Messages postés 20 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 27 mai 2008
23 juil. 2004 à 09:00
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 :)
0
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
23 juil. 2004 à 11:03
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....
0
fryser_d Messages postés 17 Date d'inscription samedi 14 février 2004 Statut Membre Dernière intervention 11 janvier 2010
26 juil. 2004 à 00:02
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 ?
0
fryser_d Messages postés 17 Date d'inscription samedi 14 février 2004 Statut Membre Dernière intervention 11 janvier 2010
26 juil. 2004 à 00:02
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 ?
0
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
27 juil. 2004 à 02:40
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....
0
fryser_d Messages postés 17 Date d'inscription samedi 14 février 2004 Statut Membre Dernière intervention 11 janvier 2010
29 juil. 2004 à 22:30
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.
0
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
30 juil. 2004 à 00:46
Voilà :)
Ben bonne chance avec ça alors ^^

Patience et longueur de temps font plus que force ni que rage....
0
Rejoignez-nous