FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Logiciel de planétarium.
Tracé d’arc de cercle par l'algorithme de Bresenham Emptypar Pedro Aujourd'hui à 8:08

» Un autre pense-bête...
Tracé d’arc de cercle par l'algorithme de Bresenham Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
Tracé d’arc de cercle par l'algorithme de Bresenham Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
Tracé d’arc de cercle par l'algorithme de Bresenham Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
Tracé d’arc de cercle par l'algorithme de Bresenham Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
Tracé d’arc de cercle par l'algorithme de Bresenham Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
Tracé d’arc de cercle par l'algorithme de Bresenham Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
Tracé d’arc de cercle par l'algorithme de Bresenham Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
Tracé d’arc de cercle par l'algorithme de Bresenham Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
Tracé d’arc de cercle par l'algorithme de Bresenham Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
Tracé d’arc de cercle par l'algorithme de Bresenham Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
Tracé d’arc de cercle par l'algorithme de Bresenham Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
Tracé d’arc de cercle par l'algorithme de Bresenham Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
Tracé d’arc de cercle par l'algorithme de Bresenham Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
Tracé d’arc de cercle par l'algorithme de Bresenham Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
Le Deal du moment : -17%
(Black Friday) Apple watch Apple SE GPS + Cellular ...
Voir le deal
249 €

 

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

Aller en bas 
5 participants
AuteurMessage
papydall

papydall


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

Tracé d’arc de cercle par l'algorithme de Bresenham Empty
MessageSujet: Tracé d’arc de cercle par l'algorithme de Bresenham   Tracé d’arc de cercle par l'algorithme de Bresenham EmptySam 14 Nov 2015 - 1: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
http://papydall-panoramic.forumarabia.com/
papydall

papydall


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

Tracé d’arc de cercle par l'algorithme de Bresenham Empty
MessageSujet: Re: Tracé d’arc de cercle par l'algorithme de Bresenham   Tracé d’arc de cercle par l'algorithme de Bresenham EmptySam 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 ============================================================================
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
sergeauze

sergeauze


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

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

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

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

Tracé d’arc de cercle par l'algorithme de Bresenham Empty
MessageSujet: Re: Tracé d’arc de cercle par l'algorithme de Bresenham   Tracé d’arc de cercle par l'algorithme de Bresenham EmptySam 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
Revenir en haut Aller en bas
Jean Claude

Jean Claude


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

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

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

A+
Revenir en haut Aller en bas
papydall

papydall


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

Tracé d’arc de cercle par l'algorithme de Bresenham Empty
MessageSujet: Re: Tracé d’arc de cercle par l'algorithme de Bresenham   Tracé d’arc de cercle par l'algorithme de Bresenham EmptySam 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
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Klaus

Klaus


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

Tracé d’arc de cercle par l'algorithme de Bresenham Empty
MessageSujet: Re: Tracé d’arc de cercle par l'algorithme de Bresenham   Tracé d’arc de cercle par l'algorithme de Bresenham EmptySam 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
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
sergeauze

sergeauze


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

Tracé d’arc de cercle par l'algorithme de Bresenham Empty
MessageSujet: Re: Tracé d’arc de cercle par l'algorithme de Bresenham   Tracé d’arc de cercle par l'algorithme de Bresenham EmptySam 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
Revenir en haut Aller en bas
http://sergeauze.blog-video.tv/
Invité
Invité




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

papydall


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

Tracé d’arc de cercle par l'algorithme de Bresenham Empty
MessageSujet: Re: Tracé d’arc de cercle par l'algorithme de Bresenham   Tracé d’arc de cercle par l'algorithme de Bresenham EmptySam 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!
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Contenu sponsorisé





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

Revenir en haut Aller en bas
 
Tracé d’arc de cercle par l'algorithme de Bresenham
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Tracé d'ellipse / tracé d'arcs de cercle
» Texte sur cercle
» Dessiner un arc de cercle
» Dessine-moi une étoile ... ou un super-cercle
» Intersection d’un cercle et d’une droite

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