FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» COMPILATEUR V 0.9 beta 7 du 10 aout 2017
par Yannick Aujourd'hui à 1:58

» Pb 17 (en analyse): ITEM_SELECT ne fonctionne pas
par Jack Hier à 19:26

» Compilateur FBPano
par Mike Hier à 13:52

» un nouveau editeur panobasic
par Jean Claude Hier à 10:18

» Le compilateur.
par Pedro Alvarez Hier à 8:36

» Pb 16 (en analyse): ON_CLOSE plante à l'exécution
par Jack Mer 16 Aoû 2017 - 20:00

» Pb 15 (en analyse): TIMER_ON plante à l'exécution
par Jack Mer 16 Aoû 2017 - 19:58

» KGF_dll - nouvelles versions
par Yannick Dim 13 Aoû 2017 - 17:35

» probleme d'outil
par Yannick Dim 13 Aoû 2017 - 17:32

» Carte de France des régions
par Yannick Sam 12 Aoû 2017 - 21:33

» Pb 14 (en analyse): PRINT_LOCATE plante à l'exécution
par Jack Ven 11 Aoû 2017 - 22:37

» Petit avertissement [Mots réservés]
par papydall Ven 11 Aoû 2017 - 13:45

» Distances sur plan
par JL35 Jeu 10 Aoû 2017 - 21:29

» Tracé : Triangle, Carrée, Dents de scie, Sinusoïde redressée
par papydall Jeu 10 Aoû 2017 - 14:52

» Troncature dans une image
par JL35 Mer 9 Aoû 2017 - 13:45

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Août 2017
LunMarMerJeuVenSamDim
 123456
78910111213
14151617181920
21222324252627
28293031   
CalendrierCalendrier

Partagez | 
 

 Tracé d’arc de cercle par l'algorithme de Bresenham

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
papydall

avatar

Nombre de messages : 5501
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Tracé d’arc de cercle par l'algorithme de Bresenham   Sam 14 Nov 2015 - 3:42

Tracé d’arc de cercle par l'algorithme de Bresenham

L’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 +
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
papydall

avatar

Nombre de messages : 5501
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Tracé d’arc de cercle par l'algorithme de Bresenham   Sam 14 Nov 2015 - 16: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 ============================================================================
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
sergeauze

avatar

Nombre de messages : 391
Age : 65
Localisation : Hautes Alpes France
Date d'inscription : 09/01/2010

MessageSujet: Re: Tracé d’arc de cercle par l'algorithme de Bresenham   Sam 14 Nov 2015 - 17:21

salut
pb chez moi ligne 73 dans une boucle for next
Copie à revoir ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://sergeauze.blog-video.tv/
Jicehel

avatar

Nombre de messages : 5849
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Tracé d’arc de cercle par l'algorithme de Bresenham   Sam 14 Nov 2015 - 18:03

Normal, si tu n'utilises pas la dernière version de Panoramic, tu dois faire un Dim Pi et initialiser Pi à 3.1416
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

Nombre de messages : 4989
Age : 63
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Tracé d’arc de cercle par l'algorithme de Bresenham   Sam 14 Nov 2015 - 18:24

Bravo Papydall,
Encore une belle démonstration de ton savoir faire...

A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5501
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Tracé d’arc de cercle par l'algorithme de Bresenham   Sam 14 Nov 2015 - 20: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 - 21:04, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Klaus

avatar

Nombre de messages : 10062
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Tracé d’arc de cercle par l'algorithme de Bresenham   Sam 14 Nov 2015 - 20: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
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
sergeauze

avatar

Nombre de messages : 391
Age : 65
Localisation : Hautes Alpes France
Date d'inscription : 09/01/2010

MessageSujet: Re: Tracé d’arc de cercle par l'algorithme de Bresenham   Sam 14 Nov 2015 - 20: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
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://sergeauze.blog-video.tv/
Invité
Invité



MessageSujet: Re: Tracé d’arc de cercle par l'algorithme de Bresenham   Sam 14 Nov 2015 - 21: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.
Revenir en haut Aller en bas
papydall

avatar

Nombre de messages : 5501
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Tracé d’arc de cercle par l'algorithme de Bresenham   Sam 14 Nov 2015 - 21: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!
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Contenu sponsorisé




MessageSujet: Re: Tracé d’arc de cercle par l'algorithme de Bresenham   

Revenir en haut Aller en bas
 
Tracé d’arc de cercle par l'algorithme de Bresenham
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Comment récuperer les tracés, suite à un changement de PC.
» Modification de tracé en route
» Importation tracés
» Création Itinéraire à partir de Tracé sur version 3.3.2
» Tracé a vol d'oiseau

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC 32 bits :: Vos sources, vos utilitaires à partager-
Sauter vers: