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

C# Discussion :

Calcul d'angle, reconnaissance gestuelle souris


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2011
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 23
    Par défaut Calcul d'angle, reconnaissance gestuelle souris
    Bonjour à tous,
    Dans le cadre de mon tpi en programmation je dois faire une reconnaissance gestuelle de la souris. J'ai vu sur le site=>(http://delphi.developpez.com/defi/ecriture/vainqueur/) la maniere de procédé mais je ne comprend pas du tout l'algorithme pour les angles, j'ai essai de le traduire en c# mais les angles retourné sont compltement incohérent par rapport à mon canevas de direction.
    Voici mon code de la fonction d'angle:
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
            public double CalculAngle(int x1, int y1, int x2, int y2)
            {
                double a;
                double ang=0;
                double x = 0;
                double y = 0;
                x = x1 - x2;
                y = y1 - y2;
                if (x == 0)
                {
                    if (y > 0)
                    {
                        ang = Math.PI / 2;
                    }
                    else
                    {
                        if (y < 0)
                        {
                            ang = 3 * Math.PI / 2;
                        }
                        else
                        {
                            ang = 0;
                        }
                    }
                }
                else
                {
                    a = Math.Atan(y / x);
                    if (x > 0)
                    {
                        if (y >= 0)
                        {
                            ang = a;
                        }
                        else
                        {
                            ang = a + 2 * Math.PI;
                        }
                    }
                    if (x < 0)
                    {
                        ang = a + Math.PI;
                    }
                }
                ang = ang * 180 / Math.PI;
                return ang;
            }
    Si quelqu'un pouvait m'éclairait pour avoir des angles cohérent par rapport a un canevas de direction de se type:
    [IMG]
    http://delphi.developpez.com/defi/ecriture/defieur/images/directions.JPG[/IMG]

    C'est avec grand plaisir, parce que je peine depuis 2 jours sur la trigo, j'aurais du peut etre écouter en math

    Merci d'avance
    Cordialement duffi

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Les angles retournés me semblent corrects... Peux-tu indiquer quels résultats tu t'attends à avoir pour quelles coordonnées ?

  3. #3
    Membre averti
    Inscrit en
    Janvier 2011
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 23
    Par défaut
    ben quand je fais un V mes angles devrait me dire de passer par 4 et 2 d'apres mon shema de direction et d'apres ce que j'ai moi il serait par 67 et 34 ce qui me semble incohérent...voici la maniere dont je l utilise:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    //Décalaration des angles de références
                AngleRef[0] = 0;
                AngleRef[1] = 0;
                AngleRef[2]=45;
                AngleRef[3]=90;
                AngleRef[4]=135;
                AngleRef[5]=180;
                AngleRef[6]=225;
                AngleRef[7]=270;
                AngleRef[8]=315;
    Je prend mes angles tous les déplacement de 10 pixel!
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
     public double LongueurPix()
            {
                int x = MesCoordonnees[0].X;
                int y = MesCoordonnees[0].Y;
                int varX;
                int varY;
                double ang = 0;
                for (int i = 0; i < MesCoordonnees.Count; i++)
                {
                    varX = MesCoordonnees[i].X - x;
                    varY = MesCoordonnees[i].Y - y;
                    if (varX >= 10)
                    {
                        ang = CalculAngle(x, y, MesCoordonnees[i].X, MesCoordonnees[i].Y);
                        x = MesCoordonnees[i].X;
                    }
                    else
                    {
                        if (varY >= 10)
                        {
                            ang = CalculAngle(x, y, MesCoordonnees[i].X, MesCoordonnees[i].Y);
                            y = MesCoordonnees[i].Y;
                        }
                    }
                }
                return ang;
    Je place mes angles dans un tableau ensuite qui s'appelle MesAngles .
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    //Convertion du tableau dangles
                    string Code="";
                    for (int i = 0; MesAngles.Count > i; i++)
                    {
                        double Angle = (double)MesAngles[i];
                        if (Angle > AngleRef[8])
                        {
                            Code += "1";
                        }
                        if (Angle >= AngleRef[1] && Angle <= AngleRef[3])
                        {
                            Code += "2";
                        }
                        if (Angle >= AngleRef[2]&& Angle<=AngleRef[4])
                        {
                            Code += "3";
                        }
                        if (Angle >= AngleRef[3] && Angle <= AngleRef[5])
                        {
                            Code += "4";
                        }
                        if (Angle >= AngleRef[4] && Angle <= AngleRef[6])
                        {
                            Code += "5";
                        }
                        if (Angle >= AngleRef[5] && Angle <= AngleRef[7])
                        {
                            Code += "6";
                        }
                        if (Angle >= AngleRef[6] && Angle <= AngleRef[8])
                        {
                            Code += "7";
                        }
                        if (Angle >= AngleRef[7] && Angle <= AngleRef[1])
                        {
                            Code += "8";
                        }
                    }
                    MessageBox.Show(Code);
    voila

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2006
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 627
    Par défaut
    On peut voir comment tu peuples MesAngles ?

  5. #5
    Membre averti
    Inscrit en
    Janvier 2011
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 23
    Par défaut
    A chaque déplacement de la souris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MesAngles.Add(LongueurPix());

  6. #6
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2006
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 627
    Par défaut
    Ta succession de if pour la conversion pose problème, si ton angle fait 226, tu rentreras dans les if suivants :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if (Angle >= AngleRef[5] && Angle <= AngleRef[7])
                        {
                            Code += "6";
                        }
                        if (Angle >= AngleRef[6] && Angle <= AngleRef[8])
                        {
                            Code += "7";
                        }
    Ce qui donne 2 chiffres pour un angle, comme 67...

    Es tu sûr de ta méthode de convertion ?

Discussions similaires

  1. Calcul d'angle entre 2 vecteurs - direction
    Par lothei dans le forum Développement 2D, 3D et Jeux
    Réponses: 4
    Dernier message: 03/09/2007, 19h29
  2. Calcul d'angles
    Par Giansolo dans le forum Octave
    Réponses: 3
    Dernier message: 27/02/2007, 19h00
  3. Calculer les coordonnées de la souris en 3D ?
    Par supergrey dans le forum DirectX
    Réponses: 3
    Dernier message: 26/08/2006, 21h47
  4. calcule d'angle entre 3 points d'une matrice
    Par bmw13fr dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 08/04/2006, 18h56
  5. calculer un angle
    Par m.nico dans le forum Langage
    Réponses: 7
    Dernier message: 05/11/2003, 20h55

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