Code de direction

AzevedoSt27 Messages postés 65 Date d'inscription mercredi 10 novembre 2010 Statut Membre Dernière intervention 27 mai 2012 - 14 mai 2012 à 10:52
AzevedoSt27 Messages postés 65 Date d'inscription mercredi 10 novembre 2010 Statut Membre Dernière intervention 27 mai 2012 - 21 mai 2012 à 09:50
Bonjour,

Voila le but de mon programme est de récupérer toute les valeur x et y lorsque mon bouton central est enfoncer. ensuite je récupère s'est valeur pour determiner les direction comme l'exemple sur ce lien III-B

le problème est que l'utilisatueur ne fera jamais un trait tous droit.
alors j'aimerais savoir comment faire pour determiner s'est derection avec une taulerance.

Merci de votre aide.

Amicalement

AzevedoSt

8 réponses

Tupad Messages postés 239 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 27 août 2012 5
14 mai 2012 à 11:49
Prenons 3 points (x1, y1), (x2, y2), (x3, y3)
Tu connais la pente p1 du segment défini par les points (x1, y1) et (x2, y2) = (y2-y1)/(x2-x1).
Tu peux comparer la pente p2 du segment défini par les points (x2, y2) et (x3, y3) à celle de p1 = (p2-p1)/p1 * 100
Et tu compares le résultat avec ton seuil de tolérance
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
14 mai 2012 à 12:00
Salut,

Perso j'aurais fait plus simple (et donc certainement moins juste).
Tu prends le point initial, le point final : t'as un vecteur.
0
AzevedoSt27 Messages postés 65 Date d'inscription mercredi 10 novembre 2010 Statut Membre Dernière intervention 27 mai 2012
14 mai 2012 à 13:12
Salut,

Merci pour vos réponce.

Tupad peux tu me donnée le calcul si je rejoute une tolérance je ne s'est pas ou la placé!

Jopop non car si je fais un V cela ne fonctionnera pas si je prend les 2 dernier point.

Merci

AzevedoSt
0
AzevedoSt27 Messages postés 65 Date d'inscription mercredi 10 novembre 2010 Statut Membre Dernière intervention 27 mai 2012
14 mai 2012 à 13:44
Salut tupad,

J'ai esseillé ton mais cela me donne des valeur bizarre je te montre mon code.

public void Recuperation(int iX, int iY)
        {
            lX.Add(iX);
            lY.Add(iY);
        }

        public void Analyse()
        {
            for (int i = 0; i < lX.Count; i++)
            {
                if (iCpt == 0)
                {
                    iCx1 = lX[i];
                    iCy1 = lY[i];
                    iCpt++;
                }
                else
                {
                    if (iCpt == 1)
                    {
                        iCx2 = lX[i];
                        iCy2 = lY[i];
                        iPente1 = (iCy2 - iCy1) / (iCx2 - iCx1);
                        iCpt++;
                    }
                    else
                    {
                        iCx3 = lX[i];
                        iCy3 = lY[i];
                        iPente2 = (iCy3 - iCy2) / (iCx3 - iCx2);
                        iPenteFinal = (iPente1 - iPente2) / iPente1 * 100;
                        iCpt = 0;
                    }
                }

            }
        }

Le problème peux venir pcq j'utilise des variable int ???
ou s'implement pcq mon code est faux X_x

Merci pour ta patience.

AzevedoSt
0

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

Posez votre question
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
14 mai 2012 à 14:36
En même temps si tu fais un V tu montre pas une sens ^^

NB : tout calcul comprenant des divisions doit être fait avec des float ou double.
0
cs_louis14 Messages postés 793 Date d'inscription mardi 8 juillet 2003 Statut Membre Dernière intervention 10 février 2021 8
14 mai 2012 à 14:43
Bonjour,
tu peux aussi aller voir pour une méthode lissage de courbe :
http://raphaello.univ-fcomte.fr/ig/lissage/Lissage.htm


louis
0
AzevedoSt27 Messages postés 65 Date d'inscription mercredi 10 novembre 2010 Statut Membre Dernière intervention 27 mai 2012
14 mai 2012 à 14:51
Salut Louis,

j'ai regarder ton lien cela me semble bien compliquer ^^

je dois vraiment me basser sur le system de direction qui est mentionné sur mon lien de mon premier post.

Merci quand même :)

AzevedoSt
0
AzevedoSt27 Messages postés 65 Date d'inscription mercredi 10 novembre 2010 Statut Membre Dernière intervention 27 mai 2012
21 mai 2012 à 09:50
Bonjour,

Voila j'ai fais mon code mais cela ne fonctionne pas très bien cela est normal car mon code est très simple.

voici mon code:
//Récupaire les données X et Y et les ajoutes dans un tableau.
        public void Recuperation(int iX, int iY)
        {
            lX.Add(iX);
            lY.Add(iY);
            Ergonomie();
        }

        public void Analyse()
        {
            for (int i = 0; i < lX.Count; i++)
            {
                if (iCptA == 0)
                {
                    iCx1 = lX[i];
                    iCy1 = lY[i];
                    iCptA++;
                }
                else
                {
                    if (iCptA == 4)
                    {
                        iCx2 = lX[i];
                        iCy2 = lY[i];

                        //Algorithme de reconnaissance
                        if (iCx1 == iCx2 && iCy1 > iCy2)
                        {
                            strCordFinal += "1";
                        }

                        if (iCx1 < iCx2 && iCy1 > iCy2)
                        {
                            strCordFinal += "2";
                        }

                        if (iCx1 < iCx2 && iCy1 == iCy2)
                        {
                            strCordFinal += "3";
                        }

                        if (iCx1 < iCx2 && iCy1 < iCy2)
                        {
                            strCordFinal += "4";
                        }

                        if (iCx1 == iCx2 && iCy1 < iCy2)
                        {
                            strCordFinal += "5";
                        }

                        if (iCx1 > iCx2 && iCy1 < iCy2)
                        {
                            strCordFinal += "6";
                        }

                        if (iCx1 > iCx2 && iCy1 == iCy2)
                        {
                            strCordFinal += "7";
                        }

                        if (iCx1 > iCx2 && iCy1 > iCy2)
                        {
                            strCordFinal += "8";
                        }

                        iCx1 = iCx2;
                        iCy1 = iCy2;
                        iCptA = 0;
                    }
                    else
                    {
                        iCptA++;
                    }
                }
            }
        }


Maintenant mon problème est que si je dessine un V je dois obtenir la valeur 42 dans strCordFinal mais dans ce cas la vu que je fais pixel par pixel j'obtient 54545454541212121212 car l'utilisateur ne fera jamais un trait tous droit. je ne sais pas comment faire...

Aidez-moi svp

AzevedoSt
0
Rejoignez-nous