[ J'avais commencé à rediger ça, mais le temps que la deconnexion ADSL soit finie, y'avait deja pleins de réponses :) alors je le poste en supplément de ton indication un peu vague sur les produits vectoriels, je pense que ça pourrait lui servir :) ]
Si ton polygone est convexe (ça n'est pas le cas général, mais si tu considere des losanges alors ça va) et si tu connais l'ordre de tes points A B C D, un algo simple consiste à partir du principe que ton 5eme point M est à l'intérieur du poly s'il est toujours "du même coté" des bords du poly (c'est à dire si on parcourt le bord du polygone, on verra toujours M à droite ou à gauche).
Pour ça il faut utiliser le produit vectoriel, et comme je ne connais pas ton niveau en math, on va simplifier :)
pour deux vecteurs en dimension 2 U={x1,y1} et V={x2,y2} le résultat qui nous interesse est le signe de (x1*y2 - x2*y1).
(si le signe est positif, c'est que l'angle entre U et V et entre 0 et 180°, sinon c'est qu'il est entre 0 et -180°) (ou 'inverse si le repere n'est pas dans la convention mathématique, pas exemple les coordonnée utilisées par X-Window :p )
Pour un polygone convexe, il suffit pour chaque sommet de faire cette opération entre vecteur qui le relie au sommet suivant, et le vecteur qui le relie au point testé. Si on a à chaque fois le meme signe, c'est que le point est à l'intérieur.
tu vas donc comparer les signes du (x1*y2-x2*y1) correspondant à AB*AM, BC*BM, CD*CM et DA*DM.
[^] # Re: question de math,
Posté par daggett . En réponse au journal question de math,. Évalué à 4.
Si ton polygone est convexe (ça n'est pas le cas général, mais si tu considere des losanges alors ça va) et si tu connais l'ordre de tes points A B C D, un algo simple consiste à partir du principe que ton 5eme point M est à l'intérieur du poly s'il est toujours "du même coté" des bords du poly (c'est à dire si on parcourt le bord du polygone, on verra toujours M à droite ou à gauche).
Pour ça il faut utiliser le produit vectoriel, et comme je ne connais pas ton niveau en math, on va simplifier :)
pour deux vecteurs en dimension 2 U={x1,y1} et V={x2,y2} le résultat qui nous interesse est le signe de (x1*y2 - x2*y1).
(si le signe est positif, c'est que l'angle entre U et V et entre 0 et 180°, sinon c'est qu'il est entre 0 et -180°) (ou 'inverse si le repere n'est pas dans la convention mathématique, pas exemple les coordonnée utilisées par X-Window :p )
Pour un polygone convexe, il suffit pour chaque sommet de faire cette opération entre vecteur qui le relie au sommet suivant, et le vecteur qui le relie au point testé. Si on a à chaque fois le meme signe, c'est que le point est à l'intérieur.
tu vas donc comparer les signes du (x1*y2-x2*y1) correspondant à AB*AM, BC*BM, CD*CM et DA*DM.