papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Diagramme de Voronoï Dim 22 Jan 2023 - 19:01 | |
| Le tracé se fait point par point. C’est lent, très lent, désespérément lent, mais le résultat est là ! Et c’est le but du programme. - Code:
-
rem ============================================================================ rem Diagramme de Voronoï rem ============================================================================ rem Wikipédia : rem En mathématiques, un diagramme de Voronoï est un pavage du plan en cellules rem à partir d’un ensemble discret de points appelés « germes ». rem Chaque cellule enferme un seul germe, et forme l’ensemble des points du plan rem plus proches de ce germe que d’aucun autre. rem ============================================================================ rem Consulter cette page pour plus d’infos : rem http://villemin.gerard.free.fr/Geometri/Voronoi.htm rem ============================================================================ dim w,h w = 500 : h = 500 width 0,700 : height 0,600 picture 10 : width 10,w : height 10,h : 2d_target_is 10 top 10,(height_client(0) - height_client(10))/2 left 10,(width_client(0) - width_client(10))/2 caption 0,"Diagramme de Voronoï ... Tracé en cours ... <ESC> pour arrêter ..."
Generer_Diagram_Voronoi(w,h,25)
end rem ============================================================================ FNC hypot(a,b) result sqr(a*a+b*b) END_FNC rem ============================================================================ SUB Generer_Diagram_Voronoi(w,h,num_sites) dim_local nx(num_sites), ny(num_sites) dim_local nr(num_sites), ng(num_sites) dim_local nb(num_sites) dim_local i,j,d,x,y,dmin for i = 0 to num_sites nx(i) = int(rnd(w)) ny(i) = int(rnd(h)) nr(i) = int(rnd(255)) + 1 ng(i) = int(rnd(255)) + 1 nb(i) = int(rnd(255)) + 1 next i for y = 1 to h caption 0,"Diagramme de Voronoï ... Tracé en cours ... <ESC> pour arrêter ... " + str$(y) + " / " + str$(h)
for x = 1 to w dmin = hypot(w-1, h-1) j = -1 for i = 1 to num_sites d = hypot(nx(i)-x, ny(i)-y) if d < dmin then dmin = d : j = i next i 2d_pen_color nr(j), ng(j), nb(j) : 2d_point x, y : display next x if scancode = 27 then terminate next y END_SUB rem ============================================================================
RMK : à chaque nouvelle exécution du programme vous aurez un autre diagramme car il y a du RND dans le code. | |
|