Code de direction

Messages postés
65
Date d'inscription
mercredi 10 novembre 2010
Statut
Membre
Dernière intervention
27 mai 2012
- - Dernière réponse : 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
Afficher la suite 

8 réponses

Messages postés
239
Date d'inscription
lundi 5 décembre 2005
Statut
Membre
Dernière intervention
27 août 2012
5
0
Merci
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
Commenter la réponse de Tupad
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
11
0
Merci
Salut,

Perso j'aurais fait plus simple (et donc certainement moins juste).
Tu prends le point initial, le point final : t'as un vecteur.
Commenter la réponse de cs_jopop
Messages postés
65
Date d'inscription
mercredi 10 novembre 2010
Statut
Membre
Dernière intervention
27 mai 2012
0
Merci
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
Commenter la réponse de AzevedoSt27
Messages postés
65
Date d'inscription
mercredi 10 novembre 2010
Statut
Membre
Dernière intervention
27 mai 2012
0
Merci
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
Commenter la réponse de AzevedoSt27
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
11
0
Merci
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.
Commenter la réponse de cs_jopop
Messages postés
792
Date d'inscription
mardi 8 juillet 2003
Statut
Membre
Dernière intervention
12 juillet 2019
7
0
Merci
Bonjour,
tu peux aussi aller voir pour une méthode lissage de courbe :
http://raphaello.univ-fcomte.fr/ig/lissage/Lissage.htm


louis
Commenter la réponse de cs_louis14
Messages postés
65
Date d'inscription
mercredi 10 novembre 2010
Statut
Membre
Dernière intervention
27 mai 2012
0
Merci
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
Commenter la réponse de AzevedoSt27
Messages postés
65
Date d'inscription
mercredi 10 novembre 2010
Statut
Membre
Dernière intervention
27 mai 2012
0
Merci
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
Commenter la réponse de AzevedoSt27