Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Intersection d’un cercle et d’une droite | |
| | Auteur | Message |
---|
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Intersection d’un cercle et d’une droite Ven 20 Jan 2023 - 22:17 | |
| - Code:
-
rem ============================================================================ rem Intersection d’un cercle et d’une droite rem ============================================================================ dim x1,y1,x2,y2,cx,cy,cr dim mx,my x1 = 150 y1 = 200 x2 = 400 y2 = 60 cx = 320 cy = 240 cr = 50 caption 0,"Déplacer la souris pour voir s'il y a collision avec la droite ... <ESC> pour sortir"
update() repeat cx = mouse_x_position(0) cy = mouse_y_position(0) update() pause 100 until scancode = 27 terminate end rem ============================================================================ SUB update() cls 2d_fill_off 2d_pen_color 255,0,0 : 2d_line x1,y1,x2,y2 2d_pen_color 0,0,255 : 2d_circle cx,cy,cr print circleLineIntersect(x1,y1,x2,y2,cx,cy,cr) END_SUB rem ============================================================================ FNC circleLineIntersect(x1,y1,x2,y2,cx,cy,cr) dim_local dx,dy,a,b,c,bb4ac dim_local l1,l2,a1,a2,f1,f2 dx = x2 - x1 dy = y2 - y1 a = dx * dx + dy * dy b = 2 * (dx * (x1 - cx) + dy * (y1 - cy)) c = cx * cx + cy * cy c = c + x1 * x1 + y1 * y1 c = c - 2 * (cx * x1 + cy * y1) c = c - cr * cr bb4ac = (b * b - 4 * a * c) if bb4ac < 0 print "Pas de collision" result 0 : ' pas de collision exit_fnc else L1 = ((cx-x1)*(cx-x1)+(cy-y1)*(cy-y1)) L2 = ((cx-x2)*(cx-x2)+(cy-y2)*(cy-y2)) a1 = a + L1 a2 = a + L2 if a1 > L2 then f1 = 1 : else : f1 = 0 if a2 > L1 then f2 = 1 : else : f2 = 0 if bin_xor(f1 , f2) > 0 if (L1 > (cr*cr)) and (L2 > (cr*cr)) print "Pas de collision" : result 0 : exit_fnc end_if end_if print "Collision" 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: Intersection d’un cercle et d’une droite Ven 20 Jan 2023 - 22:49 | |
| Redoutablement efficace !
Vive les maths ! ! !
Merci Papydall ! | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Intersection d’un cercle et d’une droite Ven 20 Jan 2023 - 23:27 | |
| Je ne te contredis pas,Marc! | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Intersection d’un cercle et d’une droite Ven 20 Jan 2023 - 23:39 | |
| Bonus - Code:
-
rem ============================================================================ rem Calculer les coordonnées de l’intersection de deux droites rem ============================================================================
dim x1,y1,x2,y2,x3,y3,x4,y4 : ' coordonnées des deux droites dim x,y : ' coordonnées de la section width 0,700 picture 10 : full_space 10 : 2d_target_is 10 : print_target_is 10 font_name 10,"arial black" caption 0,"Calcul de l'intersection de deux droites" rem ============================================================================ rem Exemple x1 = 4 : y1 = 0 : ' 1er point de la 1ère droite x2 = 6 : y2 = 10 : ' second point de la 1ère droite x3 = 0 : y3 = 3 : ' 1er point de la seconde droite x4 = 10 : y4 = 7 : ' second point de la seconde droite
Tracer(x1,y1, x2,y2, x3,y3, x4,y4) Intersection(x1,y1, x2,y2, x3,y3, x4,y4)
end rem ============================================================================ ' Tracer les deux droites SUB Tracer(x1,y1, x2,y2, x3,y3, x4,y4) dim_local xc,yc ,unite ,i,x xc = 200 : yc = 200 : unite = 20 x = -10 2d_pen_dot : ' tracé avec séries de points for i = 20 to 2*xc step unite 2d_line i,400,i,10 : x = x+1 print_locate i-5,xc : print x next i x = 10 for i = 20 to 2*yc step unite 2d_line 0,i,400,i : x = x-1 print_locate xc-15,i : if x <> 0 then print x next i 2d_pen_solid : ' tracé avec trait plein 2d_line xc,0,xc,2*yc : 2d_line 0,yc,2*xc,yc : ' les axes ' Tracer les deux droites 2d_pen_color 255,0,0 : 2d_line xc+unite*x1,yc-unite*y1, xc+unite*x2,yc-unite*y2 2d_pen_color 0,0,255 : 2d_line xc+unite*x3,yc-unite*y3, xc+unite*x4,yc-unite*y4 END_SUB rem ============================================================================ ' Déterminer les coordonnées de l'intersection de deux droites dont les coordonnées ' sont passées en paramètres ' x1,y1 : coordonnées du 1er points de la 1ère droite ' x2,y2 : coordonnées du second point de la 1ère droite ' x3,y3 : coordonnées du 1er point de la seconde droite ' x4,y4 : coordonnées du second point de la seconde droite ' x et y sont les coordonnées cherchées SUB Intersection(x1,y1, x2,y2, x3,y3, x4,y4) dim_local a,b,c a = x1 * y2 - y1 * x2 b = x3 * y4 - y3 * x4 c = (x1-x2) * (y3-y4) - (y1-y2) * (x3-x4) x = (a * (x3 - x4) - (x1 - x2) * b) / c y = (a * (y3 - y4) - (y1 - y2) * b) / c print_locate 420,20 : print "Les coordonnées de l'intersection sont" print_locate 420,40 : print " x = " + str$(x) print_locate 420,60 : print " y = " + str$(y) 2d_fill_color 0,255,0 : 2d_circle 200+20*x,200-20*y,4 END_SUB rem ============================================================================
| |
| | | Contenu sponsorisé
| Sujet: Re: Intersection d’un cercle et d’une droite | |
| |
| | | | Intersection d’un cercle et d’une droite | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |