mertosl a écrit:Bonjour à tous,
Je suis entrain de développer une petit fonction en python qui me permet de savoir si un point random (sur les intervals [xmin;xmax], [ymin;ymax]) se trouve à l'intérieur d'une figure quelconque dans un repère 2D.
Pour simplifier ce programme, je me base sur des triangles.
Si le point appartient à un triangle de la figure, je le considère comme valide.
Le problème est que je ne suis pas opérationnel en mathématiques.
J'ai un triangle quelconque ABC avec A[Xa;Ya], B[Xb;Yb] et C[Xc;Yc]. Je veut savoir si M[Xm;Ym] se trouve à l'intérieur de ABC.
Si la somme des angles AMB, BMC et CMA est égale à 360°, M appartient à ABC.
Comment je calcule les angles:
AM=sqrt((Xm-Xa)^2 + (Ym-Ya)^2)
MB=sqrt((Xb-Xm)^2 + (Yb-Ym)^2)
BA=sqrt((Xa-Xb)^2 + (Ya-Yb)^2)
AMB = arccos((AM^2 + MB^2 - BA^2) / (2 * AM * MB)) * 180/Pi
Et la même méthode pour BMC et CMA.
Est-ce une bonne façon de savoir si un point se trouve à l'intérieur d'une figure quelconque?
Merci d'avance.
PS: Il me semble que si la figure est de la forme d'un C et que le point est dans le creux du C, et que le triangle traverse la figure par dessus le creux, la méthode ne fonctionne surement pas.
PSEUDA a écrit:En prenant des angles géométriques (comme tu l'as fait, et non pas orientés), si le point M est à l'intérieur du triangle, les cosinus des 3 angles sont négatifs (angles obtus), et tu devrais obtenir somme des angles = 360°.
Si le point M est à l'extérieur du triangle, il y a au moins 2 angles aigus sur les 3, et l'un des angles est la somme des 2 autres.
Donc oui, cela me paraît une bonne méthode pour un triangle.
Pour un polygone convexe quelconque, on peut appliquer la même méthode.
Lostounet a écrit:Hello,
Pourquoi ne pas utiliser les équations des trois droites (AB), (AC) et (BC) ?
Les classer par pentes croissantes et trouver des conditions pour que le point M soit confiné dedans?
on aura bien entendu remarqué que (x-xA)(yB-yA)-(y-yA)(xB-xA) est (la composante z) du produit vectorielBen314 a écrit: il suffit de regarder si (x-xA)(yB-yA)-(y-yA)(xB-xA) et (xC-xA)(yB-yA)-(yC-yA)(xB-xA) sont de même signe ou pas
le produit vectoriel non plus, mais déja Python en 3ème ? et la formule d'Al-Kashi citée dans la demande initiale ?cela me ne paraît pas du tout pour une classe de 3éme
On aura aussi bien entendu remarqué que le produit vectoriel n'a rien a voir avec les problème planaire et que la "composante en z du produit vectoriel" n'est rien d'autre que.. le déterminant des deux vecteurs de R² (qui correspond effectivement à la surface du parallélogramme)mathafou a écrit:on aura bien entendu remarqué que (x-xA)(yB-yA)-(y-yA)(xB-xA) est (la composante z) du produit vectoriel, etc ...
Lostounet a écrit:Je croyais que les fonctions trigonométriques étaient plus coûteuses (en temps) que les expressions numériques avec * / + - ??
Ou alors tu parles de la rapidité d'implémentation
mais le programme n'a pas à calculer les équations de droites !! juste à calculer ce qui en résulte : le signe de l'expression citéePSEUDA a écrit:dans la solution avec les droites il y a 3 équations à déterminer (comment faire avec un programme ?)
mathafou a écrit:mais le programme n'a pas à calculer les équations de droites !! juste à calculer ce qui en résulte : le signe de l'expression citée
la considération des équations est uniquement dans le raisonnement.
raisonnement qui se matérialise par la simple expression :
signe (ou directement la valeur) de (x-xA)(yB-yA)-(y-yA)(xB-xA) etc ( = et autres expressions semblables)
rien d'autre n'est à calculer que cette formule là.
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 22 invités
Tu pars déja ?
Identification
Pas encore inscrit ?
Ou identifiez-vous :