Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
Sujet: Pour le plaisir des yeux. Dim 28 Mai 2017 - 2:44
Code:
rem ============================================================================ rem Esthétique polaire rem Par Papydall rem ============================================================================ dim xc1,yc1,xc2,yc2,xc3,yc3,xc4,yc4,xc5,yc5,r,rsur2,a,x,y,c$ dim c(360), s(360) : ' Tableaux des sinus / cosinus pour accélérer les calculs degrees : ' on travaille en degrés for a = 0 to 360 : c(a) = cos(a) : s(a) = sin(a) : next a full_space 0
color 0,100,50,100 : 2d_pen_color 255,255,255 alpha 10 : top 10,50 : left 10,50 : font_bold 10 : font_name 10,"tahoma" font_color 10,255,255,0 : font_size 10,14 caption 0,"L'ESTHETIQUE POLAIRE ... PAR PAPYDALL ... <ESC> POUR ARRETER ..." c$ = "Veuillez patienter ... Vous ne serez pas déçu(e)s, je l'espère ... <ESC> Pour arrêter ! "
for r = 1 to xc1 : ' step 2 ou 10 pour les impatients rsur2 = r / 2 caption 10,c$ + str$(r) + " / " + str$(xc1) for a = 0 to 360 x = rsur2 * (1-c(a)) * c(a) : y = rsur2 * (1-c(a)) * s(a) 2d_pen_color mod(abs(a+x),255),mod(abs(a-r),255), mod(abs(r-y),255) 2d_point xc1+x,yc1+y : 2d_point xc1-x,yc1+y ' ----------------------------------------------------------------------------- x = rsur2 * (1+c(a)) * c(a) : y = rsur2 * (1-c(a)) * s(a) 2d_point xc2+x,yc2+y : 2d_point xc2-x,yc2+y ' ----------------------------------------------------------------------------- x = rsur2 * (1+c(a)) * c(a) : y = rsur2 * (1-s(a)) * s(a) 2d_point xc3+x,yc3+y : 2d_point xc3-x,yc3+y ' ----------------------------------------------------------------------------- x = rsur2* (1-c(a)) * c(a) : y = rsur2 * (1-c(a)) * s(mod(r,360)) 2d_point xc4+x,yc4+y : 2d_point xc4-x,yc4+y 2d_point xc4+x,yc4-y : 2d_point xc4-x,yc4-y ' ----------------------------------------------------------------------------- x = rsur2* (1-c(a)) * s(a) : y = rsur2 * (1-s(a)) * s(a) 2d_point xc5+x,yc5+y : 2d_point xc5-x,yc5+y ' ----------------------------------------------------------------------------- display if scancode = 27 then terminate next a next r ' ------------------------------------------------------------------------------ repeat font_color 10, 255,0,0 caption 10,"ADMIREZ ..... C'EST MAGNIFIQUE !!! .... C'EST B O O O O O O !!!" pause 1000 : font_color 10,0,255,0 caption 10,"ADMIREZ ..... C'EST MAGNIFIQUE !!! .... C'EST B O O O O O O !!!" pause 1000 until scancode = 27 terminate rem ============================================================================
Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
Sujet: Re: Pour le plaisir des yeux. Dim 28 Mai 2017 - 3:56
Je dirais même plus que 'booooo', c'est magnifique
Bravo Papydall
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
Sujet: re Dim 28 Mai 2017 - 13:14
Bravo Papydall !
C' est magnifique.
jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
Sujet: +++ Dim 28 Mai 2017 - 14:01
C'est pas des vaisseaux Aliens ?
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
Sujet: Re: Pour le plaisir des yeux. Dim 28 Mai 2017 - 14:16
Ça dépend du lieu d’observation dans le cosmos où l’on se trouve ! Après tout, les mathématiques sont universelles : elles peuvent être utilisées par des Martiens verts !
Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
Sujet: Re: Pour le plaisir des yeux. Dim 28 Mai 2017 - 16:06
Merci Papydall,
Un peu d'art "programmatif" ne fais pas de mal en ces temps passionnés ....
A+
jean_debord
Nombre de messages : 1266 Age : 70 Localisation : Limoges Date d'inscription : 21/09/2008
Sujet: Re: Pour le plaisir des yeux. Lun 29 Mai 2017 - 9:06
Merci Papydall !
Si je ne m'abuse les équations sont de la forme :
x = r (1 + p.u) v
y = r (1 + q.w) z
avec p, q = +/- 1, u, v, w, z = cos(a) ou sin(a)
Donc (en éliminant les cas où a est fonction de r) cela nous donne 8 possibilités pour x et 7 pour y (on exclut le cas y = x qui donnerait une figure banale).
Soit au total 8 * 7 = 56 figures possibles.
Est-ce exact ?
Je pose la question dans le but de faire un programme en FBPano qui montrerait toutes les possibilités.
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
Sujet: Re: Pour le plaisir des yeux. Lun 29 Mai 2017 - 13:02
Bonjour tout le monde et merci pour l’intérêt porté à ce code « pour le plaisir des yeux ».
@jean_debord En effet, les équations sont de la forme que tu as indiquée et on peut distinguer 8*(8-1) = 56 configurations possibles qui donneraient 56 figures différentes pour le plaisir des yeux. Personnellement et comme vous l’avez constaté, je n’ai montré que 5 figures. Je ne suis pas avare, mais souvent j’ai la flemme et je fais le fainéant. Cela ne m’empêche pas d’être curieux pour contempler les cinquante et une figures restantes.
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
Sujet: Re: Pour le plaisir des yeux. Lun 29 Mai 2017 - 13:05
D'autres courbes
Code:
rem ============================================================================ rem Courbes polaires rem Par Papydall rem ============================================================================ Init() Trefle_Habenicht(5,150) : pause 2000 Rosace(300) : pause 2000 Coeur_Raphael_Laporte(200) : pause 2000 conchoide(50,8) : pause 2000 Tounesol(50,6) : pause 2000 Canabis(100) : pause 2000 Scarabee(100) : pause 2000 cls : caption 10,"... That's all for now folks ..." : pause 2000 : terminate end rem ============================================================================ SUB Init() dim x,y,xc,yc,t,p,rho : ' Variables globales full_space 0 : color 0,0,0,0 : ' Plein écran, fond noir xc = width(0)/2 : yc = height(0)/2-25 : ' Coordonnées du centre de l'écran p = pi/180 : ' Le step de l'angle en radian (équivalent 1°) alpha 10 : font_bold 10 : font_size 10,24 : font_color 10,255,0,0 END_SUB rem ============================================================================ ' Colorisation des feuilles SUB Color_Feuilles(n,r) for t = 2*pi/n to 2*pi+p step 2*pi/n x = xc + r/2 * cos(t) : y = yc +r/2 * sin(t) 2d_flood x,y,0,255,0 next t END_SUB rem ============================================================================ ' Trèfle de Habenicht : ' Equation polaire : rho = 1+cos(n*t)+ sin(n*t)*sin(n*t) ' Le paramètre n représente le nombre de feuilles du trèfle ' le paramètre r représente le rayon du cercle dans lequel est inclus le tracé SUB Trefle_Habenicht(n,r) caption 10,"Trèfle de Habenicht" ' Calcul de l'origine du tracé rho = 1+cos(n*t)+ sin(n*t) * sin(n*t) x = xc + rho * r * cos(t) : y = yc + rho * r * sin(t) 2d_pen_color 0,255,0 : 2d_poly_from x,y ' Tracé de la courbe for t = p to 2*pi step p rho = 1+cos(n*t)+ sin(n*t) * sin(n*t) x = xc + rho * r * cos(t) : y = yc + rho * r * sin(t) 2d_poly_to x,y next t ' Colorisation des feuilles Color_Feuilles(n,r) ' Tracé du centre du trèfle 2d_pen_color 0,0,0 : 2d_circle xc,yc,10: 2d_flood xc,yc,255,255,255 END_SUB rem ============================================================================ ' Rosace à 8 feuilles ' Equation polaire : rho = r*cos(4*t) ' Le paramètre r représente le rayon du cercle dans lequel est inclus le tracé SUB Rosace(r) caption 10,"Rosace à 8 feuilles" cls rho = r*cos(4*t) x = xc + rho*cos(t) : y = yc + rho*sin(t) 2d_pen_color 0,255,0 : 2d_poly_from xc+r,yc
for t = p to 2*pi step p rho = r*cos(4*t) x = xc + rho*cos(t) : y = yc + rho*sin(t) 2d_poly_to x,y next t Color_Feuilles(8,r) 2d_pen_color 0,0,0 : 2d_circle xc,yc,10: 2d_flood xc,yc,255,255,255 END_SUB rem ============================================================================ ' Coeur de Raphaël Laporte : ' Equation paramétrique ' x = power(sin(t),3) ' y = cos(t) + power(cos(t),4) SUB Coeur_Raphael_Laporte(r) dim_local i,j caption 10," Coeur de Raphaël Laporte" cls x = power(sin(t),3) : y = cos(t) + power(cos(t),4) 2d_pen_color 255,0,0 : 2d_poly_from xc+r*x,yc+r*y for j = 1 to 5 for i = 2 to 1 step -0.5 cls for t = p to 2*pi step p x = power(sin(t),3) : y = cos(t) + power(cos(t),4) 2d_poly_to xc+i*r*x,yc+r*y next t 2d_flood xc,yc+5,255,0,0 : pause 300 next i next j END_SUB rem ============================================================================ ' conchoïdes de Rosace : ' Equation polaire : rho = r*(1+e*cos(n*t)) ' avec e > 1 donnent d'assez crédibles fleurs. ' n : nombre de feuilles SUB conchoide(r,n) dim_local e caption 10,"conchoïdes de Rosace" 2d_pen_color 0,255,0 for e = 0.1 to 5 step 0.1 cls rho = r*(1+e*cos(n*t)) x = xc + rho*cos(t) : y = yc + rho*sin(t) : 2d_poly_from x,y for t = 0 to 2*pi step p rho = r*(1+e*cos(n*t)) x = xc + rho*cos(t) : y = yc + rho*sin(t) : 2d_poly_to x,y next t : pause 500
next e END_SUB rem ============================================================================ ' Une variante : ' rho = r*(1+e*abs(cos(5*t))) avec e < 1 et le cercle de rayon r SUB Tounesol(r,n) dim_local e caption 10,"Le tournesol" 2d_pen_color 0,255,0 for e = 0.0 to 5 step 0.5 cls rho = r*(2+e*abs(cos(n*t))) x = xc + rho*cos(t) : y = yc + rho*sin(t) : 2d_poly_from x,y for t = 0 to 2*pi step p rho = r*(2+e*abs(cos(n*t))) x = xc + rho*cos(t) : y = yc + rho*sin(t) : 2d_poly_to x,y
next t 2d_flood xc,yc,255,255,0 : 2d_circle xc,yc,r 2d_flood xc,yc,255,255,255 : pause 1000 next e END_SUB rem ============================================================================ ' La feuille de canabis ' rho = (1+sin(t))*(1+0.9*cos(8*t))*(1+0.1*cos(24*t)) SUB Canabis(r) cls : 2d_pen_color 0,255,0 : caption 10,"La feuille de canabis" rho = r*(1+sin(t))*(1+0.9*cos(8*t))*(1+0.1*cos(24*t)) x = xc + rho*cos(t) : y = yc + rho*sin(t) : 2d_poly_from x,y for t = p to 2*pi step p rho = r*(1+sin(t))*(1+0.9*cos(8*t))*(1+0.1*cos(24*t)) x = xc + rho*cos(t) : y = yc + rho*sin(t) : 2d_poly_to x,y next t : pause 500 END_SUB rem ============================================================================ ' La courbe du scarabée ' rho = (5*a/3)*cos(2*t)-a*cos(t)
SUB Scarabee(r) cls : 2d_pen_color 0,255,0 : caption 10,"La courbe du scarabée" rho =r* (10/3)*cos(2*t)-2*cos(t) x = xc + rho*cos(t) : y = yc + rho*sin(t) : 2d_poly_from x,y for t = 0 to 2*pi step p rho = r*(10/3)*cos(2*t)-2*cos(t) x = xc + rho*cos(t) : y = yc + rho*sin(t) : 2d_poly_to x,y next t : pause 500 END_SUB rem ============================================================================
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
Sujet: Re: Pour le plaisir des yeux. Lun 29 Mai 2017 - 13:27
Et encore ...
Code:
rem ============================================================================ rem Courbes en coordonnées polaires rem Par Papydall rem ============================================================================ ' On s'intéresse ici aux fonctions de la forme : rem _______________________________________________ rem | | rem | r = a + b * cos(i*t) + c * power(sin(k*t),m) | rem |_______________________________________________|
' Avec : a,b,c : réels ; i,k,m : entiers positifs rem ============================================================================ rem &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& rem ============================================================================ Init() Draw()
end
rem ============================================================================ rem &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& rem ============================================================================ SUB Init() dim x0,y0,p width 0,900 : height 0,700 picture 10 : width 10,width(0)-100 : height 10,height(0)-100 top 10,20 : left 10,50 : 2d_target_is 10 : print_target_is 10 color 10,150,100,50 : 2d_pen_color 255,255,0 x0 = width(10)/2 : y0 = height(10)/2 : p = 1000 font_bold 10 : font_name 10,"arial black" : font_size 10,14 font_color 10, 255,255,0 : 2d_fill_color 150,100,50 caption 0,"L'esthétique polaire" END_SUB rem ============================================================================ rem &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& rem ============================================================================ ' r = a + b * cos(i*t) + c * power(sin(k*t),m) ' Polaire(x0,y0,size,a,b,c,i,k,m) SUB Draw() Polaire(x0,y0,150,0,1,1,2,4,1) : print " r = cos(2*t) + sin(4*t)" : pause p Polaire(x0,y0,100,0,1,2,1,10,1) : print " r = cos(t) + 2*sin(10*t)" : pause p
Polaire(x0,y0,050,2,1,2,10,5,1) : print " r = 2+cos(10*t) + 2*sin(5*t)" : pause p Polaire(x0,y0,050,1,1,2,10,20,1) : print " r = 1+cos(10*t) + 2*sin(20*t)" : pause p
Polaire(x0,y0,050,2.1,1,1,14,196,1) : print " r = 2.1+cos(14*t) + sin(196*t)" : pause p Polaire(x0,y0,050,.7,2.6,1.3,1,90,3) : print " r = 0.7+2.6*cos(t) + 1.3*power(sin(90*t),3)" : pause p
Polaire(x0,y0,030,5,4.6,1.4,1,9,3) : print " r = 5+4.6*cos(t) + 1.4*power(sin(9*t),3)" : pause p Polaire(x0,y0,060,1.3,1.4,1,11,30,1) : print " r = 1.3+1.4*cos(11*t) + sin(30*t)" : pause p Polaire(x0,y0,100,1.6,1.1,1,2,5,3) : print " r = 1.6+1.1*cos(2*t) + power(sin(5*t),3)" : pause p
' Coube du Diable : rem ____________________________________________________________ rem | | rem | r = sqr(abs((3-2*tan(t)*tan(t) ) / ( 1- tan(t)*tan(t)))) | rem |____________________________________________________________|
Courbe_Du_Diable(x0,y0,100)
END_SUB rem ============================================================================ rem &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& rem ============================================================================ ' x0,y0 : coordonnées du centre de la figure ' size : facteur agissant sur la taille de la figure ' a,b,c : réels ' i,k,m : entiers positifs SUB Polaire(x0,y0,size,a,b,c,i,k,m) dim_local r,t,x,y degrees : ' on travaille avec les degrés au lieu des radians color 10,150,100,50 : 2d_pen_color 255,255,0 2d_poly_from x0 + size*(a+b),y0 for t = 0 to 360 r = a + b * cos(i*t) + c * power(sin(k*t),m) x = x0 + size * r * cos(t) : y = y0 - size * r * sin(t) 2d_poly_to x,y display next t print_locate 20,20 END_SUB rem ============================================================================ rem &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& rem ============================================================================ SUB Courbe_Du_Diable(x0,y0,size) dim_local r,t,x,y degrees : ' on travaille avec les degrés au lieu des radians color 10,150,100,50 : 2d_pen_color 255,255,0 2d_poly_from x0+size*sqr(3) ,y0 for t = 0.0001 to 361 : ' Pour éviter la valeur de l'infini pour tan r = sqr(abs((3-2*tan(t)*tan(t)) / (1- tan(t)*tan(t)))) x = x0 + size * r * cos(t) : y = y0 - size * r * sin(t) 2d_poly_to x,y display next t font_size 10,12 print_locate 300,20 : print "Courbe du Diable" print_locate 200,40 : print "r = sqr(abs((3-2*tan(t)*tan(t)) / (1- tan(t)*tan(t))))"
END_SUB rem ============================================================================ rem &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& rem ============================================================================
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
Sujet: Re: Pour le plaisir des yeux. Lun 29 Mai 2017 - 13:30
Pour terminer ...
Code:
rem ============================================================================ ' DES MATHS POUR L'ESTHETIQUE DES COURBES ' PAR PAPYDALL rem ============================================================================
END REM ============================================================================ SUB Init() dim x,y,t,xc,yc,i,h,w,r
full_space 0 : h = height(0) : w = width(0)-5 : color 0,255,255,255 caption 0,"DES MATHS POUR L'ESTHETIQUE DES COURBES" for i = 1 to 5 picture i : top i,35-35 : width i, w/5-15 : height i,h/3-20 left i,width(i) *(i-1)+12*(i) next i for i = 6 to 10 picture i : top i,35-25+height(i-1) : width i, w/5-15 : height i,h/3-20 left i,width(i) *(i-6)+12*(i-5) next i for i = 11 to 15 picture i : top i,35-15+2*height(i-1) : width i, w/5-15 : height i,h/3-20 left i,width(i) *(i-11)+12*(i-10) next i xc = width(1)/2-8 : yc = height(1)/2-17 for i = 1 to 15 color i,00,128,128 : 2d_pen_color 255,255,0 : 2d_target_is i next i 2d_pen_color 255,255,0
END_SUB REM ============================================================================ rem &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& rem ============================================================================ SUB Araignee() degrees for t = 0 to 360 step .1 x = 60*sin(5*t)*cos(t)/cos(4*t) y = 60*sin(5*t)*sin(t)/cos(4*t) 2d_point xc+x,yc+y next t display END_SUB rem ============================================================================ SUB Mouche() dim_local p,s radians : p = pi/180 : s = 50 for t = 0 to 2*pi step p r = 2*sin(t-3*pi/4)+cos(4*t) x = s*r*cos(t) : y = s*r*sin(t) if t = 0 then 2d_poly_from xc+x,yc-y 2d_poly_to xc+x,yc-y next t display END_SUB rem ============================================================================ SUB Moucheron() dim_local p,s radians : p = pi/180 : s = 60 for t = 0 to 2*pi step p r = (sin(4*t-pi/2) + cos(2*t-pi/4))/2 x = s*r*cos(t) : y = s*r*sin(t) if t = 0 then 2d_poly_from xc+x,yc-y 2d_poly_to xc+x,yc-y next t display END_SUB rem ============================================================================ SUB Papillon() dim_local p,s radians : p = pi/180 : s = 30 for t = 0 to 2*pi step p r = sin(7*t)-1-3*cos(2*t) x = s*r*cos(t) : y = s*r*sin(t) if t = 0 then 2d_poly_from xc+x,yc-y 2d_poly_to xc+x,yc-y next t display END_SUB rem ============================================================================ SUB Combat_De_Taureaux() dim_local p,s,epsilon radians : p = pi/180 : s = 40 : epsilon = power(10,0-10) for t = epsilon to 2*pi step p r = 2/tan(t) + sin(5*t) x = s*r*cos(t) : y = s*r*sin(t) if t = 0 then 2d_poly_from xc+x,yc-y 2d_poly_to xc+x,yc-y next t display END_SUB rem ============================================================================ SUB Glands() dim_local p,s radians : p = pi/180 : s = 40 for t = 0 to 2*pi step p r = 2*sin(3*t) - cos(6*t) x = s*r*cos(t) : y = s*r*sin(t) if t = 0 then 2d_poly_from xc+x,yc-y 2d_poly_to xc+x,yc-y next t display END_SUB rem ============================================================================ SUB Champignon_Vesse_De_Loup() dim_local p,s radians : p = pi/180 : s = 30 for t = 0 to 2*pi step p r = 0-sin(5*t) - 4*sin(t) x = s*r*cos(t) : y = s*r*sin(t) if t = 0 then 2d_poly_from xc+x,yc-y-2*s 2d_poly_to xc+x,yc-y-2*s next t display END_SUB rem ============================================================================ SUB Champignon_Rose() dim_local p,s radians : p = pi/180 : s = 30 for t = 0 to 2*pi step p r = 0-2*sin(5*t) - 4*sin(t) x = s*r*cos(t) : y = s*r*sin(t) if t = 0 then 2d_poly_from xc+x,yc-y-2*s 2d_poly_to xc+x,yc-y-2*s next t display END_SUB rem ============================================================================ SUB Champignon_Amanite() dim_local p,s radians : p = pi/180 : s = 30 for t = 0 to 2*pi step p r = 0-2*sin(5*t) - 3*sin(t) x = s*r*cos(t) : y = s*r*sin(t) if t = 0 then 2d_poly_from xc+x,yc-y-2*s 2d_poly_to xc+x,yc-y-2*s next t display END_SUB rem ============================================================================ SUB Champignon_Jeune_Cep() dim_local p,s,x0,y0 radians : p = pi/180 : s = 30 for t = 1.78 to 4.5 step p r = sin(6*t) - 4*sin(t) x = s*r*cos(t) : y = s*r*sin(t) if t = 1.78 then x0 = xc+x : y0 = yc-y-2*s : 2d_poly_from x0,y0 2d_poly_to xc+x,yc-y-2*s next t 2d_poly_to x0,y0 display END_SUB rem ============================================================================ SUB Chapeau_De_Gamine() dim_local p,s radians : p = pi/180 : s = 30 for t = 0 to 2*pi step p r = 0-4*cos(cos(2*t) + sin(3*t)) x = s*r*cos(t) : y = s*r*sin(t) if t = 0 then 2d_poly_from xc+x,yc-y+s 2d_poly_to xc+x,yc-y+s next t display END_SUB rem ============================================================================ SUB Coupe_Coupe() dim_local p,s radians : p = pi/180 : s = 30 for t = 0 to 2*pi step p r = 4*cos(cos(4*t)/cos(6*t)) x = s*r*cos(t) : y = s*r*sin(t) if t = 0 then 2d_poly_from xc+x,yc-y+s 2d_poly_to xc+x,yc-y+s next t display END_SUB rem ============================================================================ SUB Applique_De_Porte() dim_local p,s radians : p = pi/180 : s = 40 for t = 0 to 2*pi step p r = cos(4*t) - 2*cos(2*t) x = s*r*cos(t) : y = s*r*sin(t) if t = 0 then 2d_poly_from xc+x,yc-y+s/2 2d_poly_to xc+x,yc-y+s/2 next t display END_SUB rem ============================================================================ SUB Bonnet_D_Ane() dim_local p,s radians : p = pi/180 : s = 40 for t = 1.59 to 4.74 step p r = 3*sin(t) + sin(4*t+sin(3*t)) x = s*r*cos(t) : y = s*r*sin(t) if t = 1.59 then 2d_poly_from xc+x,yc-y+2*s 2d_poly_to xc+x,yc-y+2*s next t display END_SUB rem ============================================================================ SUB Tete_D_Arlequin() dim_local p,s radians : p = pi/180 : s = 20 for t = 0.7 to 5.6 step p x = 3.5*sin(t)-3*sin(3*t) : y = 3.5*cos(t)-3*cos(4*t) if t = 0.7 then 2d_poly_from xc+x*s,yc-y*s 2d_poly_to xc+x*s,yc-y*s next t display END_SUB rem ============================================================================ rem &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& rem ============================================================================
jean_debord
Nombre de messages : 1266 Age : 70 Localisation : Limoges Date d'inscription : 21/09/2008
Sujet: Re: Pour le plaisir des yeux. Mar 30 Mai 2017 - 9:11
Voilà encore une belle brochette de courbes, et de belles possibilités d'adaptation...
Et peut-être même une version en nombres complexes, pour faire des fractales ?
En considérant r comme une constante (pour l'ensemble de Julia) ou un paramètre (pour l'ensemble de Mandelbrot) et en itérant sur t on doit y arriver, tout au moins dans les cas les plus simples.
Je vais y réfléchir.
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
Sujet: Re: Pour le plaisir des yeux. Mar 30 Mai 2017 - 12:23
Puisque c’est ainsi, je vous propose d’autres formes pouvant être adaptées en FBPano.
Bernley fern:
Code:
rem ============================================================================ rem Bernsley fern rem ============================================================================ caption 0, "Fougère de Bernsley .... <ESC> pour arrêter ..." height 0,screen_y Bernsley_Fern(height(0)-50) caption 0,"Terminé" end rem ============================================================================ SUB Bernsley_Fern(hauteur) dim_local x,y,xn,yn,n,r dim_local f : f = hauteur / 10.6 dim_local offset_x : offset_x = int(hauteur/4) - int(hauteur/40) color 0,0,0,0 : 2d_pen_color 0,255,0 for n = 1 to hauteur*100 r = int(rnd(100)) if r <= 84 xn = 0.85 * x + 0.04 * y yn = -0.04 * x + 0.85 * y + 1.6 else if r <= 91 xn = 0.2 * x - 0.26 * y yn = 0.23 * x + 0.22 * y + 1.6 else if r <= 98 xn = -0.15 * x + 0.28 * y yn = 0.26 * x + 0.24 * y + 0.44 else xn = 0 yn = 0.16 * y end_if end_if end_if x = xn : y = yn 2d_point offset_x + x * f, hauteur -y*f display if scancode = 27 then terminate next n END_SUB rem ============================================================================
Plants:
Code:
rem ============================================================================ rem Plants rem By Papydall rem Mai 2017 rem ============================================================================ Init() Plants() caption 0,"Termine" end rem ============================================================================ SUB Init() dim ss : ss = 20 dim sang1(ss), xx(ss), yy(ss) dim xpos, ypos dim counter, gen, st dim a$, b$, a0$, a1$ dim k, s, s2, ang1 dim frw, cl, i, ang, sang, an, x, y, x1, y1, xp, yp,xp1, yp1, ran1, ran2 dim zx, zy degrees full_space 0 picture 10 : width 10, width_client(0) - 100 : height 10, height_client(0) - 100 top 10,50 : left 10,50 : 2d_target_is 10 : color 10,0,0,0 xpos = width(10) /2 : ypos = height(10) - 100 caption 0, "<ESC> pour terminer ..." END_SUB rem ============================================================================ SUB Plants() repeat b$ = "" : a$ = "" : a0$ = "" : a1$ = "" st = 0 gen = 1 + mod(counter,13) counter = counter + 1 select gen case 1 k = 6 : s = 1.5 : ang1 = 8 A$ = "0" : A1$ = "11" : A0$ = "1##10!+0!-0" case 2 k = 6 : s = 1.5 : ang1 = 8 A$ = "0" : A1$ = "11" : A0$ = "1#+0!1#-0!0" case 3 k = 5 : s = 3.0 : ang1 = 16 A$ = "1" : A1$ = "11-#-1+0+0!+#+1-0-0!" : A0$ = "0" case 4 k = 5 : s = 3.0 : ang1 = 10 A$ = "1" : A1$ = "1#+0!#=0!1#+1+-0!#-1-+0!" : A0$ = "0-0++0" case 5 k = 5 : s = 3.0 : ang1 = 16 A$ = "1" : A1$ = "11-#-1+0+0!+#+1-0-0!" : A0$ = "#0-0++0!" case 6 k = 4 : s = 2.5 : ang1 = 10 A$ = "1" : A1$ = "1#+10!1#-10!1" : A0$ = "#0-0++0!" case 7 k = 4 : s = 1.75 : ang1 = 10 A$ = "1" : A1$ = "1#+1-10!1#-1+10!10" : A0$ = "#0-0++0!" case 8 k = 4 : s = 3.0 : ang1 = 10 A$ = "1" : A1$ = "11#+1-1+10!#-1+1-10!" : A0$ = "#0-0++0!" case 9 k = 4 : s = 3.5 : ang1 = 10 A$ = "1" : A1$ = "11#+1+1-#0-0++0!!0#-1-1+#0-0++0!!" : A0$ = "#0-0++0!" case 10 k = 4 : s = 3.6 : ang1 = 10 A$ = "#+1-1!#-1+1!" : A1$ = "1#-1+0!1#+1-0!0" : A0$ = "#0-0++0!" case 11 k = 3 : s = 2.75 : ang1 = 8 A$ = "1" : A1$ = "11#+10-10+10-10!1#-10+10-10+10!0" : A0$ = "0" case 12 k = 3 : s = 4.0 : ang1 = 20 A$ = "1" : A1$ = "1#-10-10-10!1#+10+10+10!1#10!" : A0$ = "0" case 13 k = 4 : s = 2.0 : ang1 = 8 A$ = "0" : A1$ = "111" : A0$ = "11#+0!#++0!#+++0!#-0!#--0!#---0!0" end_select String_Generator() until counter = 13 END_SUB rem ============================================================================ SUB String_Generator() for frw = 1 to k cl = len(A$) for i = 1 to cl if mid$(a$,i,1) = "1" b$ = b$ + a1$ else if mid$(a$,i,1) = "0" b$ = b$ + a0$ else b$ = b$ + mid$(a$,i,1) end_if end_if next i a$ = b$ : b$ = "" ang = 360 / ang1 x = 0 : y = 0 : an = 0 : cl = len(a$) for i = 1 to cl if mid$(a$,i,1) = "1" ran1 = rnd(1) : ran2 = rnd(1) s2 = s + 0.5 * (ran1-ran2) * s ran1 = rnd(1) : ran2 = rnd(1) an = an + 5.0 * (ran1-ran2) sang = an x1 = s2 * sin(an) + x : y1 = s2 * cos(an) + y xp = 2 * x + xpos : yp = ypos - 2 * y xp1 = 2 * x1 + xpos : yp1 = ypos - 2 * y1 2d_pen_color 0,192,0 : 2d_line xp,yp,xp1,yp1 x = x1 : y = y1 else if mid$(a$,i,1) = "0" zx = sin(an) : zy = cos(an) x1 = zx * s + x : y1 = zy * s + y xp = 2 * x + xpos : yp = ypos -2 * y xp1 = 2 * x1 + xpos : yp1 = ypos - 2 * y1 2d_pen_color 255,128,0 : 2d_line xp,yp,xp1,yp1 x1 = 0.25 * zx * s + x : y1 = 0.25 * zy * s + y xp1 = 2 * x1 + xpos : yp1 = ypos - 2 * y1 2d_pen_color 255,0,0 : 2d_line xp,yp,xp1,yp1 else if mid$(a$,i,1) = "-" ran1 = rnd(1) : ran2 = rnd(1) an = an - ang - 10 *(ran1-ran2) : sang = an else if mid$(a$,i,1) = "+" ran1 = rnd(1) : ran2 = rnd(1) an = an + ang + 10*(ran1-ran2) : sang = an else if mid$(a$,i,1) = "#" st = st + 1 : sang1(st) = sang xx(st) = x : yy(st) = y else if mid$(a$,i,1) = "!" x = xx(st) : y = yy(st) an = sang1(st) sang = an st = st-1 end_if end_if end_if end_if end_if end_if display if scancode = 27 then caption 0, "Arrêté par l'utilisateur ! " :end next i next frw END_SUB rem ============================================================================
Butterfly effect:
Code:
rem ============================================================================ rem Butterfly effect : Lorens equations rem Adaptation d’un code en Yabasic rem Papydall Mai 2017 rem ============================================================================ Init() Boucle() end rem ============================================================================ SUB Init() dim xa(2), ya(2), za(2) dim c1, dt, a, b, c, i, x, y, z, x1, y1, z1, xd, yd
picture 10 : width 10,width(0)-50 : height 10,height(0)-60 : top 10,10: left 10,20 2d_target_is 10 : color 10,0,0,0 : caption 0,"Butterfly effect .... <ESC> pour arrêter ..."
END_SUB rem ============================================================================ SUB Boucle() repeat for i = 0 to 1 x = xa(i) : y = ya(i) : z = za(i) x1 = x-a*x*dt+a*y*dt y1 = y+b*x*dt-y*dt-z*x*dt z1 = z-c*z*dt+x*y*dt x = x1 : y = y1 : z = z1 xd = y-x*c1 : yd = z+x*c1
if i = 1 draw(xd,yd,128) else draw(xd,yd,255) end_if xa(i) = x : ya(i) = y : za(i) = z next i until scancode = 27
END_SUB rem ============================================================================ ' Draw a shiny ball SUB Draw(xd,yd,cl) dim_local i1,j1,c,c1,c2,d1,d2,i,k c1 = 19.3 : c2 = width(10)/2 d1 = 11.0 : d2 = 392.0 k = 10 i1 = c1*xd+c2 j1 = 0-d1*yd+d2 for i = 127 to 255 step 16 c = 0.09*(10-k) 2d_pen_color cl,i,i : 2d_fill_color cl,i,i 2d_circle i1+c,j1+c,k k = k - 1 next i END_SUB rem ============================================================================
Triangle de Sierpinski:
Code:
rem ============================================================================ rem Triangle de Sierpinski rem ============================================================================
dim p(3,2), px, py, point% p(1,1)=320 p(1,2)=0
p(2,1)=640 p(2,2)=512
p(3,1)=0 p(3,2)=512
px=int(rnd(640)) py=int(rnd(512))
width 0,700 : height 0,600 : color 0,0,0,0 2d_pen_color 255,0,0 : 2d_fill_color 255,0,0 caption 0,"Triangle de Sierpinski ... <ESC> pour arrêter ..." repeat point%=max(min(3,int(rnd(3)+1)),1) px=int(((p(point%,1)-px)*0.5)+px) py=int(((p(point%,2)-py)*0.5)+py) 2d_circle px+20,py+20,1 : display until scancode = 27 rem ============================================================================
Modèle de Mira:
Code:
rem ============================================================================ rem Modèle de Mira rem ============================================================================ dim a,b,n,x,y,z,w,xc,yc,zoom,maxiter x = 15 : y = 0 a = 0.7 : b = 0.9998 : zoom = 15 ' a = 0.8 : b = 0.999 : zoom = 20 ' a = 0.85 : b = 0.99978 : zoom = 20 ' a = 0.80147 : b = 0.9987 : zoom = 20 ' a = -0.48 : b = 0.93 : zoom = 12
w = a*x+(1-a)*2*x*x/(1+x*x) picture 10 : full_space 10 : 2d_target_is 10 : color 10,0,0,0 xc = width(10)/2-30 : yc = height(10)/2 : maxiter = 10000 for n = 1 to maxiter caption 0,"Itération : " + str$(n) + " / " + str$(maxiter) + " ... <ESC> pour arrêter ..." z = x : x = b*y+w : w = a*x+(1-a)*2*x*x/(1+x*x) : y = w-z ' 2d_pen_color mod(n,255),255-mod(n,255), abs(mod(n,255)-255) 2d_pen_color 255,255,0 2d_point xc+x*zoom,yc-y*zoom : display if scancode = 27 then terminate next n caption 0,"Terminé !" rem ============================================================================
Attracteur de Ikéda:
Code:
rem ============================================================================ rem Attracteur de Ikéda rem ============================================================================ rem _________________________________________________ rem | | rem | Xn+1 = R + C2 * (Xn * cos(tau) - Yn * sin(tau) | rem | Yn+1 = C2 * (Xn * sin(tau) + Yn * cos(tau) | rem | Avec tau = C1 - C3 / (1 + Xn * Xn + Yn * Yn) | rem |_________________________________________________| rem rem On prendra : rem R = 1 rem C1 = 0.4 rem C2 = 0,9 rem C3 = 6 rem Essayez d’autres valeurs pour obtenir des plus beaux attracteur rem ============================================================================ dim r,c1,c2,c3,x,y,z,tau,i,xc,yc,zoom, maxiter r = 1 : c1 = 0.4 : c2 = 0.9 : c3 = 6 : ' On peut essayer d'autres valeurs picture 10 : full_space 10 : 2d_target_is 10 : color 10,0,0,0 : 2d_pen_color 255,255,0 xc = width(10)/4 : yc = height(10)/3 : zoom = 100 : maxiter = 6000 for i = 1 to maxiter z = x : tau = c1-c3/(1+z*z+y*y) x = r+c2*(z*cos(tau)-y*sin(tau)) y = c2*(z*sin(tau)+y*cos(tau)) 2d_point xc+2*zoom*x,yc-zoom*y : display caption 0,"Attracteur de Ikéda : Itération : " + str$(i) + " / " + str$(maxiter) + " ... <ESC> pour arrêter" if scancode = 27 then terminate next i caption 0,"Attracteur de Ikéda : Terminé" rem ============================================================================
Ouf_ca_passe
Nombre de messages : 285 Age : 76 Localisation : Villeneuve d'Ascq (59-Dpt du NORD) France Date d'inscription : 21/12/2015
Sujet: Sémantique Mer 31 Mai 2017 - 8:46
Bonjour les PANORAMICIEN(NE)S et FBPanistes
1) Un senior peut-il expliquer au béotien que je suis la différence entre constantes, paramètres, variables (et j'en oublie sûrement) et comment les déclarer en PANORAMIC et en FBPano ?
Autrefois, il y a très très longtemps, je n 'utilisais que DIM pour déclarer tout type de variable en Basic GFA. (%,$). De même que je suis pas sûr de comprendre les EXIT qui n'existaient pas à l'époque pas plus que les ELSEIF.
Exemple :
FOR index= variable1 TO variable2 STEP pas IF THEN ELSE IF THEN ELSE ENDIF ENDIF NEXT index
Y a-t-il un article dans LE MAG pour répondre à mes interrogations ?
2) Pour moi, les fractales sont des constructions géométriques que l'on retrouve dans la nature et qui se reproduisent à différents niveaux d'observation. Je n'en sais pas plus.
3) A noter que je ne demande pas d'explication pour les nombres complexes puisque, par définition, ils seront trop complexes pour mon entendement.
Merci d'avance pour vos réponses.
jean_debord
Nombre de messages : 1266 Age : 70 Localisation : Limoges Date d'inscription : 21/09/2008
Sujet: Re: Pour le plaisir des yeux. Mer 31 Mai 2017 - 9:17
- Sur les procédures et les paramètres , regarde ici :
- Les constantes : ce sont des valeurs fixées une fois pour toutes et qui ne peuvent pas être modifiées lors du déroulement du programme, contrairement aux variables bien sûr.
Le mot-clé DIM ne déclare que des variables ; dans FBPano les constantes sont déclarées par le mot-clé CONST ou bien dans une énumération (ENUM) ; ces mots-clés n'ont pas d'équivalent en PANORAMIC, de sorte qu'on ne peut pas déclarer de constantes dans ce langage, seulement des variables.
- EXIT et ELSEIF : ces mots-clés (ainsi que CONST) étaient déjà présents dans le QuickBasic de Microsoft qui date des années 80 : ce ne sont donc pas des nouveautés. Les instructions EXIT_... permettent de sortir d'une boucle ou d'un sous-programme avant sa terminaison : il y a plusieurs variétés : EXIT_FOR, EXIT_SUB ... suivant les cas. A noter que ELSEIF existe dans FBPano mais pas dans PANORAMIC.
Pour plus de précision : voir la doc de FBPano
- Nombres complexes : le magazine "Tangente" vient de publier un numéro spécial sur le sujet : une bonne occasion de s'initier :
Certaines fractales sont définies par des suites de nombres complexes : l'exemple le plus connu est l'ensemble de Mandelbrot, sur lequel tu trouveras de nombreux tutoriels : j'en ai écrit moi-même toute une série pour PLM (http://panoramiclemag.pagesperso-orange.fr/). La partie "Programmation" est dépassée depuis l'arrivée de FBPano mais la partie théorique reste valable.
Bon courage !
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
Sujet: Re: Pour le plaisir des yeux. Mer 31 Mai 2017 - 14:30
Les nombres complexes:
Pourquoi i² = -1:
Bonne vision !
Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
Sujet: Re: Pour le plaisir des yeux. Mer 31 Mai 2017 - 19:39
Très instructives ces vidéos !
Mais j'ai quand même eu mal à la tête Décidément je ne suis pas fais pour la géométrie et tout le reste...
Il n'en reste pas moins, que les vidéos sont très bien faites et bien expliquées. Merci pour ce cadeau pédagogique professeur Papydall !
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
Sujet: Re: Pour le plaisir des yeux. Dim 4 Juin 2017 - 3:21
Spoiler:
Spoiler:
[center]
(/center]
Ouf_ca_passe
Nombre de messages : 285 Age : 76 Localisation : Villeneuve d'Ascq (59-Dpt du NORD) France Date d'inscription : 21/12/2015
Sujet: Apprendre Mar 6 Juin 2017 - 16:21
"Quand les seniors causent,
les disciples se taisent et les écoutent avec respect et humilité"
(ce n'est pas de Confucius)
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
Sujet: Re: Pour le plaisir des yeux. Mar 6 Juin 2017 - 16:59
Ça me rappelle un chinois, mais pourquoi ?
Code:
rem ============================================================================ rem Courbe ornementale rem Par Papydall rem ============================================================================ rem ___________________________________________________ rem | | rem | x = sin ( 2 * t ) - 6 * sin ( 5 * t ) | rem | y = power ( cos( 4 * t ),5 ) - 1.1 * cos ( t ) | rem |___________________________________________________| rem rem ============================================================================ dim x,y,xc,yc,t,p p = pi/360 : xc = width(0)/2 : yc = height(0)/2 color 0,0,0,255 : 2d_pen_color 255,255,255 : 2d_pen_width 2 font_color 0, 255,255,255 : font_bold 0 : font_size 0,10 print "x = sin ( 2 * t ) - 6 * sin ( 5 * t )" print "y = power ( cos( 4 * t ),5 ) - 1.1 * cos ( t )" 2d_poly_from xc,yc+10 for t = 0 to 2*pi+p step p x = sin(2*t) - 6*sin(5*t) : y = power(cos(4*t),5) - 1.1*cos(t) 2d_poly_to xc + 20 * x,yc -100 * y : pause 10 : ' Pour suivre le tracé de la courbe next t rem ============================================================================
jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
Sujet: +++ Mar 6 Juin 2017 - 18:53
Oh, z'est très zoli, honorable zinois !
jean_debord
Nombre de messages : 1266 Age : 70 Localisation : Limoges Date d'inscription : 21/09/2008
Sujet: Re: Pour le plaisir des yeux. Sam 17 Juin 2017 - 9:55
Voici un exemple de figure fractale obtenue avec une des formules de papydall, par la méthode des "biomorphes de Pickover" (voir mon article dans PLM n° 9)
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
Sujet: Re: Pour le plaisir des yeux. Sam 17 Juin 2017 - 14:53
WAOU ! C’est fascinant ! J’aaaaaime ! Merci Jean_debord pour le partage.
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
Sujet: Re: Pour le plaisir des yeux. Sam 17 Juin 2017 - 17:01
Les biomorphes de Pickover. Beaucoup plus modeste que la fractale présentée par jean_debord, voici un code qui tente d’expliquer et de construire un biomorphe.
Code:
rem ============================================================================ rem Biomorphes de PICKOVER rem Papydall - Juin 2017 rem ============================================================================ rem Les biomorphes sont issus d’un programme informatique. rem L’algorithme permettant de tracer un biomorphe utilise les nombres complexes. rem Il manipule une suite de complexes dans le plan complexe. rem ============================================================================ rem RAPPEL : rem Un nombre complexe n’est pas si complexe que ça ! rem Il s’appelle complexe parce qu’il est composé de deux parties : rem L’une dite partie réelle et l’autre partie imaginaire. rem Un nombre complexe z s’écrit sous la forme : rem ______________ rem | | rem | z = a + i*b | rem |______________| rem rem Dans le plan complexe, z désigne l’affixe d’un point où la partie réelle a rem en détermine l’abscisse et la partie imaginaire b, l’ordonnée. rem ============================================================================ rem Le nombre i (qui s’appelle unité imaginaire) est tel que i² = -1 rem C’est-à-dire "i = racine carrée de moins un" rem ============================================================================ rem Comme exemple, on s’intéresse au biomorphe appelé "radiolaire" à 12 branches rem de la forme z³ + c
rem ============================================================================ dim xc,yc : xc = 0.5 : yc = 0.1 : ' c <--- xc + i*yc dim rz,rza,iz,iza,j,k,n,xm,ym,t$
picture 10 : width 10,width_client(0)-100 : height 10,height_client(0)-100 top 10,50 : left 10,50 : 2d_target_is 10 : color 10,0,0,0 alpha 20 : font_size 20,14 : font_bold 20 : font_color 20,0,0,255 : left 20,50 t$ = "Biomorphe de Pickover : Radiolaire à 12 branches" + chr$(13) t$ = t$ + "de la forme z³ + c ..... <ESC> pour arrêter ....." caption 20,t$ xm = width(10) : ym = height(10) for j = 1 to xm for k = 1 to ym rza = -6.4 + 0.02 * j : iza = -3.5 + 0.02 * k for n = 1 to 10 rz = power(rza,3) - 3 * rza * power(iza,2) + xc : ' partie réelle de z iz = 3 * power(rza,2) * iza - power(iza,3) + yc : ' partie imaginaire de z IF (ABS(rz) > 10) OR (ABS(iz) > 10) OR (SQR(rz*rz+iz*iz) > 10) THEN exit_for rza = rz : iza = iz next n IF (ABS(rz) < 10) OR (ABS(iz) < 10) 2d_pen_color 255,0,0 : 2d_point j,k end_if IF (ABS(rz) < OR (ABS(iz) < 2d_pen_color 255,255,0 : 2d_point j,k end_if IF (ABS(rz) < 6) OR (ABS(iz) < 6) 2d_pen_color 0,255,0 : 2d_point j,k end_if IF (ABS(rz) < 4) OR (ABS(iz) < 4) 2d_pen_color 255,0,0 : 2d_point j,k end_if IF (ABS(rz) < 2) OR (ABS(iz) < 2) 2d_pen_color 255,255,0 : 2d_point j,k end_if display if scancode = 27 then terminate NEXT k NEXT j rem ============================================================================
Voici le résultat:
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
Sujet: Re: Pour le plaisir des yeux. Sam 17 Juin 2017 - 17:54
Pour mieux centrer l’image, j’ai modifié le code comme ceci :
Code:
rem ============================================================================ rem Biomorphes de PICKOVER rem Papydall - Juin 2017 rem ============================================================================ rem Les biomorphes sont issus d’un programme informatique. rem L’algorithme permettant de tracer un biomorphe utilise les nombres complexes. rem Il manipule une suite de complexes dans le plan complexe. rem ============================================================================ rem RAPPEL : rem Un nombre complexe n’est pas si complexe que ça ! rem Il s’appelle complexe parce qu’il est composé de deux parties : rem L’une dite partie réelle et l’autre partie imaginaire. rem Un nombre complexe z s’écrit sous la forme : rem ______________ rem | | rem | z = a + i*b | rem |______________| rem rem Dans le plan complexe, z désigne l’affixe d’un point où la partie réelle a rem en détermine l’abscisse et la partie imaginaire b, l’ordonnée. rem ============================================================================ rem Le nombre i (qui s’appelle unité imaginaire) est tel que i² = -1 rem C’est-à-dire "i = racine carrée de moins un" rem ============================================================================ rem Comme exemple, on s’intéresse au biomorphe appelé "radiolaire" à 12 branches rem de la forme z³ + c
rem ============================================================================ dim xc,yc : xc = 0.5 : yc = 0.1 : ' c <--- xc + i*yc dim rz,rza,iz,iza,j,k,n,xm,ym,t$ width 0,750 picture 10 : width 10,width_client(0)-100 : height 10,height_client(0)-100 top 10,50 : left 10,50 : 2d_target_is 10 : color 10,0,0,0 alpha 20 : font_size 20,14 : font_bold 20 : font_color 20,0,0,255 : left 20,150 t$ = "Biomorphe de Pickover : Radiolaire à 12 branches" + chr$(13) t$ = t$ + "de la forme z³ + c ..... <ESC> pour arrêter ....." caption 20,t$ : caption 0,"Tracé en cours ..." xm = width(10) : ym = height(10) for j = 50 to xm - 50 for k = 10 to ym rza = -6.4 + 0.02 * j : iza = -3.5 + 0.02 * k for n = 1 to 10 rz = power(rza,3) - 3 * rza * power(iza,2) + xc : ' partie réelle de z iz = 3 * power(rza,2) * iza - power(iza,3) + yc : ' partie imaginaire de z IF (ABS(rz) > 10) OR (ABS(iz) > 10) OR (SQR(rz*rz+iz*iz) > 10) THEN exit_for rza = rz : iza = iz next n IF (ABS(rz) < 10) OR (ABS(iz) < 10) 2d_pen_color 255,0,0 : 2d_point j,k end_if IF (ABS(rz) < OR (ABS(iz) < 2d_pen_color 255,255,0 : 2d_point j,k end_if IF (ABS(rz) < 6) OR (ABS(iz) < 6) 2d_pen_color 0,255,0 : 2d_point j,k end_if IF (ABS(rz) < 4) OR (ABS(iz) < 4) 2d_pen_color 255,0,0 : 2d_point j,k end_if IF (ABS(rz) < 2) OR (ABS(iz) < 2) 2d_pen_color 255,255,0 : 2d_point j,k end_if display if scancode = 27 then terminate NEXT k NEXT j caption 0,"Terminé" rem ============================================================================