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

Mathématiques Discussion :

Calculer les coordonnées 3D d'un point à partir de distances d'autres points


Sujet :

Mathématiques

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2017
    Messages : 12
    Points : 1
    Points
    1
    Par défaut Calculer les coordonnées 3D d'un point à partir de distances d'autres points
    Bonjour à tous, et surtout aux matheux

    Je souhaite calculer la position d'un point P(x,y,z) à partir des distances que le sépare de 4 autres points A(x1,y1,z1), B(x2,y2,z2), C(x3,y3,z3), D(x4,y4,z4).

    Pour imager (si besoin), imaginez-vous avec un télémètre laser dans une pièce,
    dans laquelle les points A,B,C,D sont des réflecteurs, que vous pointiez chaque point et relevez chaque distance mesurée:
    P-A = d1,
    P-B = d2,
    P-C = d3,
    P-D = d4,

    Merci pour votre contribution pour la mise en équation, et l'algorithme pour la résolution.

    Cultivons nos neurones, c'est bon pour notre cerveau

  2. #2
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 051
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 051
    Points : 9 386
    Points
    9 386
    Par défaut
    La difficulté est un peu "mathématique", mais elle est aussi dans l'énoncé du problème.

    A partir de la première mesure (A, d1) , tu vas pouvoir dire : le point cherché est sur la sphère d'équation ...
    En prenant en compte la 2ème mesure , tu vas pouvoir dire que le point cherché est à l'intersection de 2 sphères. En général, l'intersection de 2 sphères, c'est un cercle. Parfois, l'intersection de 2 sphères, c'est l'ensemble vide. On va se placer dans le cadre général, on a un cercle.
    En prenant en compte la 3ème mesure, on va devoir chercher l'intersection d'un cercle ( résultat des 2 premières mesures) et d'une sphère. Et ça nous donne 2 points.
    Enfin, en prenant en compte la 4ème mesure, il y a toutes les chances que la 4ème sphère ne passe par aucun de ces 2 points. Et donc, problème !

    Es-tu d'accord avec ce constat. Et du coup, comment envisages-tu la suite ?
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2017
    Messages : 12
    Points : 1
    Points
    1
    Par défaut
    Effectivement, une mesure impose une précision/tolérance, et donc une possibilité qu'il existe aucune intersection des 3 cercles...
    Alors comment ajouter cette valeur de tolérance dans la résolution de mon problème afin de trouver une solution avec une précision connue ???

    [ Un voyage de mille lieues commence toujours par un premier pas. ]

    Merci ....

  4. #4
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 617
    Points : 188 585
    Points
    188 585
    Par défaut


    La formulation mathématique est relativement simple : il s'agit de résoudre un système de quatre équations non linéaires (en général) à trois inconnues. Les quatre équations correspondent aux distances à imposer.

    Sinon, pour obtenir une solution, je te propose un autre paradigme (je suis biaisé, je sais ) : minimiser l'écart par rapport aux distances que tu donnes (puisqu'il s'agit de mesures, tu as très certainement des erreurs, c'est un mécanisme assez élégant pour contourner le problème). Il s'agirait donc de minimiser Formule mathématique avec les quatre contraintes :

    Formule mathématique

    Tu as ainsi sept variables : les trois coordonnées de P, les quatre variables d'écart s_i (tu peux donner des bornes pour expliciter que tu n'acceptes pas d'être éloigné d'un point que de l'autre). En pratique, tu peux résoudre ce problème avec des outils d'optimisation mathématique "globale" (BARON, Couenne, par exemple, mais Excel le peut aussi, avec un succès nettement moins garanti). Il y a probablement moyen de reformuler ça de manière convexe, si ça t'intéresse.

    Avant de te lancer là-dedans, résoudre le problème pour trois points et vérifier que tu es assez près du quatrième t'indiquera à quel point tu dois y mettre de l'énergie (si tu y es à quelques nanomètres près, le quatrième point ne sert que de vérification).
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2017
    Messages : 12
    Points : 1
    Points
    1
    Par défaut
    L'idée me parait très intéressante, sachant que les 4 points sont des mesures, et que par la notion de précision, je dispose de plusieurs mesures pour chaque point,
    car évidemment à chaque mesure d'un point génère une petite variation de position est possible ...

    Mais l'idée de minimiser l'écart se traduit par un système que je ne sais pas résoudre ou coder
    car en finalité je souhaite coder une fonction pour calculer les coordonnées X,Y,Z de mon point .

  6. #6
    Membre confirmé
    Homme Profil pro
    .
    Inscrit en
    Juin 2002
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : .
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2002
    Messages : 239
    Points : 567
    Points
    567
    Par défaut
    Bonjour.

    Comme il a été dit plus haut, le problème se traduit mathématiquement par un système de 4 équations du second degré.

    Chaque équation est de la forme Formule mathématique
    avec i =1,2,3,4.

    Si on soustrait la première équation aux trois autres, on récupère un système linéaire de 3 équations à 3 inconnues.

    On se retouve alors en terrain connu.

    Le déterminant du système est ici ( à un coeff -8 près ) :

    Formule mathématique

    Il est facile de voir que ce déterminant est égal à :

    Formule mathématique

    ( retrancher la première ligne aux autres, puis développer par rapport à la première colonne ).

    Or D est nul si et seulement si les 4 points A,B,C,D sont coplanaires.

    Ainsi, lorsque les points A,B,C,D ne sont pas coplanaires, le système linéaire est de Cramer et possède une solution unique.
    Cette solution se trouve par les méthodes numériques classiques, en particulier celle de Gauss.

    Par contre, si les 4 points sont coplanaires, le système linéaire n'est plus de Cramer ...

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2017
    Messages : 12
    Points : 1
    Points
    1
    Par défaut
    Plus je lis, plus je comprends que j'ai perdu des neurones de math....
    C'est sûr qu'à ne plus s'en servir... c'est comme toute mécanique : ça se grippe

    Alors coplanaires.... euh ... bah non chacun de mes 4 points sont par exemple comme dans ce cas :

    Nom : 3D-position.jpg
Affichages : 3709
Taille : 31,4 Ko


    Concernant la notion de tolérance/précision, pourriez-vous m'orienter vers un type d’algorithme pour résoudre mon problème ?

  8. #8
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 617
    Points : 188 585
    Points
    188 585
    Par défaut
    Citation Envoyé par BlueSky77 Voir le message
    Concernant la notion de tolérance/précision, pourriez-vous m'orienter vers un type d’algorithme pour résoudre mon problème ?
    Si tu prends mon approche et que tu souhaites à tout prix coder tout toi-même, oriente-toi vers une méthode numérique d'optimisation non linéaire avec contraintes non linéaires, comme des gradients conjugués projetés. Ce genre de chose n'est pas forcément facile à coder en généralité (et ma spécialité n'est pas d'adapter des algorithmes à des problèmes spécifiques…).

    Sinon, prends un solveur existant (c'est une approche assez courante, je te rassure) qui est capable de résoudre ce type de problème (en fait, des problèmes bien plus généraux). L'idéal est de coupler une couche de modélisation avec un solveur, auquel cas tu définiras les sept variables, la fonction à minimiser, les contraintes sur les distances, puis un appel à une fonction solve() te donne la solution à ton problème (assez) rapidement. (Quelques exemples, selon les langages, pour de la modélisation : JuMP avec Julia, Pyomo en Python ; pour les solveurs, indépendants du langage que tu emploies : Couenne ou Ipopt côté libre et gratuit.)



    Ou alors, en repartant des développements de Prof, il y a moyen d'écrire le système à quatre équations avec une tolérance (qui n'est pas vraiment une distance dans la formulation que je propose, mais passons) :

    Formule mathématique

    Tu peux résoudre ce système pour les s_i. De là, minimiser l'écart total revient à minimiser la somme des Formule mathématique. Tu peux alors regarder du côté d'un gradient conjugué "simple", nettement plus facile à écrire toi-même (il s'agit de trouver un zéro de la dérivée de la somme des tolérances, donc un très bon point P — voire le meilleur, si le problème est convexe).

    Ce n'est pas garanti sans erreur, vu l'heure .
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2017
    Messages : 12
    Points : 1
    Points
    1
    Par défaut
    Disons que "coder à tout prix" ce n'est pas un choix, mais une nécessité, je dois calculer les coordonnées au fil de l'eau de la réception des distances du capteur....

    Alors je souhaite une solution autonome, mais à la lecture de tout cela, il me semble que je suis plus assez matheux pour tout reprendre à zéro ....

    Pourtant, ce type de cas a dû déjà être traité .... ???

  10. #10
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2012
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2012
    Messages : 163
    Points : 624
    Points
    624
    Par défaut
    L'astuce de soustraire la première équation aux trois autres pour se ramener à un système linéaire semble fonctionner.

    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
    #!/usr/bin/env python3
    import numpy, math
     
    # données initiales
    x1, y1, z1, d1 =  1,  2, 10, math.sqrt(146)
    x2, y2, z2, d2 =  7, -2,  0, math.sqrt(66)
    x3, y3, z3, d3 = 14,  4, -2, math.sqrt(49)
    x4, y4, z4, d4 =  2,  5,  8, math.sqrt(86)
     
    # calcule les matrices a et b
    a = numpy.array([[x1-x2, y1-y2, z1-z2],
                     [x1-x3, y1-y3, z1-z3],
                     [x1-x4, y1-y4, z1-z4]])
    b = 0.5 * numpy.array([[d2**2-d1**2 + x1**2-x2**2 + y1**2-y2**2 + z1**2-z2**2],
                           [d3**2-d1**2 + x1**2-x3**2 + y1**2-y3**2 + z1**2-z3**2],
                           [d4**2-d1**2 + x1**2-x4**2 + y1**2-y4**2 + z1**2-z4**2]])
     
    # resout le système ap=b (ici, on attend p = [8, 6, 1])
    p = numpy.linalg.solve(a, b)
    print(p)

  11. #11
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2017
    Messages : 12
    Points : 1
    Points
    1
    Par défaut
    @zobal : je connais que du nom cet énorme serpent de code "python"
    Mais je vois que cela se "solve" assez facilement avec cette librairie "numphy"

    après quelques lectures de la librairie, est-il juste de prévoir que si la résolution ne s'opère pas, à cause de la précision de la mesure,
    l'utilisation de "numpy.linalg.lstsq" pourrait fournir une solution approchée ?

    j'avance... pas à pas... mais j'avance : Merci à tous

  12. #12
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2012
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2012
    Messages : 163
    Points : 624
    Points
    624
    Par défaut
    A priori, ce n'est pas très compliqué à traduire en octave ou en c++.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    p1 = [ 1,  2, 10];  d1 = sqrt(146);
    p2 = [ 7, -2,  0];  d2 = sqrt(66);
    p3 = [14,  4, -2];  d3 = sqrt(49);
    p4 = [ 2,  5,  8];  d4 = sqrt(86);
     
    a = [p1-p2, 
         p1-p3, 
         p1-p4];
     
    b = 0.5 .* [d2^2 - d1^2 - sum(p2.^2) + sum(p1.^2),
                d3^2 - d1^2 - sum(p3.^2) + sum(p1.^2),
                d4^2 - d1^2 - sum(p4.^2) + sum(p1.^2)];
     
    p = a\b
    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
    #include <cmath>
    #include <Eigen/Dense>
    #include <iostream>
     
    int main() {
        Eigen::RowVector3f p1, p2, p3, p4;
        float d1, d2, d3, d4;
        p1 <<  1,  2, 10;  d1 = sqrt(146);
        p2 <<  7, -2,  0;  d2 = sqrt(66);
        p3 << 14,  4, -2;  d3 = sqrt(49);
        p4 <<  2,  5,  8;  d4 = sqrt(86);
     
        Eigen::Matrix3f a;
        a << p1-p2, p1-p3, p1-p4;
     
        Eigen::Vector3f b;
        b << d2*d2 - d1*d1 - p2.squaredNorm() + p1.squaredNorm(),
             d3*d3 - d1*d1 - p3.squaredNorm() + p1.squaredNorm(),
             d4*d4 - d1*d1 - p4.squaredNorm() + p1.squaredNorm();
        b *= 0.5;
     
        Eigen::Vector3f p = a.colPivHouseholderQr().solve(b);
        std::cout << p << std::endl;
     
        return 0;
    }
    Et pour l'histoire de la précision, la méthode des moindres carrés (lstsq) n'est utile que si tu as plus de 4 points.
    Si tu as plusieurs mesures par point, il vaut mieux simplement prendre la moyenne.

  13. #13
    Membre confirmé
    Homme Profil pro
    .
    Inscrit en
    Juin 2002
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : .
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2002
    Messages : 239
    Points : 567
    Points
    567
    Par défaut
    Je vais détailler entièrement la méthode pratique que j'ai exposée brièvement plus haut.

    Avant cela, je signale que le problème posé est connu sous le nom de trilatération.

    C'est un problème de géométrie qui est devenu mondialement célèbre avec l'avènement du G.P.S.

    La trilatération consiste à déterminer la position d'un point à partir de ses distances à d'autres points de référence.
    Dans l'espace à 3 dimensions, il faut au minimum 3 points de référence, non alignés.
    Dans ce cas, la solution n'est pas unique mais double : les points M et M' symétriques par rapport au plan contenant A,B,C.
    Le Wikipedia anglais explique en détail la méthode pratique pour 3 points ; voir https:\\en.wikipedia.org/wiki/Trilateration.

    Lorsque il y a 4 points de référence non coplanaires, la solution est unique.
    De plus, cette solution peut être obtenue en résolvant un système linéaire de 3 équations à 3 inconnues, qui est de Cramer.

    Je laisserai de côté la difficulté liée à l'incertitude des mesures.
    Je suppose en effet que BlueSky77 ne cherche pas à préparer un bombardement ciblé de la baignoire de Kim Jong-un.
    Par contre, pour la précision du G.P.S, il est impératif de surmonter cette difficulté.
    Pour plus de détails, voir par exemple http:\\inside.mines.edu/~whereman/talks/TurgutOzal-11-Trilateration.pdf

    Revenons à la méthode pratique pour 4 points de référence A,B,C,D non coplanaires.

    Les points de référence sont connus par leur coordonnées : A(x1,y1,z1), B(x2,y2,z2), C(x3,y3,z3), D(x4,y4,z4).
    On cherche à calculer les coordonnées x,y,z d'un point M dont on connait les distances d1,d2,d3,d4 aux points A,B,C,D.

    Ces coordonnées x,y,z sont solutions du système non linéaire suivant :

    Formule mathématique

    Si on développe les carrés et si on soustrait la première équation aux trois autres, on obtient le système linéaire suivant :

    Formule mathématique

    Si on pose :

    Formule mathématique

    le système précédent s'écrit plus simplement :

    Formule mathématique

    Sachant que les 4 points A,B,C,D ne sont pas coplanaires, ce dernier système est de Cramer.

    On va le résoudre par la méthode bourinne, c'est-à-dire les formules de Cramer.
    Cela permettra d'avoir des formules facilement traduisibles dans n'importe quel langage de programmation.
    Il ne sera ainsi pas nécessaire de faire appel à une bibliothèque spécialisée ( comme par exemple Numpy avec Python ).

    On a besoin d'une formule donnant le déterminant suivant :

    Formule mathématique

    Posons donc :
    Formule mathématique

    Si on note

    Formule mathématique

    la solution au problème est alors :

    Formule mathématique

  14. #14
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut Calculer les coordonnées 3D d'un point à partir de distances d'autres points
    Bonjour,

    Je découvre le sujet à l'instant, ainsi que les nombreuses réponses. Des remarques pertinentes ont été apportées dès le début de l'échange, mais un peu perdues de vue par la suite.

    L'essentiel du problème - que tbc92 a immédiatement repéré:
    Citation Envoyé par tbc92 Voir le message
    ... Enfin, en prenant en compte la 4ème mesure, il y a toutes les chances que la 4ème sphère ne passe par aucun de ces 2 points. Et donc, problème ! ...
    est qu'il faut résoudre un système d'équations surdéterminé, puisque qu'il comporte plus d'équations (4) que d'inconnues - les trois coordonnées du point (P) à localiser.
    Sa résolution relève donc de la méthode des moindres carrés, ce qu'a pressenti dourouc05, sans pousser le procédé jusqu'à son terme:
    Citation Envoyé par dourouc05 Voir le message
    ... La formulation mathématique est relativement simple : il s'agit de résoudre un système de quatre équations non linéaires (en général) à trois inconnues. Les quatre équations correspondent aux distances à imposer.

    Sinon, pour obtenir une solution, je te propose un autre paradigme ... : minimiser l'écart par rapport aux distances que tu donnes (puisqu'il s'agit de mesures, tu as très certainement des erreurs, c'est un mécanisme assez élégant pour contourner le problème). Il s'agirait donc de minimiser Formule mathématique avec les quatre contraintes :
    Formule mathématique
    C'est Formule mathématique qu'il faut minimiser, après avoir posé: Formule mathématique (1).
    La présence d'erreurs affectant les données constitue justement une aubaine, puisqu'elle permet de sortir de l'impasse d'un énoncé dépourvu de solution exacte.
    (1) Merci à dourouc05 pour ces formules prêtes à l'emploi !

    # Aspect géométrique: supposons qu'il existe une solution au système d'équations:
    (1) A1P = d1 ;
    (2) A2P = d2 ;
    (3) A3P = d3 ;
    (4) A4P = d4 .
    La première équation conduit à la sphère de rayon (d1), centrée en (A1);
    les équations (1) et (2) à un cercle d'axe (A1A2);
    les équations (1), (2) et (3) au deux points d'intersection (I1, I2) de deux cercles non coplanaires, d'axes ((A1A2) et (A2A3);
    le système entier à celui des deux points précédents vérifiant: A4Ij = d4 .
    Si l'indexation des distances correspond à une suite décroissante, il y a quelque chance pour que les points (A4) et (P) se situent du même côté du plan (A1A2A3) ...

    @ Prof: ton idée est ingénieuse, mais je crains qu'elle ne s'apparente au plan de vol d'un kamikaze, parce qu'elle part d'une prémisse fausse: l'existence de la solution exacte; tu aurais pu tout aussi bien retrancher les équations (2), (3) ou (4) pour obtenir 3 autres systèmes d'équations; je doute que la moyenne des 4 points ainsi obtenus constitue une solution, même approchée, du problème à résoudre; le maniement des systèmes linéaires conduit facilement à des points très éloignés et dépourvus de signification.
    Une variante de ce que tu proposes consisterait à résoudre séparément 3 équations, pour obtenir quatre solutions:
    système (2, 3, 4): P1 ;
    système (1, 3, 4): P2 ;
    système (1, 2, 4): P3 ;
    système (1, 2, 3): P4 .
    Le calcul du barycentre (G), des nouvelles distances (d'i = AiG) et de l'écart moyen par rapport à leur valeur initiale pourrait conduire à un procédé itératif, mais qui me paraît lourd et bien incertain.

    # La solution ? Je ne vois que:
    a) l'un des procédés initialement proposés, et qui pourraient nous être un peu détaillés:
    Citation Envoyé par dourouc05 Voir le message
    ... En pratique, tu peux résoudre ce problème avec des outils d'optimisation mathématique "globale" (BARON, Couenne, par exemple, mais Excel le peut aussi, avec un succès nettement moins garanti) ...
    b) un procédé itératif dérivant de la méthode des moindres carrés: déjà fort indigeste sur le papier, et que je n'a pas le temps de poster;
    c) un calcul de barycentre, avec des coefficients appropriés (idée soudaine, à approfondir ...).


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  15. #15
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 051
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 051
    Points : 9 386
    Points
    9 386
    Par défaut
    Effectivement, Prof fait une erreur. A un moment, il a 4 équations ; puis il passe à 3 équations. Au passage, il supprime donc une des contraintes.

    Si je prends 4 balises, avec 4 distances, le calcul proposé me donne un certain résultat.
    Si je reprends les 4 même balises, avec les 4 même distances, mais en ordonnant les balises différemment ( B1--> B2 ; B2 --> B3 ; B3 --> B4 ; B4 --> B1 ) alors je n'obtiens pas le même résultat.

    Ceci dit, si on sait que les 4 mesures sont très précises, et si on n'a pas forcément besoin d'un positionnement très précis, on prend le résultat donné par le calcul de Prof, et ce sera pas mal.


    Au départ, j'avais en tête une méthode basée sur les moindres carrés. Et donc on cherche le point qui donne l'erreur minimum. On passe par une dérivée à un moment, puis on a un système à résoudre. Mais ce n'est pas aussi simple que ce que j'imaginais....
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  16. #16
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut Calculer les coordonnées 3D d'un point à partir de distances d'autres points
    Citation Envoyé par tbc92 Voir le message
    ... A un moment, il a 4 équations ; puis il passe à 3 équations.
    Au passage, il supprime donc une des contraintes ...
    Explication pertinente de ce qui se passe: le calcul proposé revient à remplacer implicitement les quatre relations initiales
    (1) A1P = d1 ;
    (2) A2P = d2 ;
    (3) A3P = d3 ;
    (4) A4P = d4 ;
    par trois autres:
    (2') A2P2 - A1P2 = d22 - d12 ;
    (3') A3P2 - A1P2 = d32 - d12 ;
    (4') A4P2 - A1P2 = d42 - d12 .
    J'ai néanmoins indiqué une variante possible.

    Citation Envoyé par tbc92 Voir le message
    ... Ceci dit, si on sait que les 4 mesures sont très précises, et si on n'a pas forcément besoin d'un positionnement très précis, on prend le résultat donné par le calcul de Prof, et ce sera pas mal ...
    Espérance hasardeuse, bien que conforme au sens commun: une petite variation de l'une des distances peut entraîner l'annulation ou le changement de signe du déterminant (D), qui figure au dénominateur des expressions de (x, y) et (z). C'est la fâcheuse propension des systèmes linéaires à conduire à des points très éloignés, dans des directions éventuellement opposées, quand ce c'est pas à l'infini ... des coefficients relativement proches ne donnent pas nécessairement des solutions proches.

    Raison de plus pour se détourner des équations linéaires, et reprendre la recherche d'un minimum, bien que cela paraisse assez laborieux. Sur d'autres forums se sont posés des problèmes analogues (régression circulaire ou sphérique, je crois).


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  17. #17
    Membre confirmé
    Homme Profil pro
    .
    Inscrit en
    Juin 2002
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : .
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2002
    Messages : 239
    Points : 567
    Points
    567
    Par défaut
    Je pensais avoir été clair dans mon message précédent.

    OUI, j'ai volontairement supprimé une des équations.

    Je me cite puisque visiblement on n'a pas pris la peine de me lire en entier :

    Je laisserai de côté la difficulté liée à l'incertitude des mesures.
    Je suppose en effet que BlueSky77 ne cherche pas à préparer un bombardement ciblé de la baignoire de Kim Jong-un.
    Par contre, pour la précision du G.P.S, il est impératif de surmonter cette difficulté.
    Pour plus de détails, voir par exemple http:\\inside.mines.edu/~whereman/talks/TurgutOzal-11-Trilateration.pdf
    Les difficultés soulevées par la précision du système GPS ont fait l'objet d'innombrables travaux.
    Le lien que j'ai cité ci-dessus expose plusieurs approches possibles pour résoudre ce problème.
    Elles sont certainement bien loin du post initial et des souhaits de BlueSky77.

    Ce dernier est venu demander une aide pour résoudre un problème précis, non pour lire des considérations générales sur ce qu'il faudrait faire dans le meilleur des mondes.
    Considérations qui ne contiennent d'ailleurs AUCUN CODE.

    Personnellement, j'ai donné un code, plus précisément des formules qui se traduisent facilement dans n'importe quel langage de programmation.

    L'argument contre la méthode que je propose :
    Espérance hasardeuse, bien que conforme au sens commun: une petite variation de l'une des distances peur entraîner l'annulation
    ou le changement de signe du déterminant (D), qui figure au dénominateur des expressions de (x, y) et (z).
    C'est la fâcheuse propension des systèmes linéaires à conduire à des points très éloignés, dans des directions éventuellement opposées,
    quand ce c'est pas à l'infini ... des coefficients relativement proches ne donnent pas nécessairement des solutions proches.

    Raison de plus pour se détourner des équations linéaires, et reprendre la recherche d'un minimum, bien que cela paraisse assez laborieux.
    ne tient pas, parce que le déterminant D qui figure dans mes calculs ne dépend que des points de référence A,B,C,D.
    Lesquels, non seulement sont fixes, mais bien loin d'une position plane comme le montre le dessin que BlueSky77 a publié plus haut.
    Donc D est constant, D n'est pas nul et D est assez loin de 0.
    On peut donc sans problème utiliser un système linéaire.
    Images attachées Images attachées  

  18. #18
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 051
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 051
    Points : 9 386
    Points
    9 386
    Par défaut
    On est bien d'accord, Prof, l'objectif n'est pas d'avoir un résultat plus précis que les mesures... Mais essayons d'avoir un résultat aussi précis que les mesures.

    On a 4 balises. Ces 4 balises définissent en gros un pyramide à base triangulaire. Pour l'illustration, on va considérer que les balises sont en gros à 1m les unes des autres.

    Si le point cherché est quelque part vers le milieu de cette pyramide, tout va bien. Les sphères se coupent à angle droit (pas vraiment, mais c'est l'idée). Un décalage de 1mm sur une des mesures va donner un décalage de 1mm sur le résultat. Pas de problème.

    Si maintenant le point cherché est proche d'une des arêtes de cette pyramide, ou s'il est nettement à l'extérieur de cette pyramide. Alors on a certaines sphères qui sont quasiment tangentes 2 à 2 au point dcherché, Et un décalage de 1mm dans une des mesures peut entraîner un déplacement de quelques cm sur le résultat. Suivant qu'on utilise l'une ou l'autre des 4 pyramides en n°1, on aura 4 résultats assez différents.

    D'où l'intérêt de se prémunir contre ça.

    Si dans le cas proposé, on a l'assurance que le point cherché est bien encerclé par les 4 balises, alors ok, pas besoin de prendre trop de précautions.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  19. #19
    Membre confirmé
    Homme Profil pro
    .
    Inscrit en
    Juin 2002
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : .
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2002
    Messages : 239
    Points : 567
    Points
    567
    Par défaut
    Il suffit de regarder le dessin fourni par BlueSky77.

  20. #20
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut Calculer les coordonnées 3D d'un point à partir de distances d'autres points
    Citation Envoyé par Prof Voir le message
    ... Elles sont certainement bien loin du post initial et des souhaits de BlueSky77.

    Ce dernier est venu demander une aide pour résoudre un problème précis, non pour lire des considérations générales sur ce qu'il faudrait faire dans le meilleur des mondes.
    Considérations qui ne contiennent d'ailleurs AUCUN CODE.
    En effet, parce que j'hésitais à me lancer dans les calculs, faute d'avoir choisi l'orientation à leur donner; et leur présentation est assez lourde, typographiquement.
    Et pour ce qui est des considérations générales ... , etc, tu t'es longuement livré à l'exercice, et fort bien d'ailleurs (#6, #13).

    Soyons nets: les 4 équations de départ (1, 2, 3, 4) ne peuvent être simultanément vérifiées; l'une d'entre elles est donc fausse.
    Il en va donc de même pour l'une de celles qui en découlent (2', 3', 4'), et pour la solution obtenue: il y a eu modification et allègement des contraintes (#15, #16); on est passé d'un problème d'intersections de 4 sphères à celui de 3 plans.
    Que l'on soit assuré dans ce cas particulier d'un déterminant non-nul ne change rien à l'affaire: il ne s'agit plus des conditions initiales.

    Ta démarche n'est pas totalement irrécupérable; je dis simplement que la solution obtenue ne saurait être acceptée sans confirmation numérique - aux incertitudes près, concernant (x, y, z) - par des voies parallèles d'égale légitimité, en reprenant par exemple le calcul de trois autres points (#14).
    ... Une variante de ce que tu proposes consisterait à résoudre séparément 3 équations, pour obtenir quatre solutions ...
    On est ainsi conduit à établir des moyennes (Xm , Ym, Zm) sur les coordonnées, dont on espère les valeurs successives relativement proches: le calcul prend un tour statistique, mais laborieux.
    Cela fait désordre, il faut par conséquent rationaliser le procédé. À voir plus loin.

    Allez, je serai diplomate:
    On peut utiliser un système linéaire avec beaucoup de prudence.


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

Discussions similaires

  1. Réponses: 8
    Dernier message: 26/01/2014, 13h06
  2. Calculer les coordonnées d'un point en rotation elliptique
    Par MisterG dans le forum Mathématiques
    Réponses: 4
    Dernier message: 03/01/2013, 14h19
  3. Réponses: 3
    Dernier message: 11/06/2009, 09h44
  4. Réponses: 5
    Dernier message: 25/04/2008, 15h59
  5. Calculer les coordonnées de la souris en 3D ?
    Par supergrey dans le forum DirectX
    Réponses: 3
    Dernier message: 26/08/2006, 21h47

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