Forum de Programmation en langage PANORAMIC
Rechercher
 
 

Résultats par :
 


Rechercher Recherche avancée

Mots-clés

Derniers sujets
» Automate cellulaire : simulation de feu de forêt
Sam 9 Déc - 2:56 par Admin

»  Exécution des fichiers CPL
Mar 28 Nov - 19:18 par Admin

» Quelques fonctions de la user32.dll
Sam 25 Nov - 1:43 par Admin

» Copier vers une FORM définie l’image de fond du bureau.
Ven 24 Nov - 2:38 par Admin

»  Capture d’écran de Windows
Ven 17 Nov - 0:27 par Admin

»  Courbes de Bézier cubiques
Mer 8 Nov - 2:28 par Admin

» Harmonographe
Mer 8 Nov - 2:22 par Admin

»  Simuler l’appui d'une touche ou combinaison de touches
Sam 16 Sep - 13:58 par Admin

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

Décembre 2017
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
25262728293031

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 : 75
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