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 |
|
|
| Tracé d’arc de cercle par l'algorithme de Bresenham | |
| | 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: Tracé d’arc de cercle par l'algorithme de Bresenham Sam 14 Nov 2015 - 1:42 | |
| Tracé d’arc de cercle par l'algorithme de BresenhamL’algorithme de base est limité au deuxième octant (d’angle compris entre pi/2 et pi/4 radians c.-à-d. entre 90 et 45°). Voire Wikipédia. Un octant représente 1/8 de cercle. Deux octants forment ¼ de cercle. Quatre octants déterminent ½ cercle. Pour obtenir un cercle complet, il en faut 8 octants. Le sous-programme suivant permet de tracer l’un des 8 octants d’un cercle. - Code:
-
rem ============================================================================ dim i for i = 1 to 8 Tracer_Octant(250,200,100,i) : pause 1000 : ' La pause pour observer le tracé next i end
rem ============================================================================ ' Tracer un arc de cercle : un huitième de cercle ' x_centre,y_centre : coordonnées du centre du cercle ' rayon : rayon du cercle ' octant : numéro de l'octant de 1 à 8 dans le sens trigonométrique ' octant = 1 : angle compris entre 0 et pi/4 rad soit entre 0° et 45° ' octant = 2 : angle compris entre pi/4 et pi/2 rad soit entre 45° et 90° ' octant = 3 : angle compris entre pi/2 et 3*pi/4 rad soit entre 90° et 135° ' octant = 4 : angle compris entre 3*pi/4 et pi rad soit entre 135° et 180° ' octant = 5 : angle compris entre pi et 5*pi/4 rad soit entre 180° et 225° ' octant = 6 : angle compris entre 5*pi/4 et 3*pi/2 rad soit entre 225° et 270° ' octant = 7 : angle compris entre 3*pi/2 et 7*pi/4 rad soit entre 270° et 315° ' octant = 8 : angle compris entre 7*pi/4 et 2*pi rad soit entre 315° et 360°
SUB Tracer_Octant(x_centre,y_centre,rayon,octant) dim_local x, y, m, xp, yp x = 0 : y = rayon : m = 5 - 4*rayon while x <= y select octant case 1 : xp = x_centre + y : yp = y_centre - x case 2 : xp = x_centre + x : yp = y_centre - y case 3 : xp = x_centre - x : yp = y_centre - y case 4 : xp = x_centre - y : yp = y_centre - x case 5 : xp = x_centre - y : yp = y_centre + x case 6 : xp = x_centre - x : yp = y_centre + y case 7 : xp = x_centre + x : yp = y_centre + y case 8 : xp = x_centre + y : yp = y_centre + x end_select 2d_point xp,yp if m > 0 then y = y - 1 : m = m - 8 * y x = x + 1 : m = m + 8 * x + 4 end_while END_SUB rem ============================================================================
Mais que peut-on faire avec 1/8 de cercle ? Avec un peu d’imagination, beaucoup de patience et une bonne dose d’amour, on peut faire des choses intéressantes. Je travaille sur mon brouillon. Je rendrai ma copie tout à l'heure, quand tout sera au propre. A + | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Tracé d’arc de cercle par l'algorithme de Bresenham Sam 14 Nov 2015 - 14:49 | |
| Je rends ma copie. - Code:
-
rem ============================================================================ rem Tracé d arc de cercle par l algorithme de Bresenham rem ============================================================================
Init() Demo() end rem ============================================================================ SUB Init() dim xc,yc,where_x,where_y,p width 0,800 : height 0, 600 top 0,(screen_y - height(0))/2 : left 0,(screen_x - width(0))/2 color 0,0,0,255 : 2d_pen_color 255,0,0 : font_color 0,255,255,255 : font_bold 0 xc = width(0)/2 : yc = height(0)/2 : p = 3000 END_SUB rem ============================================================================ SUB Demo() Les_8_Octants() : pause p : cls Demo_1() : pause p : cls Demo_2() : pause p : cls Demo_3() : pause p : cls Demo_4() : pause p : cls Demo_5() : pause p : cls Demo_6() : pause p : cls Demo_7() : pause p : cls Alphabet() : pause p : cls Bonhommes() : pause p : cls Texte(50,50,20) Bonhomme(100,400,10) : Bonhomme(250,400,8) : Bonhomme(350,400,5) Bonhomme(400,400,3) : Bonhomme(430,400,2) : Bonhomme(450,400,1) caption 0,"terminé" END_SUB rem ============================================================================
' Tracer un arc de cercle : un huitième de cercle ' x_centre,y_centre : coordonnées du centre du cercle ' rayon : rayon du cercle ' octant : numéro de l'octant de 1 à 8 dans le sens trigonométrique ' octant = 1 : angle compris entre 0 et pi/4 rad soit entre 0° et 45° ' octant = 2 : angle compris entre pi/4 et pi/2 rad soit entre 45° et 90° ' octant = 3 : angle compris entre pi/2 et 3*pi/4 rad soit entre 90° et 135° ' octant = 4 : angle compris entre 3*pi/4 et pi rad soit entre 135° et 180° ' octant = 5 : angle compris entre pi et 5*pi/4 rad soit entre 180° et 225° ' octant = 6 : angle compris entre 5*pi/4 et 3*pi/2 rad soit entre 225° et 270° ' octant = 7 : angle compris entre 3*pi/2 et 7*pi/4 rad soit entre 270° et 315° ' octant = 8 : angle compris entre 7*pi/4 et 2*pi rad soit entre 315° et 360°
SUB Tracer_Octant(x_centre,y_centre,rayon,octant) dim_local x, y, m, xp, yp x = 0 : y = rayon : m = 5 - 4*rayon while x <= y select octant case 1 : xp = x_centre + y : yp = y_centre - x case 2 : xp = x_centre + x : yp = y_centre - y case 3 : xp = x_centre - x : yp = y_centre - y case 4 : xp = x_centre - y : yp = y_centre - x case 5 : xp = x_centre - y : yp = y_centre + x case 6 : xp = x_centre - x : yp = y_centre + y case 7 : xp = x_centre + x : yp = y_centre + y case 8 : xp = x_centre + y : yp = y_centre + x end_select 2d_point xp,yp if m > 0 then y = y - 1 : m = m - 8 * y x = x + 1 : m = m + 8 * x + 4 end_while where_x = xp : where_y = yp END_SUB rem ============================================================================ SUB Les_8_Octants() dim_local i,j print_locate xc-100,50 : print "Les 8 octants d'un cercle" Cercle(xc,yc,100) : j = 9 for i = 0 to 2*pi step pi/4 : 2d_line xc,yc,xc+100*cos(i),yc+100*sin(i) : next i for i = pi/8 to 2*pi step pi/4 j = j-1 : print_locate xc+120*cos(i),yc+120*sin(i) : print j next i END_SUB rem ============================================================================ SUB Demo_1() dim_local i,j for j = 1 to height(0) step 150 for i = 1 to width(0) step 100 : carreau(50+i,50+j,50,1,255,255,0) : next i next j END_SUB rem ---------------------------------------------------------------------------- SUB Demo_2() Carreau(xc,yc,yc-100,1,255,0,0) Carreau(100,100,100,1,255,255,0) Carreau(500,100,50,1,255,255,0) Carreau(200,300,20,1,255,255,0) END_SUB rem ---------------------------------------------------------------------------- SUB Demo_3() dim_local i,j for i = 10 to 150 step 4 : Carreau(xc,yc,i,1,255,255,0) : next i Cercle(xc,yc-150,25) : cercle(xc,yc+150,25) : ' tracer cercle par 8 octants 2d_circle xc-200,yc,50 : 2d_circle xc+200,yc,50 : ' tracer cercle par 2d_circle END_SUB rem ---------------------------------------------------------------------------- SUB Demo_4() dim_local r r = 30 Carreau(4*r,yc,3*r,1,255,255,0) Trefle(10*r,yc,r,1,255,255,0) Coeur(15*r,yc,r,1,255,255,0) Pique(20*r,yc,r,1,255,255,0) END_SUB rem ---------------------------------------------------------------------------- SUB Demo_5() dim_local x,y,r r = 25 for x = 100 to 2*xc-4*r step 4*r for y = 2*r to 2*yc step 4*r+10 : Frise_1(x,y,r,1,255,0,0) : next y next x for x = 100 to 2*xc-8*r step 4*r for y = 2*r to 2*yc step 4*r+10 : 2d_flood x+2*r,y,255,255,0 : next y next x END_SUB rem ============================================================================ SUB Demo_6() dim_local x,y,r r = 20 for x = 0 to 2*xc step 2*r for y = 0 to 2*yc step 2*r : Frise_2(x,y,r) : next y next x END_SUB rem ============================================================================ SUB Demo_7() dim_local x,y,r,r1 r = 30 for x = r to 2*xc step 2*r r1 = 1-r1 for y = r to 2*yc step 2*r : Balle(x,y,r+r1) : next y next x pause p : cls for r = 20 to yc/2 step 5 : cls : Balle(xc,yc,r) : pause 500 : next r
END_SUB rem ============================================================================ ' Tracé d'un cercle par octant ' Pour obtenir un cercle complet, on trace les 8 octants SUB Cercle(x,y,r) dim_local i for i = 1 to 8 : Tracer_Octant(x,y,r,i) : next i END_SUB rem ============================================================================ ' Tracé d'un carreau par combinaison d'octants ' Chaque branche est constituée par 2 octants (soit un quart de cercle) ' x,y : coordonnées du centre du carreau ' r : rayon ' p : si p > 0 , le carreau est rempli de la couleur cr,cg,cb SUB Carreau(x,y,r,p,cr,cg,cb) dim_local i for i = 7 to 8 : Tracer_Octant(x-r,y-r,r,i) : next i for i = 5 to 6 : Tracer_Octant(x+r,y-r,r,i) : next i for i = 1 to 2 : Tracer_Octant(x-r,y+r,r,i) : next i for i = 3 to 4 : Tracer_Octant(x+r,y+r,r,i) : next i if p > 0 then 2d_flood x,y,cr,cg,cb END_SUB rem ============================================================================ SUB Trefle(x,y,r,p,cr,cg,cb) dim_local i,r1,x1,y1 : r1 = sqr(2) for i = 1 to 5 : Tracer_Octant(x,y-r1*r,r,i) : next i for i = 2 to 7 : Tracer_Octant(x-r1*r,y,r,i) : next i for i = 1 to 3 : Tracer_Octant(x+r1*r,y,r,i) : next i for i = 6 to 8 : Tracer_Octant(x+r1*r,y,r,i) : next i Tracer_Octant(x,y-r1*r,r,8) Tracer_Octant(x-r1*r,y+r1*r,r,1) Tracer_Octant(x+r1*r,y+r1*r,r,4) Tracer_Octant(x-r1*r,y+r1*r,r,8) : x1 = where_x : y1 = where_y Tracer_Octant(x+r1*r,y+r1*r,r,5) : 2d_line where_x,where_y,x1,y1 if p > 0 then 2d_flood x,y,cr,cg,cb END_SUB rem ============================================================================ SUB Coeur(x,y,r,p,cr,cg,cb) dim_local i for i = 1 to 6 : Tracer_Octant(x-r,y,r,i) : next i for i = 1 to 4 : Tracer_Octant(x+r,y,r,i) : next i for i = 7 to 8 : Tracer_Octant(x+r,y,r,i) : next i for i = 3 to 4 : Tracer_Octant(x+r,y+2*r,r,i) : next i for i = 1 to 2 : Tracer_Octant(x-r,y+2*r,r,i) : next i if p > 0 then 2d_flood x,y+2,cr,cg,cb END_SUB rem ============================================================================ SUB Pique(x,y,r,p,cr,cg,cb) dim_local i for i = 3 to 6 : Tracer_Octant(x-r,y,r,i) : next i for i = 1 to 2 : Tracer_Octant(x+r,y,r,i) : next i for i = 7 to 8 Tracer_Octant(x+r,y,r,i) : Tracer_Octant(x-r,y+r,r,i) Tracer_Octant(x-r,y-2*r,r,i) next i for i = 5 to 6 Tracer_Octant(x+r,y-2*r,r,i) : Tracer_Octant(x+r,y+r,r,i) next i
2d_line x-r,y+r,x+r,y+r : 2d_line x-r,y+2*r,x+r,y+2*r if p > 0 then 2d_flood x,y,cr,cg,cb: 2d_flood x,y+2*r-2,cr,cg,cb END_SUB rem ============================================================================ SUB Frise_1(x,y,r,p,cr,cg,cb) dim_local i 2d_pen_color 0,0,254 for i = 1 to 4 : Tracer_Octant(x,y,r,i) : next i for i = 7 to 8 : Tracer_Octant(x,y,r,i) : next i for i = 3 to 8 : Tracer_Octant(x,y+2*r,r,i) : next i for i = 1 to 6 : Tracer_Octant(x+2*r,y,r,i) : next i for i = 1 to 2 : Tracer_Octant(x+2*r,y+2*r,r,i) : next i for i = 5 to 8 : Tracer_Octant(x+2*r,y+2*r,r,i) : next i if p > 0 then 2d_flood x,y+2*r,cr,cg,cb END_SUB rem ============================================================================ SUB Frise_2(x,y,r) dim_local i 2d_pen_color 255,0,0 for i = 3 to 4 : Tracer_Octant(x,y,r,i) : next i for i = 1 to 2 : Tracer_Octant(x+r,y,r,i) : next i 2d_line x,y-r,x+r,y-r for i = 5 to 6 : Tracer_Octant(x,y+r,r,i) : next i for i = 7 to 8 : Tracer_Octant(x+r,y+r,r,i) : next i 2d_line x,y+2*r,x+r,y+2*r : 2d_line x-r,y,x-r,y+r : 2d_line x+2*r,y,x+2*r,y+r END_SUB rem ============================================================================ SUB Balle(x,y,r) dim_local i,r1 r1 = int(r/2) for i = 1 to 8 : Tracer_Octant(x,y,r,i) : next i for i = 1 to 2 : Tracer_Octant(x,y-r1,r1,i) : next i for i = 7 to 8 : Tracer_Octant(x,y-r1,r1,i) : next i for i = 3 to 6 : Tracer_Octant(x,y+r1,r1,i) : next i for i = 1 to 4 : Tracer_Octant(x-r1,y,r1,i) : next i for i = 5 to 8 : Tracer_Octant(x+r1,y,r1,i) : next i if odd(r) = 1 2d_flood x,y-r1,255,255,000 : 2d_flood x,y+r1,255,255,000 2d_flood x-r1,y,255,000,000 : 2d_flood x+r1,y,255,000,000 else 2d_flood x,y-r1,255,000,000 : 2d_flood x,y+r1,255,000,000 2d_flood x-r1,y,255,255,000 : 2d_flood x+r1,y,255,255,000 end_if END_SUB rem ============================================================================ SUB Alphabet() A(050,100,20) : B(100,100,20) : C(150,100,20) : D(200,100,20) : E(250,100,20) F(300,100,20) : G(350,100,20) : H(400,100,20) : I(450,100,20) : J(500,100,20) K(550,100,20) : L(600,100,20) : M(650,100,20) : N(050,200,20) : O(100,200,20) P(150,200,20) : Q(200,200,20) : R(250,200,20) : S(300,200,20) : T(350,200,20) U(400,200,20) : V(450,200,20) : W(500,200,20) : X(550,200,20) : Y(600,200,20) Z(650,200,20) END_SUB rem ============================================================================ SUB A(x,y,r) dim_local i for i = 1 to 4 : Tracer_Octant(x+r,y+r,r,i) : next i 2d_line x,y+r,x,y+4*r : 2d_line x+2*r,y+r,x+2*r,y+4*r : 2d_line x,y+2*r,x+2*r,y+2*r END_SUB rem ============================================================================ SUB B(x,y,r) dim_local i 2d_poly_from x+r,y : 2d_poly_to x,y : 2d_poly_to x,y+4*r 2d_poly_to x+r,y+4*r : 2d_line x,y+2*r,x+r,y+2*r for i = 1 to 2 : Tracer_Octant(x+r,y+r,r,i) : Tracer_Octant(x+r,y+3*r,r,i) : next i for i = 7 to 8 : Tracer_Octant(x+r,y+r,r,i) : Tracer_Octant(x+r,y+3*r,r,i) : next i END_SUB rem ============================================================================ SUB C(x,y,r) dim_local i for i = 1 to 4 : Tracer_Octant(x+r,y+r,r,i) : next i for i = 5 to 8 : Tracer_Octant(x+r,y+3*r,r,i) : next i 2d_line x,y+r,x,y+3*r END_SUB rem ============================================================================ SUB D(x,y,r) dim_local i 2d_poly_from x+r,y : 2d_poly_to x,y : 2d_poly_to x,y+4*r :2d_poly_to x+r,y+4*r for i = 1 to 2 : Tracer_Octant(x+r,y+r,r,i) : next i for i = 7 to 8 : Tracer_Octant(x+r,y+3*r,r,i) : next i 2d_line x+2*r,y+r,x+2*r,y+3*r END_SUB rem ============================================================================ SUB E(x,y,r) dim_local i 2d_poly_from x+2*r,y : 2d_poly_to x,y : 2d_poly_to x,y+4*r 2d_poly_to x+2*r,y+4*r : 2d_line x,y+2*r,x+r,y+2*r END_SUB rem ============================================================================ SUB F(x,y,r) dim_local i 2d_poly_from x+2*r,y : 2d_poly_to x,y : 2d_poly_to x,y+4*r 2d_line x,y+2*r,x+r,y+2*r END_SUB rem ============================================================================ SUB G(x,y,r) dim_local i for i = 1 to 4 : Tracer_Octant(x+r,y+r,r,i) : next i for i = 5 to 8 : Tracer_Octant(x+r,y+3*r,r,i) : next i 2d_line x,y+r,x,y+3*r : 2d_line x+r,y+2*r,x+2*r,y+2*r : 2d_poly_to x+2*r,y+3*r END_SUB rem ============================================================================ SUB H(x,y,r) 2d_line x,y,x,y+4*r : 2d_line x+2*r,y,x+2*r,y+4*r : 2d_line x,y+2*r,x+2*r,y+2*r END_SUB rem ============================================================================ SUB I(x,y,r) 2d_line x,y,x+2*r,y : 2d_line x,y+4*r,x+2*r,y+4*r: 2d_line x+r,y,x+r,y+4*r END_SUB rem ============================================================================ SUB J(x,y,r) dim_local i 2d_line x,y,x+2*r,y :2d_poly_to x+2*r,y+3*r for i= 5 to 8 : Tracer_Octant(x+r,y+3*r,r,i) : next i END_SUB rem ============================================================================ SUB K(x,y,r) dim_local i 2d_line x,y,x,y+4*r for i = 3 to 4 : Tracer_Octant(x+2*r,y+r,r,i) : next i for i = 7 to 8 : Tracer_Octant(x,y+r,r,i) : next i for i = 1 to 2 : Tracer_Octant(x,y+3*r,r,i) : next i for i = 5 to 6 : Tracer_Octant(x+2*r,y+3*r,r,i) : next i END_SUB rem ============================================================================ SUB L(x,y,r) 2d_poly_from x,y : 2d_poly_to x,y+4*r : 2d_poly_to x+2*r,y+4*r END_SUB rem ============================================================================ SUB M(x,y,r) dim_local i for i = 5 to 8 : Tracer_Octant(x+r,y,r,i) : next i 2d_line x,y,x,y+4*r : 2d_line x+2*r,y,x+2*r,y+4*r END_SUB rem ============================================================================ SUB N(x,y,r) dim_local i 2d_line x,y,x,y+4*r : 2d_line x+2*r,y,x+2*r,y+4*r for i = 1 to 2 : Tracer_Octant(x,y+r,r,i) : next i for i = 5 to 6 : Tracer_Octant(x+2*r,y+r,r,i) : next i END_SUB rem ============================================================================ SUB O(x,y,r) dim_local i for i = 1 to 4 : Tracer_Octant(x+r,y+r,r,i) : next i for i = 5 to 8 : Tracer_Octant(x+r,y+3*r,r,i) : next i 2d_line x,y+r,x,y+3*r : 2d_line x+2*r,y+r,x+2*r,y+3*r END_SUB rem ============================================================================ SUB P(x,y,r) dim_local i for i = 1 to 2 : Tracer_Octant(x+r,y+r,r,i) : next i for i = 7 to 8 : Tracer_Octant(x+r,y+r,r,i) : next i 2d_poly_from x+r,y : 2d_poly_to x,y 2d_poly_to x,y+4*r : 2d_line x,y+2*r,x+r,y+2*r END_SUB rem ============================================================================ SUB Q(x,y,r) dim_local i for i = 1 to 4 : Tracer_Octant(x+r,y+r,r,i) : next i for i = 5 to 8 : Tracer_Octant(x+r,y+3*r,r,i) : next i 2d_line x,y+r,x,y+3*r : 2d_line x+2*r,y+r,x+2*r,y+3*r for i = 5 to 6 : Tracer_Octant(x+2*r,y+3*r,r,i) : next i END_SUB rem ============================================================================ SUB R(x,y,r) dim_local i 2d_poly_from x+r,y : 2d_poly_to x,y : 2d_poly_to x,y+4*r : 2d_line x,y+2*r,x+r,y+2*r for i = 1 to 2 : Tracer_Octant(x+r,y+r,r,i) : Tracer_Octant(x+r,y+3*r,r,i) : next i for i = 7 to 8 : Tracer_Octant(x+r,y+r,r,i) : next i 2d_line x+2*r,y+3*r,x+2*r,y+4*r END_SUB rem ============================================================================ SUB S(x,y,r) dim_local i for i = 1 to 6 : Tracer_Octant(x+r,y+r,r,i) : next i for i = 1 to 2 : Tracer_Octant(x+r,y+3*r,r,i) : next i for i = 5 to 8 : Tracer_Octant(x+r,y+3*r,r,i) : next i END_SUB rem ============================================================================ SUB T(x,y,r) 2d_line x,y,x+2*r,y : 2d_line x+r,y,x+r,y+4*r END_SUB rem ============================================================================ SUB U(x,y,r) dim_local i for i = 5 to 8 : Tracer_Octant(x+r,y+3*r,r,i) : next i 2d_line x,y,x,y+3*r : 2d_line x+2*r,y,x+2*r,y+3*r END_SUB rem ============================================================================ SUB V(x,y,r) dim_local i 2d_line x,y,x,y+3*r : 2d_line x+2*r,y,x+2*r,y+3*r for i = 1 to 2 : Tracer_Octant(x,y+4*r,r,i) : next i for i = 3 to 4 : Tracer_Octant(x+2*r,y+4*r,r,i) : next i END_SUB rem ============================================================================ SUB W(x,y,r) dim_local i 2d_line x,y,x,y+4*r : 2d_line x+2*r,y,x+2*r,y+4*r for i = 7 to 8 : Tracer_Octant(x,y+3*r,r,i) : next i for i = 5 to 6 : Tracer_Octant(x+2*r,y+3*r,r,i) : next i END_SUB rem ============================================================================ SUB X(x,y,r) dim_local i 2d_line x,y,x,y+r : 2d_line x+2*r,y,x+2*r,y+r 2d_line x,y+3*r,x,y+4*r : 2d_line x+2*r,y+3*r,x+2*r,y+4*r for i = 5 to 8 : Tracer_Octant(x+r,y+r,r,i) : next i for i = 1 to 4 : Tracer_Octant(x+r,y+3*r,r,i) : next i END_SUB rem ============================================================================ SUB Y(x,y,r) dim_local i 2d_line x,y,x,y+r : 2d_line x+2*r,y,x+2*r,y+3*r for i = 5 to 8 : Tracer_Octant(x+r,y+r,r,i) : Tracer_Octant(x+r,y+3*r,r,i) : next i END_SUB rem ============================================================================ SUB Z(x,y,r) dim_local i 2d_line x,y,x+2*r,y : 2d_poly_to x+2*r,y+r 2d_line x,y+3*r,x,y+4*r : 2d_poly_to x+2*r,y+4*r for i = 7 to 8 : Tracer_Octant(x+r,y+r,r,i) : next i for i = 3 to 4 : Tracer_Octant(x+r,y+3*r,r,i) : next i END_SUB rem ============================================================================ SUB Bonhommes() Bonhomme(100,50,30) : Bonhomme(300,50,20) : Bonhomme(450,50,15) Bonhomme(550,50,10) : Bonhomme(620,50,05) : Bonhomme(660,50,02) Bonhomme(680,50,01) END_SUB rem ============================================================================ SUB Bonhomme(x,y,r) dim_local i for i = 1 to 4 : Tracer_Octant(x,y,r,i) : next i for i = 7 to 8 : Tracer_Octant(x-2*r,y,r,i) : next i for i = 5 to 6 : Tracer_Octant(x+2*r,y,r,i) : next i 2d_line x-2*r,y+r,x+2*r,y+r 2d_line x-r,y+r,x-r,y+2*r : 2d_line x+r,y+r,x+r,y+2*r for i = 5 to 8 : Tracer_Octant(x,y+2*r,r,i) : next i 2d_line x-2*r,y+3*r,x+2*r,y+3*r for i = 3 to 4 : Tracer_Octant(x-2*r,y+4*r,r,i) : next i for i = 1 to 2 : Tracer_Octant(x+2*r,y+4*r,r,i) : next i 2d_line x-3*r,y+4*r,x-3*r,y+10*r : 2d_poly_to x-2*r,y+10*r 2d_line x+3*r,y+4*r,x+3*r,y+10*r : 2d_poly_to x+2*r,y+10*r for i = 5 to 6 : Tracer_Octant(x-2*r,y+10*r,r,i) : next i for i = 7 to 8 : Tracer_Octant(x+2*r,y+10*r,r,i) : next i 2d_line x-2*r,y+6*r,x-2*r,y+15*r : 2d_line x+2*r,y+6*r,x+2*r,y+15*r 2d_line x-2*r,y+9*r,x+2*r,y+9*r 2d_line x,y+9*r,x,y+15*r 2d_line x-2*r,y+15*r,x+2*r,y+15*r for i = 5 to 8 : Tracer_Octant(x-r,y+15*r,r,i) : Tracer_Octant(x+r,y+15*r,r,i) : next i END_SUB rem ============================================================================ SUB Texte(x,y,r) dim_local s,x1, y1 ,y2 s = 3*r : y1 = y + 4*r+10 : y2 = y+10*r : x1 = x+6*r P(x,y,r) : A(x+s,y,r) : N(x+2*s,y,r) : O(x+3*s,y,r) : R(x+4*s,y,r) A(x+5*s,y,r) : M(x+6*s,y,r) : I(x+7*s,y,r) : C(x+8*s,y,r) E(x1,y1,r) : C(x1+s,y1,r) : R(x1+2*s,y1,r) : I(x1+3*s,y1,r) : T(x1+4*s,y1,r) P(x,y2,r) : A(x+s,y2,r) : R(x+2*s,y2,r) O(x+4*s,y2,r) : C(x+5*s,y2,r) : T(x+6*s,y2,r) : A(x+7*s,y2,r) N(x+8*s,y2,r) : T(x+9*s,y2,r) : S(x+10*s,y2,r) END_SUB rem ============================================================================
| |
| | | sergeauze
Nombre de messages : 391 Age : 72 Localisation : Hautes Alpes France Date d'inscription : 09/01/2010
| Sujet: Re: Tracé d’arc de cercle par l'algorithme de Bresenham Sam 14 Nov 2015 - 15:21 | |
| salut pb chez moi ligne 73 dans une boucle for next Copie à revoir ? | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Tracé d’arc de cercle par l'algorithme de Bresenham Sam 14 Nov 2015 - 16:03 | |
| Normal, si tu n'utilises pas la dernière version de Panoramic, tu dois faire un Dim Pi et initialiser Pi à 3.1416 | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Tracé d’arc de cercle par l'algorithme de Bresenham Sam 14 Nov 2015 - 16:24 | |
| Bravo Papydall, Encore une belle démonstration de ton savoir faire...
A+ | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Tracé d’arc de cercle par l'algorithme de Bresenham Sam 14 Nov 2015 - 18:19 | |
| Merci Sergeauze, Jicehel et Jean Claude. En effet le programme a été écrit pour la dernière version : la 27i2 qui définit en interne la constante PI. Pour une version antérieure, il faut déclarer PI par DIM PI etc… J’ai revu ma copie pour y incorporer un test sur la déclaration de PI. Si PI n'est défini on le déclare par DIM et on le définit par PI = acos(-1) - Code:
-
rem ============================================================================ rem Tracé d arc de cercle par l algorithme de Bresenham rem ============================================================================
Init() Demo() end rem ============================================================================ SUB Init() dim xc,yc,where_x,where_y,p width 0,800 : height 0, 600 top 0,(screen_y - height(0))/2 : left 0,(screen_x - width(0))/2 color 0,0,0,255 : 2d_pen_color 255,0,0 : font_color 0,255,255,255 : font_bold 0 xc = width(0)/2 : yc = height(0)/2 : p = 3000 if variable("PI") = 0 then dim PI : PI = acos(-1) END_SUB
rem ============================================================================ SUB Demo() Les_8_Octants() : pause p : cls Demo_1() : pause p : cls Demo_2() : pause p : cls Demo_3() : pause p : cls Demo_4() : pause p : cls Demo_5() : pause p : cls Demo_6() : pause p : cls Demo_7() : pause p : cls Alphabet() : pause p : cls Bonhommes() : pause p : cls Texte(50,50,20) Bonhomme(100,400,10) : Bonhomme(250,400,8) : Bonhomme(350,400,5) Bonhomme(400,400,3) : Bonhomme(430,400,2) : Bonhomme(450,400,1) caption 0,"terminé" END_SUB rem ============================================================================
' Tracer un arc de cercle : un huitième de cercle ' x_centre,y_centre : coordonnées du centre du cercle ' rayon : rayon du cercle ' octant : numéro de l'octant de 1 à 8 dans le sens trigonométrique ' octant = 1 : angle compris entre 0 et pi/4 rad soit entre 0° et 45° ' octant = 2 : angle compris entre pi/4 et pi/2 rad soit entre 45° et 90° ' octant = 3 : angle compris entre pi/2 et 3*pi/4 rad soit entre 90° et 135° ' octant = 4 : angle compris entre 3*pi/4 et pi rad soit entre 135° et 180° ' octant = 5 : angle compris entre pi et 5*pi/4 rad soit entre 180° et 225° ' octant = 6 : angle compris entre 5*pi/4 et 3*pi/2 rad soit entre 225° et 270° ' octant = 7 : angle compris entre 3*pi/2 et 7*pi/4 rad soit entre 270° et 315° ' octant = 8 : angle compris entre 7*pi/4 et 2*pi rad soit entre 315° et 360°
SUB Tracer_Octant(x_centre,y_centre,rayon,octant) dim_local x, y, m, xp, yp x = 0 : y = rayon : m = 5 - 4*rayon while x <= y select octant case 1 : xp = x_centre + y : yp = y_centre - x case 2 : xp = x_centre + x : yp = y_centre - y case 3 : xp = x_centre - x : yp = y_centre - y case 4 : xp = x_centre - y : yp = y_centre - x case 5 : xp = x_centre - y : yp = y_centre + x case 6 : xp = x_centre - x : yp = y_centre + y case 7 : xp = x_centre + x : yp = y_centre + y case 8 : xp = x_centre + y : yp = y_centre + x end_select 2d_point xp,yp if m > 0 then y = y - 1 : m = m - 8 * y x = x + 1 : m = m + 8 * x + 4 end_while where_x = xp : where_y = yp END_SUB rem ============================================================================ SUB Les_8_Octants() dim_local i,j print_locate xc-100,50 : print "Les 8 octants d'un cercle" Cercle(xc,yc,100) : j = 9 for i = 0 to 2*pi step pi/4 : 2d_line xc,yc,xc+100*cos(i),yc+100*sin(i) : next i for i = pi/8 to 2*pi step pi/4 j = j-1 : print_locate xc+120*cos(i),yc+120*sin(i) : print j next i END_SUB rem ============================================================================ SUB Demo_1() dim_local i,j for j = 1 to height(0) step 150 for i = 1 to width(0) step 100 : carreau(50+i,50+j,50,1,255,255,0) : next i next j END_SUB rem ---------------------------------------------------------------------------- SUB Demo_2() Carreau(xc,yc,yc-100,1,255,0,0) Carreau(100,100,100,1,255,255,0) Carreau(500,100,50,1,255,255,0) Carreau(200,300,20,1,255,255,0) END_SUB rem ---------------------------------------------------------------------------- SUB Demo_3() dim_local i,j for i = 10 to 150 step 4 : Carreau(xc,yc,i,1,255,255,0) : next i Cercle(xc,yc-150,25) : cercle(xc,yc+150,25) : ' tracer cercle par 8 octants 2d_circle xc-200,yc,50 : 2d_circle xc+200,yc,50 : ' tracer cercle par 2d_circle END_SUB rem ---------------------------------------------------------------------------- SUB Demo_4() dim_local r r = 30 Carreau(4*r,yc,3*r,1,255,255,0) Trefle(10*r,yc,r,1,255,255,0) Coeur(15*r,yc,r,1,255,255,0) Pique(20*r,yc,r,1,255,255,0) END_SUB rem ---------------------------------------------------------------------------- SUB Demo_5() dim_local x,y,r r = 25 for x = 100 to 2*xc-4*r step 4*r for y = 2*r to 2*yc step 4*r+10 : Frise_1(x,y,r,1,255,0,0) : next y next x for x = 100 to 2*xc-8*r step 4*r for y = 2*r to 2*yc step 4*r+10 : 2d_flood x+2*r,y,255,255,0 : next y next x END_SUB rem ============================================================================ SUB Demo_6() dim_local x,y,r r = 20 for x = 0 to 2*xc step 2*r for y = 0 to 2*yc step 2*r : Frise_2(x,y,r) : next y next x END_SUB rem ============================================================================ SUB Demo_7() dim_local x,y,r,r1 r = 30 for x = r to 2*xc step 2*r r1 = 1-r1 for y = r to 2*yc step 2*r : Balle(x,y,r+r1) : next y next x pause p : cls for r = 20 to yc/2 step 5 : cls : Balle(xc,yc,r) : pause 500 : next r
END_SUB rem ============================================================================ ' Tracé d'un cercle par octant ' Pour obtenir un cercle complet, on trace les 8 octants SUB Cercle(x,y,r) dim_local i for i = 1 to 8 : Tracer_Octant(x,y,r,i) : next i END_SUB rem ============================================================================ ' Tracé d'un carreau par combinaison d'octants ' Chaque branche est constituée par 2 octants (soit un quart de cercle) ' x,y : coordonnées du centre du carreau ' r : rayon ' p : si p > 0 , le carreau est rempli de la couleur cr,cg,cb SUB Carreau(x,y,r,p,cr,cg,cb) dim_local i for i = 7 to 8 : Tracer_Octant(x-r,y-r,r,i) : next i for i = 5 to 6 : Tracer_Octant(x+r,y-r,r,i) : next i for i = 1 to 2 : Tracer_Octant(x-r,y+r,r,i) : next i for i = 3 to 4 : Tracer_Octant(x+r,y+r,r,i) : next i if p > 0 then 2d_flood x,y,cr,cg,cb END_SUB rem ============================================================================ SUB Trefle(x,y,r,p,cr,cg,cb) dim_local i,r1,x1,y1 : r1 = sqr(2) for i = 1 to 5 : Tracer_Octant(x,y-r1*r,r,i) : next i for i = 2 to 7 : Tracer_Octant(x-r1*r,y,r,i) : next i for i = 1 to 3 : Tracer_Octant(x+r1*r,y,r,i) : next i for i = 6 to 8 : Tracer_Octant(x+r1*r,y,r,i) : next i Tracer_Octant(x,y-r1*r,r,8) Tracer_Octant(x-r1*r,y+r1*r,r,1) Tracer_Octant(x+r1*r,y+r1*r,r,4) Tracer_Octant(x-r1*r,y+r1*r,r,8) : x1 = where_x : y1 = where_y Tracer_Octant(x+r1*r,y+r1*r,r,5) : 2d_line where_x,where_y,x1,y1 if p > 0 then 2d_flood x,y,cr,cg,cb
END_SUB rem ============================================================================ SUB Coeur(x,y,r,p,cr,cg,cb) dim_local i for i = 1 to 6 : Tracer_Octant(x-r,y,r,i) : next i for i = 1 to 4 : Tracer_Octant(x+r,y,r,i) : next i for i = 7 to 8 : Tracer_Octant(x+r,y,r,i) : next i
for i = 3 to 4 : Tracer_Octant(x+r,y+2*r,r,i) : next i for i = 1 to 2 : Tracer_Octant(x-r,y+2*r,r,i) : next i if p > 0 then 2d_flood x,y+2,cr,cg,cb END_SUB rem ============================================================================ SUB Pique(x,y,r,p,cr,cg,cb) dim_local i for i = 3 to 6 : Tracer_Octant(x-r,y,r,i) : next i for i = 1 to 2 : Tracer_Octant(x+r,y,r,i) : next i for i = 7 to 8 Tracer_Octant(x+r,y,r,i) : Tracer_Octant(x-r,y+r,r,i) Tracer_Octant(x-r,y-2*r,r,i) next i for i = 5 to 6 Tracer_Octant(x+r,y-2*r,r,i) : Tracer_Octant(x+r,y+r,r,i) next i
2d_line x-r,y+r,x+r,y+r : 2d_line x-r,y+2*r,x+r,y+2*r if p > 0 then 2d_flood x,y,cr,cg,cb: 2d_flood x,y+2*r-2,cr,cg,cb END_SUB rem ============================================================================ SUB Frise_1(x,y,r,p,cr,cg,cb) dim_local i 2d_pen_color 0,0,254 for i = 1 to 4 : Tracer_Octant(x,y,r,i) : next i for i = 7 to 8 : Tracer_Octant(x,y,r,i) : next i for i = 3 to 8 : Tracer_Octant(x,y+2*r,r,i) : next i for i = 1 to 6 : Tracer_Octant(x+2*r,y,r,i) : next i for i = 1 to 2 : Tracer_Octant(x+2*r,y+2*r,r,i) : next i for i = 5 to 8 : Tracer_Octant(x+2*r,y+2*r,r,i) : next i if p > 0 then 2d_flood x,y+2*r,cr,cg,cb END_SUB rem ============================================================================ SUB Frise_2(x,y,r) dim_local i 2d_pen_color 255,0,0 for i = 3 to 4 : Tracer_Octant(x,y,r,i) : next i for i = 1 to 2 : Tracer_Octant(x+r,y,r,i) : next i 2d_line x,y-r,x+r,y-r for i = 5 to 6 : Tracer_Octant(x,y+r,r,i) : next i for i = 7 to 8 : Tracer_Octant(x+r,y+r,r,i) : next i 2d_line x,y+2*r,x+r,y+2*r : 2d_line x-r,y,x-r,y+r : 2d_line x+2*r,y,x+2*r,y+r END_SUB rem ============================================================================ SUB Balle(x,y,r) dim_local i,r1 r1 = int(r/2) for i = 1 to 8 : Tracer_Octant(x,y,r,i) : next i for i = 1 to 2 : Tracer_Octant(x,y-r1,r1,i) : next i for i = 7 to 8 : Tracer_Octant(x,y-r1,r1,i) : next i for i = 3 to 6 : Tracer_Octant(x,y+r1,r1,i) : next i for i = 1 to 4 : Tracer_Octant(x-r1,y,r1,i) : next i for i = 5 to 8 : Tracer_Octant(x+r1,y,r1,i) : next i if odd(r) = 1 2d_flood x,y-r1,255,255,000 : 2d_flood x,y+r1,255,255,000 2d_flood x-r1,y,255,000,000 : 2d_flood x+r1,y,255,000,000 else 2d_flood x,y-r1,255,000,000 : 2d_flood x,y+r1,255,000,000 2d_flood x-r1,y,255,255,000 : 2d_flood x+r1,y,255,255,000 end_if END_SUB rem ============================================================================ SUB Alphabet() A(050,100,20) : B(100,100,20) : C(150,100,20) : D(200,100,20) : E(250,100,20) F(300,100,20) : G(350,100,20) : H(400,100,20) : I(450,100,20) : J(500,100,20) K(550,100,20) : L(600,100,20) : M(650,100,20) : N(050,200,20) : O(100,200,20) P(150,200,20) : Q(200,200,20) : R(250,200,20) : S(300,200,20) : T(350,200,20) U(400,200,20) : V(450,200,20) : W(500,200,20) : X(550,200,20) : Y(600,200,20) Z(650,200,20) END_SUB rem ============================================================================ SUB A(x,y,r) dim_local i for i = 1 to 4 : Tracer_Octant(x+r,y+r,r,i) : next i 2d_line x,y+r,x,y+4*r : 2d_line x+2*r,y+r,x+2*r,y+4*r : 2d_line x,y+2*r,x+2*r,y+2*r END_SUB rem ============================================================================ SUB B(x,y,r) dim_local i 2d_poly_from x+r,y : 2d_poly_to x,y : 2d_poly_to x,y+4*r 2d_poly_to x+r,y+4*r : 2d_line x,y+2*r,x+r,y+2*r for i = 1 to 2 : Tracer_Octant(x+r,y+r,r,i) : Tracer_Octant(x+r,y+3*r,r,i) : next i for i = 7 to 8 : Tracer_Octant(x+r,y+r,r,i) : Tracer_Octant(x+r,y+3*r,r,i) : next i END_SUB rem ============================================================================ SUB C(x,y,r) dim_local i for i = 1 to 4 : Tracer_Octant(x+r,y+r,r,i) : next i for i = 5 to 8 : Tracer_Octant(x+r,y+3*r,r,i) : next i 2d_line x,y+r,x,y+3*r END_SUB rem ============================================================================ SUB D(x,y,r) dim_local i 2d_poly_from x+r,y : 2d_poly_to x,y : 2d_poly_to x,y+4*r :2d_poly_to x+r,y+4*r for i = 1 to 2 : Tracer_Octant(x+r,y+r,r,i) : next i for i = 7 to 8 : Tracer_Octant(x+r,y+3*r,r,i) : next i 2d_line x+2*r,y+r,x+2*r,y+3*r END_SUB rem ============================================================================ SUB E(x,y,r) dim_local i 2d_poly_from x+2*r,y : 2d_poly_to x,y : 2d_poly_to x,y+4*r 2d_poly_to x+2*r,y+4*r : 2d_line x,y+2*r,x+r,y+2*r END_SUB rem ============================================================================ SUB F(x,y,r) dim_local i 2d_poly_from x+2*r,y : 2d_poly_to x,y : 2d_poly_to x,y+4*r 2d_line x,y+2*r,x+r,y+2*r END_SUB rem ============================================================================ SUB G(x,y,r) dim_local i for i = 1 to 4 : Tracer_Octant(x+r,y+r,r,i) : next i for i = 5 to 8 : Tracer_Octant(x+r,y+3*r,r,i) : next i 2d_line x,y+r,x,y+3*r : 2d_line x+r,y+2*r,x+2*r,y+2*r : 2d_poly_to x+2*r,y+3*r
END_SUB rem ============================================================================ SUB H(x,y,r) 2d_line x,y,x,y+4*r : 2d_line x+2*r,y,x+2*r,y+4*r : 2d_line x,y+2*r,x+2*r,y+2*r END_SUB rem ============================================================================ SUB I(x,y,r) 2d_line x,y,x+2*r,y : 2d_line x,y+4*r,x+2*r,y+4*r: 2d_line x+r,y,x+r,y+4*r END_SUB rem ============================================================================ SUB J(x,y,r) dim_local i 2d_line x,y,x+2*r,y :2d_poly_to x+2*r,y+3*r for i= 5 to 8 : Tracer_Octant(x+r,y+3*r,r,i) : next i END_SUB rem ============================================================================ SUB K(x,y,r) dim_local i 2d_line x,y,x,y+4*r for i = 3 to 4 : Tracer_Octant(x+2*r,y+r,r,i) : next i for i = 7 to 8 : Tracer_Octant(x,y+r,r,i) : next i for i = 1 to 2 : Tracer_Octant(x,y+3*r,r,i) : next i for i = 5 to 6 : Tracer_Octant(x+2*r,y+3*r,r,i) : next i END_SUB rem ============================================================================ SUB L(x,y,r) 2d_poly_from x,y : 2d_poly_to x,y+4*r : 2d_poly_to x+2*r,y+4*r END_SUB rem ============================================================================ SUB M(x,y,r) dim_local i for i = 5 to 8 : Tracer_Octant(x+r,y,r,i) : next i 2d_line x,y,x,y+4*r : 2d_line x+2*r,y,x+2*r,y+4*r END_SUB rem ============================================================================ SUB N(x,y,r) dim_local i 2d_line x,y,x,y+4*r : 2d_line x+2*r,y,x+2*r,y+4*r for i = 1 to 2 : Tracer_Octant(x,y+r,r,i) : next i for i = 5 to 6 : Tracer_Octant(x+2*r,y+r,r,i) : next i END_SUB rem ============================================================================ SUB O(x,y,r) dim_local i for i = 1 to 4 : Tracer_Octant(x+r,y+r,r,i) : next i for i = 5 to 8 : Tracer_Octant(x+r,y+3*r,r,i) : next i 2d_line x,y+r,x,y+3*r : 2d_line x+2*r,y+r,x+2*r,y+3*r END_SUB rem ============================================================================ SUB P(x,y,r) dim_local i for i = 1 to 2 : Tracer_Octant(x+r,y+r,r,i) : next i for i = 7 to 8 : Tracer_Octant(x+r,y+r,r,i) : next i 2d_poly_from x+r,y : 2d_poly_to x,y 2d_poly_to x,y+4*r : 2d_line x,y+2*r,x+r,y+2*r END_SUB rem ============================================================================ SUB Q(x,y,r) dim_local i for i = 1 to 4 : Tracer_Octant(x+r,y+r,r,i) : next i for i = 5 to 8 : Tracer_Octant(x+r,y+3*r,r,i) : next i 2d_line x,y+r,x,y+3*r : 2d_line x+2*r,y+r,x+2*r,y+3*r for i = 5 to 6 : Tracer_Octant(x+2*r,y+3*r,r,i) : next i END_SUB rem ============================================================================ SUB R(x,y,r) dim_local i 2d_poly_from x+r,y : 2d_poly_to x,y : 2d_poly_to x,y+4*r : 2d_line x,y+2*r,x+r,y+2*r for i = 1 to 2 : Tracer_Octant(x+r,y+r,r,i) : Tracer_Octant(x+r,y+3*r,r,i) : next i for i = 7 to 8 : Tracer_Octant(x+r,y+r,r,i) : next i 2d_line x+2*r,y+3*r,x+2*r,y+4*r END_SUB rem ============================================================================ SUB S(x,y,r) dim_local i for i = 1 to 6 : Tracer_Octant(x+r,y+r,r,i) : next i for i = 1 to 2 : Tracer_Octant(x+r,y+3*r,r,i) : next i for i = 5 to 8 : Tracer_Octant(x+r,y+3*r,r,i) : next i END_SUB rem ============================================================================ SUB T(x,y,r) 2d_line x,y,x+2*r,y : 2d_line x+r,y,x+r,y+4*r END_SUB rem ============================================================================ SUB U(x,y,r) dim_local i for i = 5 to 8 : Tracer_Octant(x+r,y+3*r,r,i) : next i 2d_line x,y,x,y+3*r : 2d_line x+2*r,y,x+2*r,y+3*r END_SUB rem ============================================================================ SUB V(x,y,r) dim_local i 2d_line x,y,x,y+3*r : 2d_line x+2*r,y,x+2*r,y+3*r for i = 1 to 2 : Tracer_Octant(x,y+4*r,r,i) : next i for i = 3 to 4 : Tracer_Octant(x+2*r,y+4*r,r,i) : next i END_SUB rem ============================================================================ SUB W(x,y,r) dim_local i 2d_line x,y,x,y+4*r : 2d_line x+2*r,y,x+2*r,y+4*r for i = 7 to 8 : Tracer_Octant(x,y+3*r,r,i) : next i for i = 5 to 6 : Tracer_Octant(x+2*r,y+3*r,r,i) : next i END_SUB rem ============================================================================ SUB X(x,y,r) dim_local i 2d_line x,y,x,y+r : 2d_line x+2*r,y,x+2*r,y+r 2d_line x,y+3*r,x,y+4*r : 2d_line x+2*r,y+3*r,x+2*r,y+4*r for i = 5 to 8 : Tracer_Octant(x+r,y+r,r,i) : next i for i = 1 to 4 : Tracer_Octant(x+r,y+3*r,r,i) : next i END_SUB rem ============================================================================ SUB Y(x,y,r) dim_local i 2d_line x,y,x,y+r : 2d_line x+2*r,y,x+2*r,y+3*r for i = 5 to 8 : Tracer_Octant(x+r,y+r,r,i) : Tracer_Octant(x+r,y+3*r,r,i) : next i END_SUB rem ============================================================================ SUB Z(x,y,r) dim_local i 2d_line x,y,x+2*r,y : 2d_poly_to x+2*r,y+r 2d_line x,y+3*r,x,y+4*r : 2d_poly_to x+2*r,y+4*r for i = 7 to 8 : Tracer_Octant(x+r,y+r,r,i) : next i for i = 3 to 4 : Tracer_Octant(x+r,y+3*r,r,i) : next i END_SUB rem ============================================================================ SUB Bonhommes() Bonhomme(100,50,30) : Bonhomme(300,50,20) : Bonhomme(450,50,15) Bonhomme(550,50,10) : Bonhomme(620,50,05) : Bonhomme(660,50,02) Bonhomme(680,50,01) END_SUB rem ============================================================================ SUB Bonhomme(x,y,r) dim_local i for i = 1 to 4 : Tracer_Octant(x,y,r,i) : next i for i = 7 to 8 : Tracer_Octant(x-2*r,y,r,i) : next i for i = 5 to 6 : Tracer_Octant(x+2*r,y,r,i) : next i 2d_line x-2*r,y+r,x+2*r,y+r 2d_line x-r,y+r,x-r,y+2*r : 2d_line x+r,y+r,x+r,y+2*r for i = 5 to 8 : Tracer_Octant(x,y+2*r,r,i) : next i 2d_line x-2*r,y+3*r,x+2*r,y+3*r for i = 3 to 4 : Tracer_Octant(x-2*r,y+4*r,r,i) : next i for i = 1 to 2 : Tracer_Octant(x+2*r,y+4*r,r,i) : next i 2d_line x-3*r,y+4*r,x-3*r,y+10*r : 2d_poly_to x-2*r,y+10*r 2d_line x+3*r,y+4*r,x+3*r,y+10*r : 2d_poly_to x+2*r,y+10*r for i = 5 to 6 : Tracer_Octant(x-2*r,y+10*r,r,i) : next i for i = 7 to 8 : Tracer_Octant(x+2*r,y+10*r,r,i) : next i
2d_line x-2*r,y+6*r,x-2*r,y+15*r : 2d_line x+2*r,y+6*r,x+2*r,y+15*r 2d_line x-2*r,y+9*r,x+2*r,y+9*r 2d_line x,y+9*r,x,y+15*r 2d_line x-2*r,y+15*r,x+2*r,y+15*r for i = 5 to 8 : Tracer_Octant(x-r,y+15*r,r,i) : Tracer_Octant(x+r,y+15*r,r,i) : next i END_SUB rem ============================================================================ SUB Texte(x,y,r) dim_local s,x1, y1 ,y2 s = 3*r : y1 = y + 4*r+10 : y2 = y+10*r : x1 = x+6*r
P(x,y,r) : A(x+s,y,r) : N(x+2*s,y,r) : O(x+3*s,y,r) : R(x+4*s,y,r) A(x+5*s,y,r) : M(x+6*s,y,r) : I(x+7*s,y,r) : C(x+8*s,y,r) E(x1,y1,r) : C(x1+s,y1,r) : R(x1+2*s,y1,r) : I(x1+3*s,y1,r) : T(x1+4*s,y1,r) P(x,y2,r) : A(x+s,y2,r) : R(x+2*s,y2,r) O(x+4*s,y2,r) : C(x+5*s,y2,r) : T(x+6*s,y2,r) : A(x+7*s,y2,r) N(x+8*s,y2,r) : T(x+9*s,y2,r) : S(x+10*s,y2,r)
END_SUB rem ============================================================================
Dernière édition par papydall le Sam 14 Nov 2015 - 19:04, édité 1 fois | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Tracé d’arc de cercle par l'algorithme de Bresenham Sam 14 Nov 2015 - 18:33 | |
| Sauf que... si PI n'est pas défini, alors versionù ne l'est pas non plus... fais plutôt comme ceci: if variable("PI$")=0 dim PI : PI = ... end_if | |
| | | sergeauze
Nombre de messages : 391 Age : 72 Localisation : Hautes Alpes France Date d'inscription : 09/01/2010
| Sujet: Re: Tracé d’arc de cercle par l'algorithme de Bresenham Sam 14 Nov 2015 - 18:40 | |
| je ne suis pas encore passé a la dernière version . Trop occupé à planer dans les airs! j'aime bien ce genre de programmes merci | |
| | | Invité Invité
| Sujet: Re: Tracé d’arc de cercle par l'algorithme de Bresenham Sam 14 Nov 2015 - 19:04 | |
| Pas mal ton programme Papydall. Il y a une chose qui m'a plu, c'est ton alphabet. Justement je m'été dit il y a quelque temps qu'il faudrait que je reprenne mon programme de cryptage que je m'étais fait, et rajouter la sortie des informations sous forme de lettres dessinées, pour qu'il soit impossible de voir dans un fichier, ou d'une manière ou d'une autre mes mots de passe ou code, ou ce que l'on veut. Il faudrait que l'alphabet soit complet. Un bon truc. |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Tracé d’arc de cercle par l'algorithme de Bresenham Sam 14 Nov 2015 - 19:13 | |
| - Klaus a écrit:
- Sauf que... si PI n'est pas défini, alors versionù ne l'est pas non plus... fais plutôt comme ceci:
if variable("PI$")=0 dim PI : PI = ... end_if
C’est plutôt - Code:
-
if variable("PI")=0 dim PI : PI = ... end_if
J'ai édité mon code pour introduire le test sur PI. @Cosmos Je suis content que mon code t'a plu. Comme je le disais plus haut, avec un peu d'imagination et beaucoup de patience, on peut faire des belles choses avec un huitième de cercle! | |
| | | Contenu sponsorisé
| Sujet: Re: Tracé d’arc de cercle par l'algorithme de Bresenham | |
| |
| | | | Tracé d’arc de cercle par l'algorithme de Bresenham | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |