Étape 16 : Dessin de récursive
Jusqu'à présent, on nous dit la tortue où tracer et elle l’a fait ce qu’il a été dit - même avec des dessins plus compliqués comme dans l’exemple de la voiture. Mais la récurrence donne la tortue une vie propre. Vous lui dire quoi faire et puis s’asseoir en arrière et regarder.
Voici un lien vers la discussion de Wikipedia de la récursivité :
www.wikipedia.org/wiki/Recursion _ (computer_science...
Ce qui est la récursivité? Pour une personne écrivant Arduino tortue fonctions graphiques, c’est une autre façon de penser. Pour la tortue qui fait du dessin, c’est une mesure de l’indépendance: « Viens m’aider à démarrer et me regarder passer! »
Remarque : l’Arduino Uno a limité la mémoire SRAM, mais toujours suffisante pour utiliser la récursivité dans nos exemples de graphiques de tortue. Si vous essayez d’utiliser trop d’étapes récursives, vos fonctions peuvent ne pas fonctionner. Cependant nous ne sommes pas parvenus qui limitent dans nos exemples, donc nous allons aller de l’avant et voir comment cela fonctionne...
Lorsque nous invoquons la récursivité, nous utilisons une fonction qui s’appelle. Comment procédons-nous ? Il est plus facile d’expliquer avec un exemple bref qui dessine un v :
void vee(length) ; Si vous exécutez cet exemple, essayez-le avec une longueur de 80 pixels
{
t.Left(45) ; turnes gauche 45 degrés
t.Forward(Length) ; dessine le bras gauche du V avec longueur spécifiée - 80 pixels, par exemple
t.Back(Length) ; retourne au début point de V
t.Right(90) ; se trouve à droite de 90 degrés - qui est 45 degrés à droite de l’orientation d’origine
t.Forward(Length) ; dessine le bras droit de V
t.Back(Length) ; retourne au point de départ
t.Left(45) ; retourne à l’orientation originale
}
Il - qui dessine un V. Nous sommes maintenant prêts à ajouter la récursivité. Après la première ligne qui déclare t.forward(length) ; ajoutez cette ligne :
Vee(length / 2) ; Il s’agit de récursivité - une fonction qui se fait appeler !
Vous avez dessiné le bras gauche du V et maintenant vous appeler la même fonction pour dessiner un autre V qui est la moitié de taille. Après que qui est terminée, la fonction initiale continue d’attirer le V original, plus grand. Il s’agit d’une façon intéressante de dessiner quelque chose. C’est en fait une façon intéressante de réflexion sur comment les choses peuvent être tirées.
Maintenant nous allons ajouter un plus petit V à l’extrémité du bras droit aussi bien. Après la deuxième t.forward(length) ; rajouter cette ligne :
Vee(length / 2) ; Il s’agit de récursivité - une fonction qui se fait appeler !
Nous avons presque terminé, sauf pour une chose - la fonction ne fonctionnera pas comme ça - il y a quelque chose à la difficulté. Récurrence a besoin d’un point d’arrêt, il ne sera pas continuer indéfiniment. (Ce l’erreur que j’ai fait quand j’ai d’abord essayé de tirer un V à l’aide de la récursivité - il n’a pas fonctionné pour moi et j’ai dû obtenir conseils.) Ajouter cette routine d’arrêt au début de la fonction :
Si (longueur < 10)
{
retour ;
}
Il. Maintenant nous avons un point d’arrêt - les bras du V sont ramenés à moins de 10 pixels (à noter que la longueur est réduite de moitié chaque fois que la fonction est appelée) - l’arrêt de la fonction.
Voici la fonction de vee complet récursive :
int longueur = 80 ; une variable qui indique la longueur des bras de la V
void vee(length) ; nomme la fonction, avec un seul paramètre, qui est la longueur des côtés de la V
{
Si (longueur < 10)
{
retour ; Cela arrête la récursivité lorsque length est inférieur à 10 pixels !
}
t.Left(45) ; tourne à gauche à 45 degrés
t.Forward(Length) ; bras gauche de tirages de V avec une longueur de 80 pixels
Vee(length / 2) ; Il s’agit de récursivité - fonction appel lui-même pour dessiner des petit V !
t.Back(Length) ; retourne en bas de la V
t.Right(90) ; tourne à droite 45 degrés
t.Forward(Length) ; dessine le bras droit de V
Vee(length / 2) ; C’est la récursivité à nouveau !
t.Back(Length) ; retourne au point de départ
t.Left(45) ; retourne à l’orientation originale
}
Maintenant, vous pouvez essayer la fonction. Essayez-le avec des valeurs différentes pour la longueur du V - regarder et voir ce qui se passe !
EXEMPLE 1 - CÔNES
Cet exemple utilise une fonction que nous avons nommé rCones dessiner deux arcs, t.arcLeft() et t.arcRight(), chacun des 360 pixels de circonférence. Après avoir dessiné le premier arc, la fonction s’appelle elle-même (!-récursivité)- et dessine un arc plus petite, plus courtes en circonférence de 30 pixels. Cela continue jusqu'à ce que la butée soit atteinte, lorsque l’arc plus petit est inférieur à 100 pixels de circonférence.
EXEMPLE 2 - UN PETIT ARBRE
L’exemple de fonction rTree est similaire à l’exemple de V ci-dessus.
EXEMPLE 3 - UN ARBRE AUX BRANCHES PLUS
Cet exemple utilise la fonction rTree même utilisée dans l’exemple 2, mais en spécifiant une taille de branche plus longtemps la fonction attire beaucoup plus de branches. Il est intéressant de voir combien de détails peut être ajouté en changeant simplement de ce paramètre.
EXEMPLE 4: UN ARBRE PLUS COMPLEX
Le principe est le même -, mais dans cette fonction, nous sommes en mesure de préciser les différentes longueurs des branches gauche et droite branches et autre angle gauche angle droit pour les branches. Aussi les branches plus courtes de la fin sont dessinés une couleur différente. Notre tortue devient assez artistique. Selon les valeurs utilisées, l’image résultante peut être sophistiquée. Essayez quelques longueurs de l’autre branche et les couleurs et voir ce qui se passe.
EXEMPLE 5 - TRIANGLES RÉCURSIVE
Cet exemple dessine des triangles de Sierpinski. En savoir plus à leur sujet sur Wikipedia :