papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Déterminer si un point P est à l'intérieur d'un triangle Jeu 20 Oct 2022 - 5:23 | |
| Mon premier programme après avoir tout perdu En fait, rien de spécial! C'est une fonction qui détermine si un point P(x,y) est à l'intérieur ou à l'extérieur d'un triangle défini pa trois points A, B , C - Code:
-
rem ============================================================================ rem Mon premier programme après avoir tout perdu rem Point_Dans_Triangle.bas rem ============================================================================ rem Il s’agit d’écrire une fonction FNC qui détermine si le point P(x,y) est rem à l’intérieur ou à l’extérieur du triangle défini par 3 points A, B et C rem ============================================================================
dim Px,Py : ' coordonnées du point P dim Ax,Ay,Bx,By,Cx,Cy : ' coordonnées des trois points A, B et C dim x,y,i color 0,0,0,0 caption 0,"Les points rouges sont à l'intérieur du triangle; les jaunes à l'extérieur" for i = 1 to 10 ' Trois points au hazard définissant le triangle Ax = int(rnd(200)+60) : Ay = int(rnd(355)+25) Bx = int(rnd(100)+130) : By = int(rnd(350)+35) Cx = int(rnd(430)+55) : Cy = int(rnd(230)+30) ' Dessiner le triangle cls : 2d_pen_color 255,255,255 : 2d_poly_from Ax,Ay 2d_poly_to Bx,By : 2d_poly_to Cx,Cy : 2d_poly_to Ax,Ay ' Le point P for x = 50 to 500 step 10 for y = 20 to 400 step 10 Px = x : Py = y if Point_Dans_Triangle(Ax,Ay,Bx,By,Cx,Cy,Px,Py) = 1 2d_pen_color 255,0,0 : 2d_point Px,Py : 2d_circle Px,Py,1 else 2d_pen_color 255,255,0 : 2d_point Px,Py : 2d_circle Px,Py,1 end_if next y next x pause 2000 next i end rem ============================================================================ ' On utilise les coordonnées du barycentre pour déterminer si le point est à ' l'intérieur ' La fonction retourne 1 si le point P est à l'intérieur; retourne 0 sinon FNC Point_Dans_Triangle(Ax,Ay,Bx,By,Cx,Cy,Px,Py) dim_local a,s,t a = 0-By*Cx + Ay*(Cx-Bx) + Ax*(By-Cy) + Bx*Cy s = ( Ay*Cx - Ax*Cy + (Cy-Ay)*Px + (Ax-Cx)*Py) / a t = ( Ax*By - Ay*Bx + (Ay-By)*Px + (Bx-Ax)*Py) / a if (s <= 0) or (t <= 0) or ((s+t) >= 1) result 0 else result 1 end_if END_FNC rem ============================================================================
| |
|
Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Déterminer si un point P est à l'intérieur d'un triangle Sam 22 Oct 2022 - 10:22 | |
| Merci du partage Papydall !
Comme toujours, ton code est clair, net et bien commenté. C'est un régal à lire, c'est du Papydall !
| |
|