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 :

Calcul des coordonnées d'un point en fonction de 2 points, d'un angle orienté et d'un


Sujet :

Mathématiques

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Calcul des coordonnées d'un point en fonction de 2 points, d'un angle orienté et d'un
    Bonjour
    le sujet complet du topic est Calcul des coordonnées d'un point en fonction de 2 points, d'un angle orienté et d'une distance

    Je vous présente mon problème
    Nous connaissons les coordonnées en X et en Y des points Pt1 et Pt2
    Nous connaissons la valeur de l'angle orienté Pt1Pt2,Pt1Pt3 que l'on pourra nommer alpha
    Nous connaissons la distance que l'on pourra nommer dist entre Pt1 et Pt3 dont nous cherchons à determiner les coordonnées

    et pour qu'il n'y ait pas d'ambiguité, un petit crobar


    J'ai commencé à taper un bout de code (en JS)
    Mais celui-ci ne marche pas bien surement à cause d'un problème de signe

    Pouvez-vous me donner un coup de main

    Merci

    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
     
    function CalcPt(Pt1, Pt2, alpha , dist)
    {
      //Instantiation d'un Active X	
      var map=getMap();
     
      //beta est l'angle entre le vecteur Pt1 Pt2 et le vecteur parrallèle à l'axe des abscisses passant par Pt1
      var beta;
     
      //Si Droite vertical
     
      if (Pt2.X-Pt1.X==0)
      {
          if (Pt2.Y-Pt1.Y>0)
          {
              beta=-Math.PI/2;
          }else
          {
              beta=Math.PI/2;
          }
      }else
      {
     
          beta=Math.atan((Pt1.Y-Pt2.Y)/(Pt1.X-Pt2.X));
      }
     
      var Pt3 = map.createObject("MGPoint");
     
      Pt3.X=(Math.cos(alpha-beta)*dist)+Pt1.X ;
      Pt3.Y=(Math.sin(alpha-beta)*dist)+Pt1.Y;
     
    }

  2. #2
    Membre averti Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Points : 441
    Points
    441
    Par défaut
    Il faudrait que tu précises en quelle dimension tu es. Mais, dans tous les cas, tu peux utiliser deux égalités : une basée sur le produit scalaire et l'autre sur le fait que Pt3 appartient au cercle de centre Pt1 et de rayon dist. Voici ce que ça donne en dimension 2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    -----> ----->
    Pt1Pt3.Pt1Pt2 = (x3-x1)(x2-x1) + (y3-y1)(y2-y1)
                  = dist * Pt1Pt2 * cos(alpha)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (x3-x1)^2 + (y3-y1)^2 = dist^2

  3. #3
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 76
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Points : 1 913
    Points
    1 913
    Par défaut
    Soit le repère orthonormé (u,v) où u est le vecteur unitaire ayant même direction et même sens que P1P2 et v le vecteur orthogonal à u tel que u,v soit direct.
    Dans cette base les coordonnées de P3 sont d*cos(alpha), d*sin(alpha).
    C'est donc un simple problème de changement de base.
    Or la base u,v s'obtient à partir de la base i,j par rotation d'angle theta =(i, P1P2)
    Si theta est l'angle de cette rotation On a:
    cosinus (theta)= X2-X1/n et sinus(theta)= Y2-Y1/n
    La matrice de passage est donc
    cos theta -sin theta
    sin theta cos theta
    L'inverse est la rotation d'angle -theta
    matrice:
    cos theta sin theta
    -sin theta cos theta
    Le problème avec le post précédent (qui ne dit que des choses exactes) c'est que le système n'est pas linéaire. Les inconnues interviennent au carré dans une équation.
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci à tous les 2 pour vos réponses rapides

    Je me rends compte que mes cours de math d'il y a 7 ans sont bien loin maintenant....

    Mais en substance j'ai bien compris vos 2 méthodes.

    à corentin59:
    Ta solution me semble pas mal mais je devais devoir mettre une place un programme de résolution d'équation de 2nd degré du fait de l'intervention de pythagore, ce qui m'arrange pas vraiment dans l'histoire

    à Zavonen
    je n'ai jamais fait de calcul de rotation de matrice

    de plus je ne comprend pas ta variable n dans
    cosinus (theta)= X2-X1/n et sinus(theta)= Y2-Y1/n
    Je pense que ta solution est plus simple à mettre en place
    mais me manque juste quelques billes

    merci

  5. #5
    Membre averti Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Points : 441
    Points
    441
    Par défaut
    effectivement, c'est plus simple.

    n est la distance Pt1Pt2

  6. #6
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 76
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Points : 1 913
    Points
    1 913
    Par défaut
    n est la distance Pt1Pt2
    Exactement !
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci à tous les 2 pour votre aide et pour avoir passer du temps à me répondre

    Finalement, il y avait une erreur dans mon code et je devais différencier 2 cas afin de régler mon problème de signe

    pour ceux qui le voudront, je laisse mon code à disposition

    (j'ai mis en gras mes modifications par rapport au précédent code que j'avais posté qui m'ont permis de régler mon erreur)

    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
    function CalcPt(Pt1, Pt2, alpha , dist)
    {
      //Instantiation d'un Active X  
      var map=getMap();
    
      //beta est l'angle entre le vecteur Pt1 Pt2 et le vecteur parrallèle à l'axe des abscisses passant par Pt1
      var beta;
     
      //Si Droite vertical
    
      if (Pt2.X-Pt1.X==0)
      {
          if (Pt2.Y-Pt1.Y>0)
          {
              beta=-Math.PI/2;
          }else
          {
              beta=Math.PI/2;
          }
      }else
      {
    
          beta=Math.atan((Pt1.Y-Pt2.Y)/(Pt1.X-Pt2.X));
      }
    
      if (Pt2.X-Pt1.X<0)
      {
          beta=beta+Math.PI;
      }
       
      var Pt3 = map.createObject("MGPoint");
    
      Pt3.X=(Math.cos(alpha+beta)*dist)+Pt1.X ;
      Pt3.Y=(Math.sin(alpha+beta)*dist)+Pt1.Y;
      return Pt3;
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Calcul des coordonnée d'un point à partir de 2 points
    Par Spiritkill dans le forum Mathématiques
    Réponses: 5
    Dernier message: 16/04/2013, 00h59
  2. [MD5] Calcul des coordonnées
    Par seeme dans le forum OpenGL
    Réponses: 1
    Dernier message: 20/08/2010, 08h52
  3. calcul des coordonnées de points d'une courbe
    Par stick25 dans le forum MATLAB
    Réponses: 6
    Dernier message: 15/03/2010, 16h59
  4. Calcul des coordonnées d'un point dans un plan à 2 dimensions
    Par Séléné dans le forum Mathématiques
    Réponses: 4
    Dernier message: 16/02/2010, 10h15

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