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

Windows Phone .NET Discussion :

[XNA] Rotation d'un sprite autour d'un point


Sujet :

Windows Phone .NET

  1. #1
    Membre expérimenté Avatar de DotNET74
    Homme Profil pro
    Watch R&D Engineer & Apprenti .NET
    Inscrit en
    Août 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Watch R&D Engineer & Apprenti .NET

    Informations forums :
    Inscription : Août 2003
    Messages : 1 986
    Points : 1 453
    Points
    1 453
    Par défaut [XNA] Rotation d'un sprite autour d'un point
    Hello,

    voilà, je bloque sur le problème suivant:

    Je souhaiterais faire tourner un sprite selon une orbite par rapport à un point.

    J'arrive à le faire tourner sur lui même mais pas par rapport a un autre point.

    Exemple:

    - Un sprite de 64x64 se trouvant en 50,32.
    - Comment le faire tourner le centre du sprite par rapport au point 0,0 ?

    Merci
    La Théorie c'est quand on comprends tout mais que rien ne fonctionne.
    La Pratique c'est quand tout fonctionne mais qu'on ne sait pas pourquoi !

    Si vous aimez ma réponse, cliquez sur la main verte Merci

  2. #2
    Membre expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Points : 3 568
    Points
    3 568
    Par défaut
    Si tu veux une orbite circulaire, tu sais trouver la distance R entre ton sprite et ton point (via le théorème de Pythagore).
    Une fois que tu as ça, tu sais trouver l'angle entre ton sprite et ton point via les formules de transformations de coordonnées cartésiennes en polaire:
    x=R cos(o)
    y= R sin(o)
    Donc l'angle o = arcsin(x/R).
    Tu as maintenant ton angle de départ.
    Il ne reste plus qu'a changer ton angle, et de recalculer x et y via les formules données pour trouver tout les x et y du cercle de centre 0 et rayon R. C'est a dire, la trajectoire du sprite.
    Microsoft MVP : Windows Platform

    MCPD - Windows Phone Developer
    MCPD - Windows Developer 4

    http://www.guruumeditation.net

    “If debugging is the process of removing bugs, then programming must be the process of putting them in.”
    (Edsger W. Dijkstra)

  3. #3
    Membre expérimenté Avatar de DotNET74
    Homme Profil pro
    Watch R&D Engineer & Apprenti .NET
    Inscrit en
    Août 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Watch R&D Engineer & Apprenti .NET

    Informations forums :
    Inscription : Août 2003
    Messages : 1 986
    Points : 1 453
    Points
    1 453
    Par défaut
    Effectivement,

    en fait j'étais parti sur un tuto de Microsoft qui explique comment tourner un groupe de sprites avec des matrix mais j'arrive à rien avce leur technique !

    Je vais tester ta piste ce soir !

    Merci
    La Théorie c'est quand on comprends tout mais que rien ne fonctionne.
    La Pratique c'est quand tout fonctionne mais qu'on ne sait pas pourquoi !

    Si vous aimez ma réponse, cliquez sur la main verte Merci

  4. #4
    Membre expérimenté Avatar de DotNET74
    Homme Profil pro
    Watch R&D Engineer & Apprenti .NET
    Inscrit en
    Août 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Watch R&D Engineer & Apprenti .NET

    Informations forums :
    Inscription : Août 2003
    Messages : 1 986
    Points : 1 453
    Points
    1 453
    Par défaut
    Alors,

    J'ai ça comme code:

    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
    16
    17
    public override void Update(TimeSpan elapsedTime, TimeSpan totalTime)
    {
                    if (this.AllowRotation)
                    {
                        this.Angle = (float)(elapsedTime.TotalSeconds);
                        float Circle = MathHelper.Pi * 2;
                        this.Angle = this.Angle % Circle;
     
                        Single CurrentX = (float)(this.OrbitalRadius * Math.Cos(this.Angle));
                        Single CurrentY = (float)(this.OrbitalRadius * Math.Sin(this.Angle));
     
                        this.Position += new Vector2(CurrentX, CurrentY);
     
                    }
     
                    base.Update(elapsedTime, totalTime);
    }
    et ça pour le dessin:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.SpriteBatch.Draw(this.Texture, this.Position, Color.White);
    Et ça fonctionne pas j'ai des valeurs énormes en X et Y !!!
    La Théorie c'est quand on comprends tout mais que rien ne fonctionne.
    La Pratique c'est quand tout fonctionne mais qu'on ne sait pas pourquoi !

    Si vous aimez ma réponse, cliquez sur la main verte Merci

  5. #5
    Membre expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Points : 3 568
    Points
    3 568
    Par défaut
    Le maximum que peut avoir un sinus ou un cosinus est 1. Si tu as des valeurs enormes, c'est que ta variable OrbitalRadius est énorme.
    Microsoft MVP : Windows Platform

    MCPD - Windows Phone Developer
    MCPD - Windows Developer 4

    http://www.guruumeditation.net

    “If debugging is the process of removing bugs, then programming must be the process of putting them in.”
    (Edsger W. Dijkstra)

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

Discussions similaires

  1. [XNA] Rotation d'une sprite et calcul du bound
    Par DotNET74 dans le forum Windows Phone
    Réponses: 2
    Dernier message: 22/10/2011, 14h37
  2. XNA Rotation de Sprites
    Par DotNET74 dans le forum Windows Phone
    Réponses: 7
    Dernier message: 19/09/2011, 15h02
  3. XNA-Rotation 2D de sprite
    Par SkYsO dans le forum XNA/Monogame
    Réponses: 4
    Dernier message: 16/04/2009, 14h49
  4. Rotation d'une cible autour du centre de l'écran
    Par kurul1 dans le forum C++Builder
    Réponses: 7
    Dernier message: 11/06/2005, 21h32
  5. Rotation d'un rectangle autour du centre de gravité
    Par bucheron dans le forum Algorithmes et structures de données
    Réponses: 13
    Dernier message: 22/06/2004, 11h01

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