IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Mathématiques Discussion :

calcul de positions par rapport a un centre


Sujet :

Mathématiques

  1. #1
    Membre expérimenté Avatar de Lorenzo77
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 472
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 472
    Points : 1 537
    Points
    1 537
    Par défaut calcul de positions par rapport a un centre
    Bonjour,


    j'essaye de finaliser un jeu de tuture mais je suis tombé sur un os quand j'ai voulu ajouté des traces de freinage sous les roues


    Le probleme :
    je connais la position x,y de la voiture ainsi que sa rotation par rapport a la scene, je voudrais arriver a retrouver la position de plusieurs points liés a cette voiture (les roues).



    le point vert représente le centre de la voiture, les points rouge et orange sont les positions que j'aimerais déduire (le centre des roues).


    pour l'instant j'arrive juste a tracer un trait sous l'axe de la voiture et a faire varier la longueur du trait par rapport a la vitesse de deplacement de la voiture (pour éviter un effet pointillés)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    		private function dessinerTrace():void {
    			// Angle en radian = pi * (angle en degré) / 180 
    			var rotVaisseau:Number = Math.PI * _vaisseau.rotation / 180;
     
    			var x1a:Number = (_vaisseau.x);
    			var x1b:Number = (_vaisseau.x) + (Math.cos(rotVaisseau) * _deplacement.vitesse) ;
     
    			var y1a:Number = (_vaisseau.y);
    			var y1b:Number = (_vaisseau.y) + (Math.sin(rotVaisseau) * _deplacement.vitesse);
     
    			var g:Graphics = this.graphics;
    			g.lineStyle(0, 0, 1, false, "normal", "none");
    			g.moveTo(x1a, y1a);
    			g.lineTo(x1b, y1b);
    		}

    quelqu'un peut m'aider ?
    Le plus grand arbre est né d'une graine menue, une tour de neuf étages est partie d'une poignée de terre.
    Mon blog : http://web.codeur.free.fr

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    x = xc + dx
    y = yc + dy

    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  3. #3
    Membre expérimenté Avatar de Lorenzo77
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 472
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 472
    Points : 1 537
    Points
    1 537
    Par défaut
    a quoi correspond c et d ?

    je dois préciser qu'il ne suffit pas d'ajouter le décalage x,y des roues par rapport a son centre car la voiture tourne sur la scene et la voiture a son propre repère qui est diffèrent de celui de la scene.
    Le plus grand arbre est né d'une graine menue, une tour de neuf étages est partie d'une poignée de terre.
    Mon blog : http://web.codeur.free.fr

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Xc et Yc sont les coordonnées du centre du véhicule
    X et Y sont les coordonnées des points dont tu te sers

    Donc

    dx = X-Xc
    dy = Y-Yc

    pour faire une rotation des points autour du centre, il faut appliquer la rotation sur les coordonnées par rapport au centre...

    Donc dans tes formules il faut faire le changement de repère...

    Soit un point de coordonnées de départ X, Y, de coordonnées d'arrrivée X' Y', auquel on applique une rotation par rapport au centre de Theta..

    X' = (X-Xc) * cos(Theta) + (Y-Yc) sin(Theta) + Xc
    ...
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  5. #5
    Membre expérimenté Avatar de Lorenzo77
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 472
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 472
    Points : 1 537
    Points
    1 537
    Par défaut
    tout ca ?
    je vais faire sans, de toute façon je ne pourrais pas en tirer une fonction et sa risque d'être trop lourd pour le moteur du jeu.

    merci pour ton aide
    Le plus grand arbre est né d'une graine menue, une tour de neuf étages est partie d'une poignée de terre.
    Mon blog : http://web.codeur.free.fr

  6. #6
    Membre émérite
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Points : 2 466
    Points
    2 466
    Par défaut
    Bonjour.

    Étant donné que les traces de freinage ne sont qu'un élément graphique, tu peux demander au moteur graphique de calculer leur position. Cela implique plusieurs choses :
    • Ton modèle propre de données n'aura, à priori, aucun contrôle sur ces éléments
    • Le calcul sera optimisé et fait par la carte graphique
    • Il faudra peut être modifier le fichier de description 3D de ta/tes voiture(s)


    L'idée est de pouvoir accéder par le biais du moteur graphique à tes sous ensembles "roues" de ton modèle 3D "voiture". Une fois cela fait, ton moteur calculera comme un grand les coordonnées de ces points (de toute façon, il le fait pour pouvoir les dessiner) et tu n'aura plus qu'à demander le dessin de traces sous celles-ci.

    Je te redirige donc vers un forum propre à ton moteur graphique.
    Cordialement,
    -- Yankel Scialom

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Lorenzo77 Voir le message
    tout ca ?
    je vais faire sans, de toute façon je ne pourrais pas en tirer une fonction et sa risque d'être trop lourd pour le moteur du jeu.

    merci pour ton aide
    bah franchement c'est rien et c'est pas lourd...

    2 soustractions et une addition pour chaque roue...

    Les cos et sinus tu les calcules déjà...
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  8. #8
    Membre expérimenté Avatar de Lorenzo77
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 472
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 472
    Points : 1 537
    Points
    1 537
    Par défaut
    j'ai essayé d'appliquer le calcul a la position x,y d'une roue mais la position calculé n'a rien a voir avec la vraie position de la roue
    j'ai du merdé quelque part.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var x1:Number = ( -8 - _vaisseau.x) * Math.cos(rotVaisseau) + ( -4.5 - _vaisseau.y) * Math.sin(rotVaisseau) + _vaisseau.x;
    var y1:Number = ( -4.5 - _vaisseau.y) * Math.sin(rotVaisseau) + ( -8 - _vaisseau.x) * Math.cos(rotVaisseau) + _vaisseau.y;
    j'ai trouvé une autre solution, c'est une bidouille pas très belle mais ca fonctionne : j'ai tout simplement ajouté des points invisibles sous les axes des roues et je stocke les positions puis je dessine entre les 2 dernières positions.


    --------
    prgasp77 : j'utilise flash, en 2D.
    la voiture est d'un bloc (une image)
    Le plus grand arbre est né d'une graine menue, une tour de neuf étages est partie d'une poignée de terre.
    Mon blog : http://web.codeur.free.fr

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    les formules de rotation sont :


    Xout = Xc + ((Xin - Xc) * cos(Angle)) + ((Yin - Yc) * sin(Angle)) ;
    Yout = Yc + (- ((Xin - Xc) * sin(Angle))) + ((Yin - Yc) * cos(Angle)) ;
    Tu t'es trompé sur le signe dans le Y....



    PS: et pour faire simple, il est mieux de mettre cette formule dans une méthode générale .. Rotate ( Pt, Center, Angle )
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  10. #10
    Membre expérimenté Avatar de Lorenzo77
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 472
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 472
    Points : 1 537
    Points
    1 537
    Par défaut
    voila ce que ca donne, c'est un peu n'importe quoi (faut utiliser les touches fléchés pour déplacer le véhicule)
    http://web.codeur.free.fr/divers/dev...ionNiveau3.swf

    je ne vois pas ou est l'erreur car j'ai remplacé par mes valeurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var x1:Number = _vaisseau.x + (( -8 - _vaisseau.x) * Math.cos(rotVaisseau)) + (( -4.5 - _vaisseau.y) * Math.sin(rotVaisseau));
    var y1:Number = _vaisseau.y + ( - ((-8 -_vaisseau.x) * Math.sin(rotVaisseau))) + ((-4.5 - _vaisseau.y) * Math.cos(rotVaisseau));
    Le plus grand arbre est né d'une graine menue, une tour de neuf étages est partie d'une poignée de terre.
    Mon blog : http://web.codeur.free.fr

  11. #11
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 813
    Points : 7 641
    Points
    7 641
    Par défaut
    Citation Envoyé par Lorenzo77 Voir le message
    j'ai essayé d'appliquer le calcul a la position x,y d'une roue mais la position calculé n'a rien a voir avec la vraie position de la roue
    tu utilises des coordonnées locales pour ta roue (le 4.5 et le 8), les x/y des formules sont des coordonnées globales, c'est d'ailleurs pour cela qu'on fait intervenir la position du centre de la voiture.
    Donc remplace Xin - Xc par Xloc et idem pour le terme en Y, si tu veux utiliser les coordonnées locales des roues.

    A quelle orientation correspond rotVaisseau=0? horizontale droite? verticale basse?

    Dans tous les cas, rien ne vaut un petit calcul manuel sur un coin de bureau avant de chercher pourquoi ça ne fonctionne pas dans le code...
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  12. #12
    Membre expérimenté Avatar de Lorenzo77
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 472
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 472
    Points : 1 537
    Points
    1 537
    Par défaut
    merci plegat, j'ai pas pensé a convertir les coordonnées local en global !

    rotVaisseau est en radian et pointe vers le 0°/360° (le haut de la scene) quand il est a 0


    merci a tous
    Le plus grand arbre est né d'une graine menue, une tour de neuf étages est partie d'une poignée de terre.
    Mon blog : http://web.codeur.free.fr

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Calculer les pourcentages par rapport à des valeurs
    Par Vinuto dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 19/02/2009, 18h53
  2. Réponses: 5
    Dernier message: 22/12/2008, 23h59
  3. Position par rapport au bureau et non à la fenêtre ! o_O
    Par kidpaddle2 dans le forum Windows
    Réponses: 4
    Dernier message: 27/08/2006, 15h16
  4. Calcul heure UCT par rapport à heure locale
    Par bobic dans le forum Oracle
    Réponses: 1
    Dernier message: 11/05/2006, 22h45
  5. calcul en mois par rapport a une date
    Par azde7015 dans le forum Access
    Réponses: 12
    Dernier message: 22/03/2006, 09h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo