Répondre à la discussion
Affichage des résultats 1 à 12 sur 12

Convertir des coordonnées d'un plan non droit à un plan droit



  1. #1
    coucfr

    Question Convertir des coordonnées d'un plan non droit à un plan droit


    ------

    bonjour
    suite à la découverte du programme de johnny chung lee pour transformer une wiimote en tableau numérique, (avec ces qualités, et ces défauts) j'essaye de ré-écrire le programme à l'aide d'un script glovepie (plus facile à maitriser que le visual c# express 2005). Malheureusement, je bute sur la conversion des coordonnées transmise par la wiimote pour guider le pointeur de la souris.
    je cherche donc la formule mathématique qui permet de convertir des coordonnées x;y à l'intérieur d'un quadrilatère quelconque (rectangle vue par la caméra infrarouge de la wiimote) en coordonnées dans un rectangle (écran de l'ordinateur).
    pour mieux comprendre, voici un schéma du tableau vue par la wiimote :

    je connais les points de x1;y1 à x4;y4 (étape de la calibration du tableau) le point x5;y5 (position du pointeur infrarouge vue par la wiimote), et je voudrais calculer le point x6;y6 qui correspond à la position du curseur de ma souris.

    pour les personnes qui veulent en savoir plus sur ce tableau numérique, voir : http://www.cs.cmu.edu/~johnny/projects/wii/
    les défauts que je cherche à corriger :
    - les fonctions : mouvement de la souris, clic gauche, clic droit (actuellement seul le clic gauche est géré)
    - défaut sous powerpoint la fonction surligneur et stylos fonctionne mal (voir video : http://fr.youtube.com/watch?v=F9IYX1M7gJY )

    D'avance merci aux courageux et fort en math

    Je précise que mon niveau en math est assez faible.

    il me faudrait donc une formule du genre :
    x6 = quelque chose * x5 + autre chose / etc (fonction de x1 à x5 et y1 à y5)
    y6 = quelque chose * y5 + autre chose / etc (fonction de y1 à y5 et x1 à x5)

    PS: si quelqu'un est intéressé par le résultat de mon programme, je pourrais mettre le script à disposition.

    -----

  2. Publicité
  3. #2
    coucfr

    Re : convertir des coordonnées d'un plan non droit à un plan droit

    la position de la souris sur x est donnée par un chiffre entre 0 et 1 (idem pour y)

    ma méthode actuelle consiste donc à faire le calcul suivant:
    x6 = (x5 - x1 - ((x3-x1)*y6)) / { x4 - x3 - [((x4 - x3) - (x2 - x1)) * y6] }

    y6 = (y6" - 1) * -1
    ce calcul et là pour inverser l'axe des y car les coordonnées de la souris commence dans le coin haut gauche et non pas par le coin bas gauche


    y6" = (y5 - y3 - ((y4-y3)*x6)) / { (y1 - y3 - [((y1 - y3) - (y2 - y4)) * x6] }

    résultat :
    - sur les côtés gauche et droite, la position semble correcte sur les axes X et Y.
    - au centre de l'écran, la position semble correcte uniquement sur l'axe Y. il y à un gros décalage sur l'axe X (le curseur est à droite de la position demandée)

    je présume que :
    - mes formules sont incomplètes.
    - sur l'axe Y, au centre de l'écran il doit aussi y avoir un décalage, (moins prononcer car la distorsion sur l'axe y est faible)
    - cette distorsion est due à l'inclinaison des côtés de mon quadrilatère
    - cette distorsion dépend de cet angle d'inclinaison

    question :
    - mes équations sont-elle sur la bonne piste ??
    - comment corriger cette distorsion ??

  4. #3
    God's Breath

    Re : convertir des coordonnées d'un plan non droit à un plan droit

    En théorie, il suffit de déterminer l'homographie qui transforme
    (x1,y1) en (0,0)
    (x2,y2) en (l,0)
    (x3,y3) en (0,h)
    (x4,y4) en (l,h)
    l et h étant la largeur et la hauteur de l'écran.

    En pratique, les calculs risquent d'être monstrueux.

  5. #4
    coucfr

    Re : convertir des coordonnées d'un plan non droit à un plan droit

    Citation Envoyé par God's Breath Voir le message
    En théorie, il suffit de déterminer l'homographie qui transforme
    (x1,y1) en (0,0)
    (x2,y2) en (l,0)
    (x3,y3) en (0,h)
    (x4,y4) en (l,h)
    l et h étant la largeur et la hauteur de l'écran.

    En pratique, les calculs risquent d'être monstrueux.
    monstrueux comment ??

    je présume donc que les calculs que je fais actuellement ne sont pas juste.

  6. #5
    Ksilver

    Re : convertir des coordonnées d'un plan non droit à un plan droit

    Si par Homographie tu pense identifier le plan au plan complexe est utiliser les application (az+b)/(cz+d) c'est une tres mauvaise idée : ces application sont conforme elle vont donc converver les angles alors qu'on veut envoyer des angles pas droit sur des angles droite. et l'image d'un segment par une homographi est tres rarement un segement.

    au début je pensais à une application affine, le probleme c'est que l'image d'un paralélograme est encore un paralélograme donc ca marche pas non plus.

    honetement, j'ai peur qu'il n'y ai pas de transformation "canonique" qui fasse cela. c'est à dire je pense qu'il y en à plein, mais aucun n'est préférable au autre. la difficulté est donc de rajouter des condition suplaimentaire sur la transformation que tu cherche afin de définir une et une seul transformation.... et la je vois pas trop comment faire sans comprendre plus qu'elle application tu as en tete....

  7. A voir en vidéo sur Futura
  8. #6
    God's Breath

    Re : convertir des coordonnées d'un plan non droit à un plan droit

    Citation Envoyé par Ksilver Voir le message
    Si par Homographie tu pense identifier le plan au plan complexe est utiliser les application (az+b)/(cz+d) c'est une tres mauvaise idée : ces application sont conforme elle vont donc converver les angles alors qu'on veut envoyer des angles pas droit sur des angles droite. et l'image d'un segment par une homographi est tres rarement un segement.
    Je pensais à une homographie projective, parfaitement définie par les images des quatre points à envoyer aux quatre coins de l'écran.
    Reste à en déterminer la matrice 3x3 en passant par des coordonnées homogènes, et à restituer son expression en coordonnées cartésiennes pour les points à distance finie.
    Ya plus qu'à faire les calculs...

    Ca ne marchera que si la transformation cherchée conserve les alignements...

  9. Publicité
  10. #7
    coucfr

    Re : convertir des coordonnées d'un plan non droit à un plan droit

    Citation Envoyé par Ksilver Voir le message
    et la je vois pas trop comment faire sans comprendre plus qu'elle application tu as en tete....

    l'application : c'est celle du tableau numérique.

    - la camera infrarouge d'une télécommande de wii (la wiimote) placé sur le côté de l'écran
    - un stylos avec une diode infrarouge et un bouton
    - mon programme (ou celui de johnny chung lee mais qui à quelques défauts) qui transforme les coordonnées captés par la wiimote sur l'écran et les transformes en coordonnés souris.
    - la précision du positionnement de la souris (et donc du calcul) n'a pas besoin d'être totalement exact. il peut y avoir une légère erreur (la plus petite possible quand même). une erreur de 1 à 5 pixels sur un écran en 1024 x 768 ne devrais pas ce voir.

    le principale problème :
    - la caméra est sur le côté de l'écran (et même parfois décalée vers le bas)
    - ce décalage provoque une distortion de l'écran dépendant directement de la position de la wiimote et donc de(s) l'angle(s) horizontal (et vertical) entre la caméra et le tableau.
    - ce décalage pouvant changer en fonction de l'utilisateur, il y a une étape de calibration.

    Si il faut plusieurs calculs pour réaliser cette transformation, pas de problème ( il faudra bien sure me détailler les étapes car les maths et moi: )

    le logiciel glovepie accepte la plupart des fonctions mathématiques et l'utilisation de variable (mémoire)
    Dernière modification par coucfr ; 27/01/2008 à 10h18. Motif: mise en forme

  11. #8
    coucfr

    Re : convertir des coordonnées d'un plan non droit à un plan droit

    d'après mes recherches sur internet, et mon analyse du programme original de johnny chung lee (programmer en visual c# express que je ne maitrise pas du tout), un solution pourrais être de passer par une (des) matrice(s). (je ne sais pas comment fonctionne une matrice)

  12. #9
    Ksilver

    Re : convertir des coordonnées d'un plan non droit à un plan droit

    Je pensais à une homographie projective, parfaitement définie par les images des quatre points à envoyer aux quatre coins de l'écran.
    Reste à en déterminer la matrice 3x3 en passant par des coordonnées homogènes, et à restituer son expression en coordonnées cartésiennes pour les points à distance finie.


    certe ca définit une unique application, mais celle ci ne conserve pas les segements : un segment est envoyé sur un arc d'ellipse si je ne me trompe pas.

  13. #10
    God's Breath

    Re : convertir des coordonnées d'un plan non droit à un plan droit

    Les transformations projectives transforment les droites en droites, fort heureusement.

  14. #11
    coucfr

    Re : Convertir des coordonnées d'un plan non droit à un plan droit

    Je pensais aussi:
    Est-il possible de "redresser" les axes X, Y et les cotés du quadrilatère.
    Il y aurait ainsi une transformation des coordonnées faites en 4 étapes :
    - on "redresse" les coordonnées X5, Y5 sur l'axe Y on trouve X5', Y5'
    - on "redresse" les coordonnées X5', Y5' sur le côté haut on trouve X5'', Y5''
    - on "redresse" les coordonnées X5'', Y5'' sur le côté droit on trouve X5''', Y5'''
    - on "redresse" les coordonnées X5''', Y5''' sur l'axe X on trouve X6, Y6

    Le fait de "redresser" les coordonnées X5, Y5 sur l'axe Y provoque un déplacement du point X5, Y5 selon un arc de cercle ayant pour centre X3, Y3
    Quel serait la formule qui permet de calculer ce déplacement ?

    Le fait de "redresser" les coordonnées sur le côté haut provoque un déplacement du point X5', Y5' selon un arc de cercle ayant pour centre X1, Y1
    Quel serait la formule qui permet de calculer ce déplacement ?

    pour les autres transformation, je pense pouvoir arrivé à adapté les calculs

  15. #12
    coucfr

    Re : Convertir des coordonnées d'un plan non droit à un plan droit

    pour "redresser" x5, y5 sur l'axe Y je pensais utiliser la méthode :

    ( x, y) = ( rayon cos angle , rayon sin angle )

    et donc faire:

    x5' = √ [(X5-X3)² + (y5-y3)²] * [ (X1-x3)/ √ [(X1-X3)² + (Y1-Y3)²]}

    même genre de calcul sur Y, et aussi sur (X1, Y1) (X2, Y2) (X4, Y4)

    même principe pour "redresser" sur l'axe X

    par contre comment faire pour "redresser" sur l'axe haut et sur l'axe droit ?

    Svp : dites moi si mon raisonnement est juste

  16. Publicité

Sur le même thème :

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/11/2007, 13h51
  2. Conversion d'un espace de 3 points dans plan XYZ en un plan XY.
    Par philname dans le forum Mathématiques du supérieur
    Réponses: 4
    Dernier message: 16/10/2007, 00h04
  3. convertir coordonée d'un point d'un plan dans un autre plan
    Par _Aravis dans le forum Mathématiques du supérieur
    Réponses: 1
    Dernier message: 26/09/2007, 21h10
  4. Convertion latitude/longitude en coordonnées dans le plan
    Par sergeoxford dans le forum Mathématiques du supérieur
    Réponses: 7
    Dernier message: 03/09/2007, 11h56
  5. Retrouver les coordonnées 3D d'un point projeté sur un plan?
    Par lho94 dans le forum Mathématiques du supérieur
    Réponses: 5
    Dernier message: 18/02/2006, 15h17