Forum de Programmation en langage PANORAMIC
Rechercher
 
 

Résultats par :
 


Rechercher Recherche avancée

Mots-clés

Derniers sujets
» Régalez-vous !
Sam 29 Juil - 11:42 par Admin

» Les bienfaits du rire
Ven 7 Juil - 0:04 par Admin

» Derrière chaque beau parleur se cache un magnifique menteur
Ven 7 Juil - 0:01 par Admin

» Carré magique d’ordre 3 à 99 et plus si affinité !
Mer 5 Juil - 3:21 par Admin

» Dessine-moi une étoile
Mar 4 Juil - 17:32 par Admin

»  Equation paramétrique de la super-ellipse
Mar 4 Juil - 17:29 par Admin

»  Exécution des fichiers CPL
Sam 1 Juil - 14:01 par Admin

» Un papa à la page.
Ven 30 Juin - 15:01 par Admin

»  Exemple de menu
Lun 26 Juin - 22:36 par Admin

Août 2017
LunMarMerJeuVenSamDim
 123456
78910111213
14151617181920
21222324252627
28293031   

Calendrier Calendrier


Super Ellipse

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

Super Ellipse

Message par Admin le 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 ============================================================================

_________________
Invité, merci d'être passé par ici.
avatar
Admin
Admin

Messages : 66
Date d'inscription : 08/09/2015
Age : 67
Localisation : MOKNINE (Tunisie)

Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com

Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

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