begin process at 2010 02 10 06:33:20
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Maths & Algorithmes

 > 

Petit probleme de trigo :-(


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Petit probleme de trigo :-(

jeudi 22 juillet 2004 à 21:34:15 | Petit probleme de trigo :-(

fryser_d

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



jeudi 22 juillet 2004 à 21:46:33 | Re : Petit probleme de trigo :-(

willbill

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
jeudi 22 juillet 2004 à 22:45:34 | Re : Petit probleme de trigo :-(

Funto66

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....
jeudi 22 juillet 2004 à 23:06:28 | Re : Petit probleme de trigo :-(

Chouchou182

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
vendredi 23 juillet 2004 à 08:50:27 | Re : Petit probleme de trigo :-(

JackosKing

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
vendredi 23 juillet 2004 à 09:00:05 | Re : Petit probleme de trigo :-(

rogo

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
vendredi 23 juillet 2004 à 11:03:03 | Re : Petit probleme de trigo :-(

Funto66

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....
lundi 26 juillet 2004 à 00:02:51 | Re : Petit probleme de trigo :-(

fryser_d

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 ?
lundi 26 juillet 2004 à 00:02:57 | Re : Petit probleme de trigo :-(

fryser_d

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 ?
mardi 27 juillet 2004 à 02:40:54 | Re : Petit probleme de trigo :-(

Funto66

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....

1 2

Cette discussion est classée dans : probleme, cible, ax, droite, personnage


Répondre à ce message

Sujets en rapport avec ce message

Probleme de DC [ par gus2647 ] Bonjour,Je programme avec les MFC et vc++ 6Je desire desiner un droite horizontale qui suit le mouvement de la souris et donc il faut que j efface le camera [ par un4given ] Bonjour a tous !Bon je suis bien conscient que ce sujet a été traité 1000 fois mais le probleme c'est que c'est 1000 fois d'une facon differente et me Petit jeu de cible, probleme d'affichage. [ par faucheuse ] Bonjour ami(e)s programmeurs et programmeuzes, J'ai essyer dernierement de programmer un petit jeux de cible tout simple (que je compte améliorer ave Constructeur et polymorphisme [ par Guiiil ] Bonjour à tous, Je suis en train de réaliser un p'tit jeu de rôle pour me faire la main (et une PTI au passage, les BTS IG comprendront), et je bloque probleme avec le bouton Ajouter de mon prog en fenêtre (sur visual studio 2008) [ par rony92 ] bonjour a tous, je n'arrive pas à trouver le code qu'il faut pour implémenter le bouton ajouter de mon programme ,de tel sorte que, quand l'utilisateu probleme avec "include" sur devC++ [ par stephe8 ] salut tout le monde ;j'ai un probléme ,j'arrive pas a inclure un fichier.h dans un programme le compilateur affiche le message "G:\prog gare.cpp In fi probleme matrice; [ par chochatown ] Bonjour,j'ai un probleme avec ma matrice;je déclare un ematrice dansle Frm.h#ifndef FRM#define FRM#include #include #include #in probleme d'allocation [ par littledrummer ] bonjour à tous.J'ai un petit souci avec une allocation mémoire lorsque j'execute le code suivant:string nomfichier="";cin>>nomfichier;<fon


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,312 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales