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 :

[MATH] Point par rapport à une droite


Sujet :

Mathématiques

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    44
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 44
    Points : 32
    Points
    32
    Par défaut [RESOLU][MATH] Point par rapport à une droite
    Bonjour,
    je cherche à faire une fonction prenant 3 points en paramètres (disons 6 float), et tester pour savoir si le 1er point est en dessous ou au dessus de la droite formée par les 2 autres...
    J'ai cherché sur le forum et sur le net mais j'ai rien trouvé....



    je précise quand même que la droite ne peut être ni verticale, ni horizontale, ce qui arrange déjà un peu les choses.

    merci d'avance

  2. #2
    zul
    zul est déconnecté
    Membre éclairé Avatar de zul
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    498
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 498
    Points : 699
    Points
    699
    Par défaut
    soit les deux points A et B de coordonnées xa,ya xb,yb

    calcul du coefficient directeur cd = (yb-ya) / (xb-xa )

    calcul de l'eq de la droite y = cd * x + h
    on calcule h en disant ke h = y -cd *x et en utilisant les coords du point A par exemple.


    Ensuite si ton point c de coord xc,yc est au dessus ou en dessous il suffit de regarder si yc > cd * xc +h ou si yc < cd *xc +h

    ZUL

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    44
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 44
    Points : 32
    Points
    32
    Par défaut
    merci beaucoup ^^

    je me rend compte que je suis vraiment pas doué en math... Je vais pleurer quand je vais devoir me servir de barycentres lol.

  4. #4
    Membre éclairé
    Avatar de Kangourou
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Points : 859
    Points
    859
    Par défaut
    Salut,

    les droites jamais verticales ni horizontales, c'est le genre d'hypotheses qu'on prend au debut, mais des qu'on ameliore un peu le prog, on risque d'avoir des problemes ... Et il y a aussi des droites "presque verticales" ou "presque horizontales", avec des erreurs de calcul monstreuses. J'ai deux propositions pour peaufiner la methode, mais ca reste ouvert :

    methode 1:
    on teste si la droite est plutot verticale ou plutot horizontale ( abs(dx) > abs(dy) ). Dans le cas horizontal, on garde ce qu'on avait, dans le cas vertical, on fait la meme chose mais en intervertissant les dx et les dy :
    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
    dx = xb-xa
    dy = yb-ya
    si abs(dx)>abs(dy) alors {
      // cas horizontal. equation :  y= x*dy/dx + b
      b = ya * dx/dy - xa
     
      si yc > xc*dy/dx + b alors 
         point dessus
      sinon
         point dessous
     
    } sinon {
      // cas vertical. Equation : x = y *  dx/dy - b
      b = ya - xa * dy/dx
     
      si xc < yc*dx/dy - b alors 
          point dessus
      sinon
          point dessous
     
    }

    deuxieme methode en utilisant la trigo ... c'est plus lent et plus laborieux, mais on sait jamais ...
    (on suppose :
    soit que le point A est a gauche du point B,
    soit que l'on utilise des droites orientees, et qu'on cherche a savoir si l'angle BAC est supérieur ou inferieur a pi
    )


    1 - calculer a1 = angle de AB avec l'horizontal, et ramener entre 0 et 2*pi
    2 - calculer a2 = angle de AC avec l'horizontal, et ramener entre 0 et 2*pi
    3 - calculer a2-a1, ramener entre 0 et 2*pi
    4 - si a2-a1 mod 2*pi est inférieur à pi, alors le point est "au dessus" de la droite (AB)



    C'est peut etre pas le plus adapte pour le probleme d'origine, mais y'a des cas ou j'en ai eu besoin.

    voila...

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 41
    Points : 28
    Points
    28
    Par défaut
    Faire 2 algos differents n'est surement pas la meilleure solution.

    Si tu prends une equation qui est plus generale (equation d'un hyperplan de R2 (une droite)

    ax+by = c

    (a,b et c) definissent une droite et une seule, et on s'en fout de savoir si elle est verticale horizontale, bleue ou verte.

    Si tes 2 points sont x1,y1 et x2,y2:
    le vecteur ( da = y1-y2 , db = x2-x1 ) est orthogonal a l''hyperplan (la droite). La seule contrainte est donc que les 2 points ne soient pas idnetiques (logique)

    Une Equation de la droite est donc:
    da*x + db*y = dc
    d'ou, dc = da*x1 +db*y1 (on remplace par les coord du point 1 qui est dans la droite)

    Pour le 3eme point, tu calcules da *x3 +db *y3 = dc3
    Si( dc3>dc) alors tu es d'un cote, sinon de l'autre.
    Quant a orienter, le cote (haut, bas) ca n'a de valeur que relativement, et dire si un point est au-dessus d'une droite verticale, c'est a mon avis difficile!
    Vive le Haut-Doubs Libre!

  6. #6
    Membre éclairé
    Avatar de Kangourou
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Points : 859
    Points
    859
    Par défaut
    Effectivement, c'est pas mal.
    Je me demande meme pourquoi j'avais pas utilie cette possibilite tout de suite...

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    44
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 44
    Points : 32
    Points
    32
    Par défaut
    wow! :o vous m'impressionnez les gars avec vos hyperplans Mais je vais bien étudier vos méthodes à tête reposée (la je sors du métro... vive les grèves), étant donné que vous avez pris la peine de compléter la première réponse et pis ça me remontera un peu mon niveau en math

    encore merci!

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

Discussions similaires

  1. Calcul de point par rapport à une image
    Par Original1992 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 03/05/2014, 17h33
  2. Calcul % d'ecart d'un point par rapport droite de tendance
    Par mat-tech dans le forum Statistiques, Data Mining et Data Science
    Réponses: 3
    Dernier message: 16/06/2008, 19h23
  3. remplir un Input par rapport à une BD
    Par pmboutteau dans le forum ASP
    Réponses: 10
    Dernier message: 24/08/2005, 10h35
  4. Initialisation d'une colonne par rapport à une autre colonne
    Par jeromesco dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 13/04/2005, 17h15
  5. [JCombobox] modif d'une jcombobox par rapport à une autre
    Par The Wretched dans le forum Composants
    Réponses: 2
    Dernier message: 21/03/2005, 10h35

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