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

 C Discussion :

Point intérieur à un triangle


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 43
    Par défaut Point intérieur à un triangle
    Bonjour,

    Je ne vois pas comment codés ce problème:
    "Sachant que je connais que deux point d'un triangle (le centre et un sommet)
    Je voudrai savoir comment faire pour tester si un point est dans ce triangle ou pas".

    Merci de votre aide.

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 602

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 43
    Par défaut
    Merci d'avoir répondu assez rapidement c tres gentil
    Merci encore

  4. #4
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    "Sachant que je connais que deux point d'un triangle (le centre et un sommet)
    Je voudrai savoir comment faire pour tester si un point est dans ce triangle ou pas".
    Cela n'est pas suffisant pour définir de façon unique un triangle et donc ne permet pas à fortiori de savoir si un point quelconque est situé dedans.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 43
    Par défaut
    mais si je peux en deduire les deux autres sommet du triangle alors cela devrai etre bon

  6. #6
    Membre émérite
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Par défaut
    Si ton triangle a une particularité quelconque (rectangle, isocèle) ça peut être possible, sinon je vois mal comment tu peux y arriver.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 43
    Par défaut
    mon triangle est equilatéral

  8. #8
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 602
    Par défaut
    Citation Envoyé par nhella22 Voir le message
    mon triangle est equilatéral
    Précision essentielle s'il en est. :-)

    Au fait, ton problème concerne-t-il le langage C ou bien cherches-tu simplement à savoir comment le faire d'une manière générale ? (auquel cas, on change de forum).

  9. #9
    Membre éclairé Avatar de mikhailo
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 78
    Par défaut
    Pour le côté C, pas le temps de refléchir, suis en pleins partiels ^^ Mais pour le côté mathématique, c'est facile:

    Tu as le centre du triangle: C(x0, y0)
    Un sommet: S1(x1, y1)

    Les deux sommets qu'on cherche sont:
    S2(x2, y2)
    S3(x3, y3)

    Tu peux utiliser les relations (là je parle de vecteurs):
    S1C + S2C + S3C = 0
    S1S2 + S2S3 + S3S1 = 0
    |S1C| = |S2C| = |S3C|

    A mon avis, à partir de là tu vas te retrouver avec des formules assez simples pour déduire les deux sommets manquants. De là, tu déduis les équations des trois droites qui limitent le triangle, et de là tu as des inégalités à tester sur les coordonnées du point.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 43
    Par défaut
    merci beaucoup pour ton aide

  11. #11
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    On est donc dans le cas d'un triangle équilatéral ABC dont on connait le centre O (xo,yo) et un sommet A (xa,ya).
    M (xm,ym) est le point qui doit être situé à l'intérieur ou à l'extérieur du triangle.
    Les coordonnées des autres sommets B et C peuvent se déduire de celles de A par une rotation d'angle t autour du centre O avec t= (+/-)120°

    - La première chose est de se ramener dans un système de coordonnées centrées sur O. Dans ce repère, on utilisera des majuscules et les coordonnées de O sont (0,0) ,celles de A (Xa = xa-xo, Ya = ya-yo), et celles du point M (Xm = xm-xo, Ym = ym-yo)
    Alors on a (dans ce repère) les coordonnées des autres sommets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Xb = Xa*cos(t)-Ya*sin(t) = -Xa/2 - Ya*sqrt(3)/2
    Yb = Xa*sin(t)+Ya*cos(t) = Xa*sqrt(3)/2 - Ya/2
    et
    Xc = Xa*cos(t)-Ya*sin(t) = -Xa/2 + Ya*sqrt(3)/2
    Yc = Xa*sin(t)+Ya*cos(t) = -Xa*sqrt(3)/2 - Ya/2
    -Il reste à trouver l'équation des droites joignant les sommets. Si P (X,Y) est un point de la droite joignant les sommets opposés à un sommet, disons A, alors on doit avoir (produit scalaire des vecteurs) :
    OP.OA = OH.OA où H est le milieu du coté opposé à A. C'est donc une constante. On a donc : OP.OA = -|OA|^2/2 qui donne l'équation de cette droite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    F(P) = Xa*X+Ya*Y+(Xa^2+Ya^2)/2 = 0
    qui peut être aussi mise sous la forme :
    F(P) = Xa(X-Xa)+Ya(Y-Ya)+(3/2)(Xa^2+Ya^2) = 0
    - Il faut que le point M soit du même coté de cette droite que le point O, donc avoir F(M) du même signe que F(O). F(O) = (Xa^2+Ya^2)/2 est positif et il faut avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Xa(Xm-Xa)+Ya(Ym-Ya)+(3/2)(Xa^2+Ya^2) >=0
    Il suffit d'appliquer ces formules cette fois pour le point B :

    (-Xa/2 -Ya*sqrt(3)/2)*Xm + (Xa*sqrt(3)/2-Ya/2)*Ym + (Xa^2+Ya^2)/2 >=0
    Xa*Xm + Ya*Ym - sqrt(3)(Xa*Ym - Xm*Ya) - (Xa^2 + Ya^2) <=0
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Xa(Xm-Xa) + Ya(Ym-Ya) - sqrt(3)(Xa*Ym - Xm*Ya) <= 0
    et pour C :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Xa(Xm-Xa) + Ya(Ym-Ya) + sqrt(3)(Xa*Ym - Xm*Ya) <= 0
    Ce sont les trois inégalités à satisfaire.

    Les deux dernières donnent :
    Xa(Xm-Xa) + Ya(Ym-Ya) <= - sqrt(3)|Xa*Ym - Xm*Ya|

    Au final, on doit avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      -(3/2)(Xa^2 + Ya^2) <= Xa(Xm-Xa) + Ya(Ym-Ya) <= - sqrt(3)|Xa*Ym - Xm*Ya|
    (si je ne me suis pas trompé!)

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 43
    Par défaut
    Merci pour ton aide cela m'a beaucoup aidé.

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

Discussions similaires

  1. méthode classique 'point intérieur'
    Par asmare dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 30/04/2013, 19h39
  2. Projection nuage de points sur un triangle
    Par azzami2007 dans le forum Images
    Réponses: 1
    Dernier message: 31/10/2012, 17h06
  3. Distance entre points et un triangle
    Par azzami2007 dans le forum Mathématiques
    Réponses: 6
    Dernier message: 06/10/2012, 11h00
  4. Point dans un triangle ou quadrangle ?
    Par sunshine33 dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 13/07/2006, 14h13
  5. [Algo] Point appartenant au triangle
    Par alexthomas dans le forum OpenGL
    Réponses: 12
    Dernier message: 05/03/2004, 16h31

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