Forum de Programmation en langage PANORAMIC


Rejoignez le forum, c’est rapide et facile

Forum de Programmation en langage PANORAMIC
Forum de Programmation en langage PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Rechercher
 
 

Résultats par :
 


Rechercher Recherche avancée

Derniers sujets
» Bonne année 2024
Super Ellipse EmptyLun 1 Jan - 0:25 par Papydall-Admin

» A ceux qui célèbre Noël, bonnes fêtes
Super Ellipse EmptyDim 24 Déc - 10:49 par Papydall-Admin

» Joyeux Noël et Bonne Année
Super Ellipse EmptyVen 8 Déc - 1:34 par Papydall-Admin

» Planets of the Solar System : Tilts and Spins
Super Ellipse EmptyLun 20 Mar - 15:43 par Papydall-Admin

» Bonne Année 2023
Super Ellipse EmptySam 31 Déc - 1:39 par Papydall-Admin

» Fractals - Mandelbrot
Super Ellipse EmptyVen 21 Aoû - 22:51 par Papydall-Admin

» Convertisseur Décimal ---> Binaire, Octal, Hexadécimal, ...
Super Ellipse EmptyMer 21 Nov - 1:08 par Papydall-Admin

» Balises {USER...}
Super Ellipse EmptyLun 19 Nov - 22:12 par Papydall-Admin

» Useful Dog
Super Ellipse EmptyVen 6 Avr - 14:25 par Papydall-Admin

Mars 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
25262728293031

Calendrier Calendrier

Le Deal du moment :
TCL C74 Series 55C743 – TV 55” 4K QLED 144 ...
Voir le deal
499 €

Super Ellipse

Aller en bas

Super Ellipse Empty Super Ellipse

Message par Papydall-Admin Lun 24 Oct - 4:55

Code:

rem ============================================================================
rem       SuperEllipse
rem       Par Papydall
rem ============================================================================
Init()
DrawGallery()
end
rem ============================================================================
SUB Init()
    label spi,quit
    dim i
    width 0,1000 : height 0,700
    top 0,(screen_y - height(0))/2 : left 0,(screen_x - width(0))/2
    alpha 10 : top 10,5 : left 10,100 : font_bold 10 : font_name 10,"Tahoma"
    font_size 10,14 : font_color 10,0,0,128
    font_bold 0 : font_size 0,10 : font_name 0,"tahoma": font_color 0,0,0,255

    button 20 : top 20,620 : left 20,400 : caption 20,"Spirale": on_click 20,spi
    button 30 : top 30,620 : left 30,400 : caption 30,"Quitter": hide 30 : on_click 30,quit
END_SUB
rem ============================================================================
spi:
   hide 20 : DrawSpiral()
return
rem ============================================================================
quit:
    for i = height(0) to 0 step -5 : height 0,i : pause 10 : next i
    terminate
return
rem ============================================================================
SUB DrawGallery()
    dim_local i,j, angle$, pen,k,r,g,b
    caption 10,"Galerie de formes créées utilisant la SUB SuperEllipse"
    color 0,224,232,255 : 2d_pen_color 128,128,128
    For i = 16 To 800 STEP 16 : 2d_Line i,68,i, 599 : Next i
    For i = 68 To 600 STEP 16 : 2d_Line 0,i, 799 ,i : Next i
    2d_pen_color 0,0,128
    For i = 0 To 12
        angle$ = Str$(i * 30) + "°"
        while len(angle$) < 4 : angle$ = "0" + angle$ : end_while
        print_locate i*60+20,40 : print angle$
    Next i
    print_locate 800,40 : print "<==== Angles de rotation"
    print_locate 850,60 : print "dans le sens horaire"
    pen = 2 : k = 0 : r = 0 : g = 0 : b = 255
    For j = 32 To 795 STEP 60
        2d_pen_color r,g,b
        SuperEllipse(j,97,  24, 18,.35,18, pen, k)
        SuperEllipse(j,154, 24, 18,.75,18, pen, k)
        SuperEllipse(j,201, 24, 18, 1, 4,  pen, k)
        SuperEllipse(j,268, 24, 24, 2, 5,  pen, k)
        SuperEllipse(j,325, 24, 24, 2, 7,  pen, k)
        SuperEllipse(j,382, 24, 18, 2, 18, pen, k)
        SuperEllipse(j,440, 24, 18, 3, 18, pen, k)
        SuperEllipse(j,497, 24, 18, 5, 18, pen, k)
        SuperEllipse(j,554, 24, 18, 10,18, pen, k)

        k = k + 30 : r = r + 21.25 : b = b - 21.25 : ' pen = pen + .3
    Next j
END_SUB
rem ============================================================================
' ********************************** SUB SuperEllipse **************************
' ** Paramètres:
' ** centerX, centerY : Coordonnées du centre de la SuperEllipse
' ** wide : Rayon-X de la SuperEllipse
' ** high : Rayon-Y de la SuperEllipse
' ** REMARQUE : Faire wide = high pour tracer des cercles, des carrés et des polygones réguliers
' ** exponent - Détermine la forme de la Superellipse    (.15 <= exp <= 99)
' ** exponent = .15 : Dessine une Superellipse en forme de X
' ** exponent = .3 to .9 :  Dessine un carreau avec des côtés courbés
' ** exponent = 1.0 : Dessine un carreau
' ** exponent = 2.0 : Dessine un ovale (ou un cercle si  wide = high)
' ** exponent = 3.0 : ovale plus rectangulaire
' ** exponent = 30.0 to 99.0 : C'est un rectangle
' ** numSegments : Déterminer le nombre de segments pour dessiner la SuperEllipse
' ** penSize  : Épaisseur de ligne
' ** rotAngle : Angle en degrés pour faire tourner la Superellipse
' **
' ******************************************************************************
SUB SuperEllipse(centerX, centerY, wide, high, exponent, numSegments, penSize, rotAngle)
    dim_local pi2, d2r, puissance, inc,x1,y1,x2,y2,limit,theta,cosTheta, sinTheta
    dim_local cs,sn, rotx,roty
    pi2 = 8*Atn(1) : d2r = pi2/360

    If penSize < 1 Or penSize > 20 Then penSize = 1
    2d_pen_width penSize

    If exponent < .15 Then exponent = .15
    If exponent > 99 Then exponent = 99
' Eviter la division par zéro
    If exponent = 0
        puissance = 0
    Else
        puissance = 2/exponent-1
    End_If
' Garder l'angle de rotation  entre 0 et 360°
    rotAngle = wrap_value(rotAngle)
' Conversion de degrés en radians
    inc = 360/numSegments * d2r
' Convertir rotAngle de degrés en radians
    rotAngle = d2r * rotAngle
    If rotAngle = 0
' Calculer les coordonnées du 1er point de la ligne
       x1 = wide + centerX : y1 = centerY : 2d_poly_from x1,y1
       limit = pi2 + inc
       For theta = inc To limit STEP inc
' Calculer les coordonnées x,y  du point suivant
           cosTheta = Cos(theta) : sinTheta = Sin(theta)
           x2 = wide * cosTheta * power(Abs(cosTheta),puissance) + centerX
           y2 = high * sinTheta * power(Abs(sinTheta),puissance) + centerY
' Tracer la ligne depuis la dernière position (x1,y1) jusqu'à x2,y2
           2d_poly_to x2,y2
       Next theta
    Else
' Exécutez une rotation sur la Superellipse
       cs = Cos(rotAngle) : sn = Sin(rotAngle)
       rotX = wide : x1 = cs * rotX + centerX : y1 = sn * rotX + centerY
       2d_poly_from x1,y1
       limit = pi2 + inc
       For theta = inc To limit STEP inc
           cosTheta = Cos(theta) : sinTheta = Sin(theta)
           rotX = cosTheta * wide * power(Abs(cosTheta),puissance)
           rotY = sinTheta * high * power(Abs(sinTheta),puissance)
           x2 = cs * rotX - sn * rotY + centerX
           y2 = sn * rotX + cs * rotY + centerY
           2d_poly_to x2,y2
        Next theta
    End_If
END_SUB
rem ============================================================================
SUB DrawSpiral()
    dim_local pen,wide, high, r,g,b,cr(15),cg(15),cb(15),colr,i,inc
    color 0,0,0,0 : wide = 0 : high = 0 : r = 255: g = 0: b = 0
    For i = 1 To 15
        cr(i) = r : cg(i) = 0 : cb(i) = b : r = r - 17 : b = b + 17
    Next i
    inc = 1 : colr = 1 : pen = 1
    2d_pen_color cr(colr),cg(colr),cb(colr)
    For i = 0 To 720 STEP 5
        pen = pen + .05 : wide = wide + 3.75 : high = high + 2.5
        SuperEllipse(400,300, wide, high,5,18, pen,i)
        colr = colr + inc
        If colr > 15 Then colr = 15: inc = -1
        If colr < 1 Then colr = 1: inc = 1
        2d_pen_color cr(colr),cg(colr),cb(colr)
    Next i
    show 30
END_SUB
rem ============================================================================
Papydall-Admin
Papydall-Admin
Admin

Messages : 93
Réputation : 0
Date d'inscription : 08/09/2015
Age : 73
Localisation : MOKNINE (Tunisie)

https://papydall-panoramic.forumarabia.com

Revenir en haut Aller en bas

Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum