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
» Gestion d'un système client-serveur.
Rectangles à coins arrondis. Encore !? Emptypar Klaus Ven 17 Mai 2024 - 14:02

» item_index(résolu)
Rectangles à coins arrondis. Encore !? Emptypar jjn4 Mar 14 Mai 2024 - 19:38

» Bataille terrestre
Rectangles à coins arrondis. Encore !? Emptypar jjn4 Lun 13 Mai 2024 - 15:01

» SineCube
Rectangles à coins arrondis. Encore !? Emptypar Marc Sam 11 Mai 2024 - 12:38

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Rectangles à coins arrondis. Encore !? Emptypar Marc Sam 11 Mai 2024 - 12:22

» Philharmusique
Rectangles à coins arrondis. Encore !? Emptypar jjn4 Ven 10 Mai 2024 - 13:58

» PANORAMIC V 1
Rectangles à coins arrondis. Encore !? Emptypar papydall Jeu 9 Mai 2024 - 3:22

» select intégrés [résolu]
Rectangles à coins arrondis. Encore !? Emptypar jjn4 Mer 8 Mai 2024 - 17:00

» number_mouse_up
Rectangles à coins arrondis. Encore !? Emptypar jjn4 Mer 8 Mai 2024 - 11:59

» Aide de PANORAMIC
Rectangles à coins arrondis. Encore !? Emptypar jjn4 Mer 8 Mai 2024 - 11:16

» trop de fichiers en cours
Rectangles à coins arrondis. Encore !? Emptypar lepetitmarocain Mer 8 Mai 2024 - 10:43

» Je teste PANORAMIC V 1 beta 1
Rectangles à coins arrondis. Encore !? Emptypar papydall Mer 8 Mai 2024 - 4:17

» bouton dans autre form que 0(résolu)
Rectangles à coins arrondis. Encore !? Emptypar leclode Lun 6 Mai 2024 - 13:59

» KGF_dll - nouvelles versions
Rectangles à coins arrondis. Encore !? Emptypar Klaus Lun 6 Mai 2024 - 11:41

» @Jack
Rectangles à coins arrondis. Encore !? Emptypar Jack Mar 30 Avr 2024 - 20:40

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2024
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendrierCalendrier
Le Deal du moment :
Cartes Pokémon EV6.5 : où trouver le ...
Voir le deal

 

 Rectangles à coins arrondis. Encore !?

Aller en bas 
3 participants
AuteurMessage
papydall

papydall


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

Rectangles à coins arrondis. Encore !? Empty
MessageSujet: Rectangles à coins arrondis. Encore !?   Rectangles à coins arrondis. Encore !? EmptyLun 24 Oct 2022 - 5:56

Code:

rem ============================================================================
rem       Tracé des rectangles à coins arrondis
rem ============================================================================
picture 10 : full_space 10 : 2d_target_is 10
' Exemples d'appel
Rounded_Rectangle(20,20,500,400,100,150,20)
Rounded_Rectangle(50,40,400,300,10,150,200)
Rounded_Rectangle(80,50,100,40,200,150,0)
Rounded_Rectangle(300,50,50,250,10,10,200)
Rounded_Rectangle(80,200,150,120,255,10,20)
Rounded_Rectangle(60,350,400,40,0,0,0)
end
rem ============================================================================
' Paramètres :
' cx,cy : coordonnées du coin haut gauche du rectangle
' w , h : respectivement largeur et hauteur du rectangle
' r,g,b : composantes RGB de la couleur du rectangle
SUB Rounded_Rectangle(cx,cy,w,h,r,g,b)
    dim_local cz
    cz = min(w,h)/6 : ' Valeur empirique pour arrondir les coins en fonction
                    : ' de w,et h à ajuster selon le goût  
    degrees : 2d_pen_width 2 : 2d_pen_color r,g,b
    ' tracé des côtés du rectangle dépourvu de ses coins
    2d_line cx+cz/2,cy,cx+w-cz/2,cy      
    2d_line cx+cz/2,cy+h,cx+w-cz/2,cy+h
    2d_line cx,cy+cz/2,cx,cy+h-cz/2
    2d_line cx+w,cy+cz/2,cx+w,cy+h-cz/2
    ' Tracé des arcs pour les coins
    2d_arc cx+cz/2,cy+cz/2,cz/2,180,90
    2d_arc cx+w-cz/2,cy+cz/2,cz/2,90,0
    2d_arc cx+cz/2,cy+h-cz/2,cz/2,270,180
    2d_arc cx+w-cz/2,cy+h-cz/2,cz/2,0,270      
END_SUB
rem ============================================================================
    
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

Rectangles à coins arrondis. Encore !? Empty
MessageSujet: Re: Rectangles à coins arrondis. Encore !?   Rectangles à coins arrondis. Encore !? EmptyLun 24 Oct 2022 - 19:25

Oh oui, encore papydall !
Tiens, par exemple:
Code:
DIM x,y,w,h,r,ty
PICTURE 1: FULL_SPACE 1: 2D_TARGET_IS 1: 2D_PEN_WIDTH 5: 2D_PEN_COLOR 255,0,0
x = 20: y = 20: w = 240: h = 180
r = 30
ty = 1: x = 20: y = 20: Rectar(x,y,w,h,r,ty)
ty = 2: x = 300: Rectar(x,y,w,h,r,ty)
ty = 3: x = 20: y = 230: Rectar(x,y,w,h,r,ty)
ty = 4: x = 300: Rectar(x,y,w,h,r,ty)
END

SUB Rectar(x,y,w,h,r,ty)
  ' Cadre en x,y, dimensions w,h, à coins arrondis de rayon r
  ' ty =0 rectangle normal, =1 arrondi vers l'extérieur, =2 vers l'intérieur
  '    =3 cercles complets, =4 angles droits
  ' Paramètres courants: épaisseur trait, couleur
  DIM_LOCAL x1,x2,y1,y2
  x1 = x+r: x2 = x+w-r: y1 = y+r: y2 = y+h-r
  DEGREES
  SELECT ty
    CASE 0: ' rectangle ordinaire (r ignoré)
        2D_RECTANGLE x,y,x+w,y+h
    CASE 1: ' angles arrondis vers l'extérieur
        2D_LINE x,y1,x,y2: 2D_ARC x1,y2,r,270,180
        2D_LINE x1,y+h,x2,y+h: 2D_ARC x2,y2,r,0,270
        2D_LINE x+w,y2,x+w,y+r: 2D_ARC x2,y+r,r,90,0
        2D_LINE x2,y,x+r,y: 2D_ARC x+r,y+r,r,180,90
    CASE 2: ' angles arrondis vers l'intérieur
        2D_LINE x,y+r,x,y2: 2D_ARC x,y+h,r,90,0
        2D_LINE x1,y+h,x2,y+h: 2D_ARC x+w,y+h,r,180,90
        2D_LINE x+w,y2,x+w,y1: 2D_ARC x+w,y,r,270,180
        2D_LINE x2,y,x1,y: 2D_ARC x,y,r,0,270
    CASE 3: ' angles = cercles complets
        2D_LINE x,y1,x,y2: 2D_CIRCLE x1,y2,r
        2D_LINE x1,y+h,x2,y+h: 2D_CIRCLE x2,y2,r
        2D_LINE x+w,y2,x+w,y1: 2D_CIRCLE x2,y1,r
        2D_LINE x2,y,x1,y: 2D_CIRCLE x1,y1,r
    CASE 4: ' angles décrochage angle droit
        2D_LINE x,y1,x,y2: 2D_POLY_TO x1,y2: 2D_POLY_TO x1,y+h
        2D_POLY_TO x2,y+h: 2D_POLY_TO x2,y2: 2D_POLY_TO x+w,y2
        2D_POLY_TO x+w,y1: 2D_POLY_TO x2,y1: 2D_POLY_TO x2,y
        2D_POLY_TO x1,y: 2D_POLY_TO x1,y1: 2D_POLY_TO x,y1 
  END_SELECT
END_SUB
Rectangles à coins arrondis. Encore !? Img13
Revenir en haut Aller en bas
Marc

Marc


Nombre de messages : 2397
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Rectangles à coins arrondis. Encore !? Empty
MessageSujet: Re: Rectangles à coins arrondis. Encore !?   Rectangles à coins arrondis. Encore !? EmptyLun 24 Oct 2022 - 21:53

Papydall a écrit:
Rectangles à coins arrondis. Encore !?

Oui, pourquoi pas !

Je vous propose une version "de précision".

Elle fonctionne avec un pinceau d’une largeur d’un pixel (instruction 2D_PEN_WIDTH  1), il n’y aura pas de trou dans le tracé.
Les quatre angles arrondis sont rigoureusement identiques. Pas de distorsion.

La  syntaxe : rectangle_arrondi(X1,Y1,X2,Y2,R).
Dessine un rectangle entre deux coordonnées X1,Y1 et X2,Y2.
Les coordonnées de départ et d'arrivée sont incluses dans le tracé.
R est le rayon en pixels des angles arrondis.  

Les coordonnées des points de départ et d’arrivée peuvent être données dans n’importe quel sens. Par exemple, pour le point de départ, on peut renseigner le coin en bas à droite  et pour le point d’arrivée, celui en haut à gauche.

Comme d’habitude, la couleur du tracé se fait par un 2D_PEN_COLOR, et le remplissage par un 2D_FLOOD.

Code:
' Tracé de rectangles à coins arrondis
' Marc - Octobre 2022
' Ecrit en langage Panoramic 0.9.29.i9
' ------------------------------------------------------------------------------

' La  syntaxe : rectangle_arrondi(X1,Y1,X2,Y2,R).
' Dessine un rectangle entre deux coordonnées X1,Y1 et X2,Y2.
' Les coordonnées de départ et d'arrivées sont incluses dans le tracé.
' R est le rayon en pixels des angles arrondis.  

rectangle_arrondi(5,7,45,80,9)
end
' ------------------------------------------------------------------------------
sub rectangle_arrondi(xr1%,yr1%,xr2%,yr2%,rayon%)
    dim_local x%, y%, m%, cx%, cy%, x1%, y1%, x2%, y2%

    ' traitement des coordonnées si elles sont inversées
    if xr1% < xr2%
        x1% = xr1% : x2% = xr2%
    else
        x1% = xr2% : x2% = xr1%
    end_if
    
    if yr1% < yr2%
        y1% = yr1% : y2% = yr2%
    else
        y1% = yr2% : y2% = yr1%
    end_if
        
    ' tracer le trait du haut
    2d_line x1%+rayon%, y1%, x2%-rayon%, y1%
    ' tracer le trait du bas
    2d_line x1%+rayon%, y2%, x2%-rayon%, y2%
    ' tracer le trait de gauche
    2d_line x1%, y1%+rayon%, x1%, y2%-rayon%
    ' traver le trait de droite
    2d_line x2%, y1%+rayon%, x2%, y2%-rayon%
    
    ' dessiner l'angle supérieur gauche
    cx% = x1%+rayon% : cy% = y1%+rayon%
    x% = 0 : y% = rayon% : m% = 5 - 4*rayon%      
    while x% <= y%
        2d_point x%*(-1)+cx%,y%*(-1)+cy% : 2d_point y%*(-1)+cx%,x%*(-1)+cy%
        if m% > 0 then y% = y% - 1 : m% = m% - 8*y%
        x% = x% + 1 : m% = m% + 8*x% + 4
    end_while

    ' dessiner l'angle supérieur droit
    cx% = x2%-rayon% : cy% = y1%+rayon%
    x% = 0 : y% = rayon% : m% = 5 - 4*rayon%      
    while x% <= y%
        2d_point x%+cx%,y%*(-1)+cy% : 2d_point y%+cx%,x%*(-1)+cy%
        if m% > 0 then y% = y% - 1 : m% = m% - 8*y%
        x% = x% + 1 : m% = m% + 8*x% + 4
    end_while

    ' dessiner l'angle inférieur droit
    cx% = x2%-rayon% : cy% = y2%-rayon%
    x% = 0 : y% = rayon% : m% = 5 - 4*rayon%      
    while x% <= y%
        2d_point x%+cx%,y%+cy% : 2d_point y%+cx%,x%+cy%
        if m% > 0 then y% = y% - 1 : m% = m% - 8*y%
        x% = x% + 1 : m% = m% + 8*x% + 4
    end_while

    ' dessiner l'angle inférieur gauche
    cx% = x1%+rayon% : cy% = y2%-rayon%
    x% = 0 : y% = rayon% : m% = 5 - 4*rayon%      
    while x% <= y%
        2d_point x%*(-1)+cx%,y%+cy%
        2d_point y%*(-1)+cx%,x%+cy%
        if m% > 0 then y% = y% - 1 : m% = m% - 8*y%
        x% = x% + 1 : m% = m% + 8*x% + 4
    end_while
end_sub

Rectangles à coins arrondis. Encore !? Testre10
Revenir en haut Aller en bas
papydall

papydall


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

Rectangles à coins arrondis. Encore !? Empty
MessageSujet: Re: Rectangles à coins arrondis. Encore !?   Rectangles à coins arrondis. Encore !? EmptyMar 25 Oct 2022 - 1:38

Merci JL35
Merci Marc
Tous ces codes sont bons.

J'ai posté, il y a environ 7 années un code de tracé d'arc de cercle par l'algorithme de Bresenham.
Et un autre code dans le même post montrant une demo de ce l'on peut faire avec un simple octant.

ça se trouve ici

Ci-après un code de tracé d'arc de cercle par l'algorithme de Bresenham.

Code:

rem ============================================================================
rem       Tracé d’arc de cercle par l’alorithme de Bresenham
rem        Le tracé se fait par octant (c-à-d 1/8 de cercle)
rem     Les numéros des octants suivent le sens trigonométrique
rem ============================================================================
dim i
' tracé des axes
2d_pen_color 255,0,0 : 2d_line 20,200,500,200 : 2d_line 250,20,250,400
2d_pen_color 0,0,255
for i = 1 to 8
    caption 0,"Octant : " + str$(i)  
    Tracer_Octant(250,200,100,i) : pause 1000 : ' La pause pour observer le tracé
next i
caption 0,"Et maintenant les 8 octants d'un trait formant un cercle complet"
2d_pen_color 255,0,255 : 2d_fill_off
for i = 1 to 8
    Tracer_Octant(250,200,90,i)
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 ============================================================================
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
papydall

papydall


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

Rectangles à coins arrondis. Encore !? Empty
MessageSujet: Re: Rectangles à coins arrondis. Encore !?   Rectangles à coins arrondis. Encore !? EmptyMar 25 Oct 2022 - 3:25

Algorithme d'Andres de tracé de cercle.


Code:

rem ============================================================================
rem             Algorithme de tracé de cercle d’Andres
rem Ref :
rem https://fr.wikipedia.org/wiki/Algorithme_de_trac%C3%A9_de_cercle_d%27Andres
rem ============================================================================
dim xc,yc,r
xc = 250 : yc = 200 : r = 100
' Tracé des axes
2d_pen_color 255,0,0 : 2d_line 20,yc,500,yc : 2d_line xc,20,xc,400
' Tracé de l'octant N° 7  (r = 100)
2d_pen_color 0,0,255 : Octant(xc,yc,r) : pause 1000
' Tracé du cercle complet
2d_pen_color 0,0,0 : Cercle(xc,yc,r+50) : ' r = 150
end
rem ============================================================================
' Tracé de l'octant N° 7
SUB Octant(xc,yc,r)
    dim_local x,y,d
    x = 0 : y = r : d = r-1
    while y >= x
        2d_point xc+x,yc+y      
        if d >= 2*x
           d = d-2*x-1 : x = x+1
        else
           if d < 2*(r-y)
              d = d+2*y-1 : y = y-1
           else
              d = d+2*(y-x-1) : y = y-1 : x = x+1
           end_if
        end_if
    end_while
END_SUB
rem ============================================================================
' Tracé du cercle complet par octants
SUB Cercle(xc,yc,r)
    dim_local x,y,d
    x = 0 : y = r : d = r-1
    while y >= x
        2d_point xc + y , yc - x   : ' Octant N° 1
        2d_point xc + x , yc - y   : ' Octant N° 2
        2d_point xc - x , yc - y   : ' Octant N° 3
        2d_point xc - y , yc - x   : ' Octant N° 4
        2d_point xc - y , yc + x   : ' Octant N° 5
        2d_point xc - x , yc + y   : ' Octant N° 6
        2d_point xc + x , yc + y   : ' Octant N° 7
        2d_point xc + y , yc + x   : ' Octant N° 8
        
        if d >= 2*x
           d = d-2*x-1 : x = x+1
        else
           if d < 2*(r-y)
              d = d+2*y-1 : y = y-1
           else
              d = d+2*(y-x-1) : y = y-1 : x = x+1
           end_if
        end_if        
    end_while
END_SUB
rem ============================================================================

Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Contenu sponsorisé





Rectangles à coins arrondis. Encore !? Empty
MessageSujet: Re: Rectangles à coins arrondis. Encore !?   Rectangles à coins arrondis. Encore !? Empty

Revenir en haut Aller en bas
 
Rectangles à coins arrondis. Encore !?
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Tracé lignes et rectangles : Convertisseur de standard
» rectangle à coins arrondis
» Triangle à coins arrondis
» Des rectangles...
» dessine des rectangles

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: