|
| [Tutoriel] Principe de Récursivité et Fractalisation | |
| | Auteur | Message |
---|
onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: [Tutoriel] Principe de Récursivité et Fractalisation Ven 2 Juil 2010 - 0:37 | |
|
Principe de Récursivité et Fractalisation
Sommaire 1-Introduction 2-Comment créer une fonction récursive ? 3-Applications mathématiques 4-Les fractales 5-Exercices
1- Introduction
Une fonction récursive est une fonction qui peut s'appeler elle-même au cours de son exécution.
Intérêts : -Exécuter plusieurs fois une tâche identique. -Nécessite l'écriture de petits programmes. -Facilite la programmation
Bien que la récursivité soit très adapté pour faire des programmes simples, elle peut augmenter considérablement la durée des calculs. Ce problème de vitesse peut être contourné et nous verrons comment plus tard (peut être dans un autre topic même)
2-Comment créer une fonction récursive ?
Une fonction récursive est de cette forme : - Code:
-
fonction() { fonction() }
Seulement utiliser une fonction de cette manière serais dangereuse, vous l'avez comprit, car nous aurions affaire a une instruction qui s'effectue a l'infinie. Un moyen simple de remédier a ce problème est de poser une condition qui stopperas la fonction au bout d'un certain moment. - Code:
-
fonction() { if( condition ) fonction() }
De cette manière nous aurons alors la fonction qui s'appèlera tant que la condition est vrai. Une manière simple de faire est d'arrêter la fonction au bout d'une certaine profondeur. On choisis la profondeur dans un des paramètres de la fonction et on l'arrête quand la profondeur est atteinte. - Code:
-
fonction(profondeur) { if( argument0-1 < 0 ) exit fonction(argument0-1) }
3-Applications mathématiques
Maintenant que nous connaissons le principe de la récursivité, voici quelques exemples de fonctions mathématiques.
Le factoriel, noté x!, et donné par la fonction : x! = 1*2*3* ... *x - Code:
-
factoriel(x) { if( argument0 == 1 ) return 1 return argument0 * factoriel(argument0-1) }
La fonction puissance, avec n un entier positif - Code:
-
pow(x, n) { if( argument1 == 0 ) return 1 return argument0 * pow(argument0, argument1-1) }
La racine carré, donnée par la formule : u(n+1) = 0,5 * ( u(n) + x/u(n)) On utiliseras la fonction avec temps=1 - Code:
-
sqrt(itérations, x, temps) { if( argument0 == 0) return argument2 return sqrt( argument0-1 , argument1 , 0.5*( argument2 + argument1/argument2 ) ) }
Pour toutes ces fonctions, le résultat est d'autant plus précis que les itérations sont grandes.
4-Les fractales
Mais maintenant , que ce passera-t-il si nous appelons plusieurs fois notre fonction en elle même, comme ci dessous ? - Code:
-
fonction(profondeur, parametre, parametre, ...) { if( argument0-1 < 0 ) exit
fonction(argument0-1, parametre, parametre) fonction(argument0-1, parametre, parametre) }
Et bien notre fonction va se fractaliser, et c'est de cette manière que l'on peut construire simplement de nombreuses fractales.
Pour commencer nous allons construire un arbre tout simple. Celui-ci :
Le principe est simple. Dans notre fonction, on dessine deux branches. Et à l'extrémité de chaque branches, on dessine encore deux branches, etc.
Un algorithme de notre fonction serais : - Code:
-
draw(itérations, x, y, taille, rapport) { if( iterations == 0 ) exit draw(itérations-1, x+taille, y+taille, taille*rapport, rapport) draw(itérations-1, x+taille, y-taille, taille*rapport, rapport) }
Sous GM voici notre fonction : - Code:
-
draw(itérations, x, y, taille, rapport) { if( argument0 == 0 ) exit
var x1, y1, x2, y2;
x1 = argument1 + argument3 y1 = argument2 + argument3
x2 = argument1 + argument3 y2 = argument2 - argument3
draw_line(argument1, argument2, x1, y1) draw_line(argument1, argument2, x2, y2)
draw( argument0 - 1 , x1, y1, argument3*argument4, argument4) draw( argument0 - 1 , x2, y2, argument3*argument4, argument4) }
Si vous êtes capables de coder cette fractale, alors vous avez compris le principe et vous pourrez coder de magnifique structures, arbres, dessins, etc. Pour toutes les fractales il n'y a qu'une chose a respecter : avoir un motif basique qui se répète...
5-Exercices
Je vais ici mettre diverses images de fractales et le but seras de réussir a les recoder, pas forcement exactement la même, mais qu'il y ai une grande ressemblance. Si vous arrivez a finir cet entrainement, les fractales n'aurons plus aucuns mystères pour vous, alors bonne chance. Je rappelle que toutes la fractales qui suivent ont leurs sources dans ce pack d'exemple de fractales.
Pack d'exemples ( dernier upload le 2/7/2010 à 2h56 ) http://host-a.net/onilink_/Pack_Fractales.rar
Dernière édition par onilink_ le Ven 2 Juil 2010 - 13:33, édité 12 fois |
| | | Invité Invité
| Sujet: Re: [Tutoriel] Principe de Récursivité et Fractalisation Ven 2 Juil 2010 - 1:15 | |
| je lis ça demain à tête reposée, mais d'avance bravo pour ce tuto (ah et aussi je sais pas si c'est normal, mais maintenant j'arrive à savoir juste au nom du topic s'il est de toi :nezrouge: ) |
| | | Wargamer *Excellent utilisateur*
Messages : 6938 Projet Actuel : Bataille de cake au fruits
| Sujet: Re: [Tutoriel] Principe de Récursivité et Fractalisation Ven 2 Juil 2010 - 2:16 | |
| triforce win sinon je crois comrpendre le principe, juste que quand vien l'affichage je capte pas comment tu fait poru tout afficher et non juste la partie en cours de traitement? |
| | | onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: [Tutoriel] Principe de Récursivité et Fractalisation Ven 2 Juil 2010 - 3:00 | |
| La récursivité est comparable aux boucles. Donc tout ce fait en un step, d'ou l'affichage immédiat. En tout cas wow, coder toutes ces fractales d'un coup m'a donné envie de faire et Triforce win comme tu dit, bien content d'avoir (casiment) plié ce tuto. |
| | | alpha Modérateur
Messages : 5030 Projet Actuel : Me taper la tête sur le mur.
| Sujet: Re: [Tutoriel] Principe de Récursivité et Fractalisation Ven 2 Juil 2010 - 14:12 | |
| Onilink et les fractales, une grande histoire d'amour Sinon, sympa le tuto. |
| | | onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: [Tutoriel] Principe de Récursivité et Fractalisation Ven 2 Juil 2010 - 14:37 | |
| :coeur2: :coeur2: FRACTAAALES :coeur2: :coeur2: Maintenant j'espere que tout le monde pourras faire des fractales sans problèmes :fier: Envoyez donc vos créations |
| | | glcraft Utilisateur confirmé: Rang *****
Messages : 1698 Localisation : Entre l'Espagne, l'Italie, la Suisse, L'allemagne et le RU :P Projet Actuel : Jeu de survie avancé
||--------
| Sujet: Re: [Tutoriel] Principe de Récursivité et Fractalisation Ven 2 Juil 2010 - 15:25 | |
| tes tutoriels, tes scripts, tes exemples sont tous de plus en plus magnifique *snif* c'est fou mais ou as-tu appris tout ca (le binaire, les fractales, ba tout quoi) ? tu as croisé ca sur le web ? |
| | | Chlorodatafile Utilisateur confirmé: Rang *****
Messages : 2929 Localisation : Belfort Projet Actuel :
Paralights
| Sujet: Re: [Tutoriel] Principe de Récursivité et Fractalisation Ven 2 Juil 2010 - 15:35 | |
| j'vais réaliser ma fractale moi, elle est importante pour mon jeu en plus |
| | | Invité Invité
| Sujet: Re: [Tutoriel] Principe de Récursivité et Fractalisation Ven 2 Juil 2010 - 15:42 | |
| - gabin49 a écrit:
- c'est fou mais ou as-tu appris tout ca (le binaire, les fractales, ba tout quoi) ? tu as croisé ca sur le web ?
tu peux facilement apprendre à connaître tout ça, suffit de s'y intéresser + chercher ou lire un livre dessus Pour le binaire c'est pas très compliqué, si tu connais les bases (en mathématiques), tout devient très clair :oui: |
| | | Chlorodatafile Utilisateur confirmé: Rang *****
Messages : 2929 Localisation : Belfort Projet Actuel :
Paralights
| Sujet: Re: [Tutoriel] Principe de Récursivité et Fractalisation Ven 2 Juil 2010 - 16:05 | |
| voilà ma fractale ! PS : le cercle externe n'est pas inclus dans le script suivant : - Spoiler:
- Code:
-
/* fifth_circle(itérations,x,y,taille) la taille est une valeur subjective (je sais pas regler ça correctement :P */ { if( argument0 == 0 ) exit
var x1, y1, x2, y2, x3, y3, x4, y4, x5, y5;
x1 = argument1 + lengthdir_x(argument3*1.50,0) y1 = argument2 + lengthdir_y(argument3*1.50,0)
x2 = argument1 + lengthdir_x(argument3*1.50,72) y2 = argument2 + lengthdir_y(argument3*1.50,72)
x3 = argument1 + lengthdir_x(argument3*1.50,144) y3 = argument2 + lengthdir_y(argument3*1.50,144)
x4 = argument1 + lengthdir_x(argument3*1.50,216) y4 = argument2 + lengthdir_y(argument3*1.50,216)
x5 = argument1 + lengthdir_x(argument3*1.50,288) y5 = argument2 + lengthdir_y(argument3*1.50,288)
draw_circle(x1, y1, argument3,1) draw_circle(x2, y2, argument3,1) draw_circle(x3, y3, argument3,1) draw_circle(x4, y4, argument3,1) draw_circle(x5, y5, argument3,1)
fifth_circle( argument0 - 1 , x1, y1, argument3*0.4) fifth_circle( argument0 - 1 , x2, y2, argument3*0.4) fifth_circle( argument0 - 1 , x3, y3, argument3*0.4) fifth_circle( argument0 - 1 , x4, y4, argument3*0.4) fifth_circle( argument0 - 1 , x5, y5, argument3*0.4) }
code du résultat précédent dans une room 640*640 : - Code:
-
draw_circle(room_width/2,room_height/2,250,1) draw(4,room_width/2,room_height/2,100) |
| | | Invité Invité
| Sujet: Re: [Tutoriel] Principe de Récursivité et Fractalisation Ven 2 Juil 2010 - 16:18 | |
| - gosc a écrit:
ultimate minigun from "the death that kills". |
| | | Chlorodatafile Utilisateur confirmé: Rang *****
Messages : 2929 Localisation : Belfort Projet Actuel :
Paralights
| Sujet: Re: [Tutoriel] Principe de Récursivité et Fractalisation Ven 2 Juil 2010 - 16:24 | |
| doh ! c'est la représentation schématisé de la physique des bios tu veux que je détaille ou ? |
| | | onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: [Tutoriel] Principe de Récursivité et Fractalisation Ven 2 Juil 2010 - 16:28 | |
| - gabin49 a écrit:
- tes tutoriels, tes scripts, tes exemples sont tous de plus en plus magnifique *snif*
c'est fou mais ou as-tu appris tout ca (le binaire, les fractales, ba tout quoi) ? tu as croisé ca sur le web ? Quand tu a vecu 15 ans de ta vie paumé dans la montagne sans avoir rien a faire(sans internet) et en etant presque tout le temps seul tu fait avec ^^, et tu cherche des trucs a faire. Sinon content que mes tuto plaisent,et soient utiles, j'avais peur de mal expliquer =) Edit : en tout cas gg gosc, et j'attend impatiemment d'autres fractales :coeur2:
Dernière édition par onilink_ le Ven 2 Juil 2010 - 16:49, édité 1 fois |
| | | Invité Invité
| Sujet: Re: [Tutoriel] Principe de Récursivité et Fractalisation Ven 2 Juil 2010 - 16:49 | |
| lol nice les post de gosc et shm |
| | | onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: [Tutoriel] Principe de Récursivité et Fractalisation Ven 2 Juil 2010 - 16:58 | |
| oui nice gosc, par contre t'aurais pu faire plus court =p - Code:
-
//fifth_circle(iter, x, y, taille) if( argument0 == 0 ) exit var i, xx, yy;
for(i=0 ; i<360 ; i+=72) { xx = argument1 + lengthdir_x(argument3*1.50,i) yy = argument2 + lengthdir_y(argument3*1.50,i) draw_circle(xx, yy, argument3,1) fifth_circle( argument0 - 1 , xx, yy, argument3*0.4) }
|
| | | Invité Invité
| Sujet: Re: [Tutoriel] Principe de Récursivité et Fractalisation Ven 2 Juil 2010 - 17:28 | |
| Est-ce que c'est toujours une fractale s'il y a de l'aléatoire ? Par exemple je fais un arbre mais avec du random dans l'angle des branches. Sinon j'en ai fait une pour essayer et c'est sympa, merci pour ce tuto |
| | | onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: [Tutoriel] Principe de Récursivité et Fractalisation Ven 2 Juil 2010 - 17:33 | |
| d'apres wiki c'est toujours des fractales. Toute façon fractaliser veux juste dire briser ^^ - Citation :
- Les fractales aléatoires, générées par des processus stochastiques et non déterministes, par exemples les paysages fractals.
|
| | | Chlorodatafile Utilisateur confirmé: Rang *****
Messages : 2929 Localisation : Belfort Projet Actuel :
Paralights
| Sujet: Re: [Tutoriel] Principe de Récursivité et Fractalisation Ven 2 Juil 2010 - 17:34 | |
| |
| | | onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: [Tutoriel] Principe de Récursivité et Fractalisation Ven 2 Juil 2010 - 17:35 | |
| Faut vraiment utiliser les boucles dès que l'on peut, c'est plus rapide et le code est plus court |
| | | Invité Invité
| Sujet: Re: [Tutoriel] Principe de Récursivité et Fractalisation Ven 2 Juil 2010 - 17:48 | |
| Voilà mon deuxième essai : |
| | | onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: [Tutoriel] Principe de Récursivité et Fractalisation Ven 2 Juil 2010 - 18:12 | |
| ouai suuper Allez si tout le monde fait ça fractale on va pouvoir ouvrir une galerie :pac_dr: |
| | | Contenu sponsorisé
| Sujet: Re: [Tutoriel] Principe de Récursivité et Fractalisation | |
| |
| | | | [Tutoriel] Principe de Récursivité et Fractalisation | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |