Étape 7: Pointe axée sur la tortue dessin
En utilisant les méthodes left(), right(), up() et down() pour la tortue est facile. Mais pour certains dessins, il faut plus sophistiqué de contrôle 3D. Par exemple, vous pouvez dessiner un beignet incliné de 45 degrés vers le haut. Il est tentant de prendre le script de beignet de verre à l’étape précédente et ajoutez avant la boucle :
Mais qui produit un résultat inattendu--Voir la photo. La raison en est que la tortue va être grimper sur tout le temps, tandis que la méthode d.left(), il tourne autour de l’axe vertical, et afin que vous obteniez une spirale.
Au lieu de cela, ce que nous devons faire est rotatins lacet/tangage/roulis de la tortue. Voir l’image de la NASA (les œuvres du gouvernement américain sont du domaine public) expliquant comment les trois angles, allez et justes imaginent que l’avion est votre tortue. (Malheureusement, en raison des limitations de Minecraft, l’angle de roulis n’affecte pas l’apparence de la tortue ou le point de vue d'où vous consultez.) Ce que nous devons faire pour dessiner notre beignet sur le côté, c’est tout d’abord rouler notre tortue de 45 degrés avec t.roll(45), et puis quand le beignet de dessin utilisez t.yaw(-angle) au lieu de t.left(angle). La version révisée du code est dans la capture d’écran.
Ce qui est agréable sur les rotations de lacet/tangage/roulis, c’est qu’ils sont toujours par rapport à où la tortue est orientée, tandis que left() et right() sont relatifs au monde de Minecraft.
Enfin, voici un exemple beaucoup plus avancé. Nous allons dessiner un arbre. Cela consiste à faire une fonction récursive. Commencez par cela pour s’assurer que le dessin est fait aussi vite que possible
Maintenant, nous faisons notre fonction d’arborescence récursive. L’idée de base derrière tout cela, c’est qu’une branche est juste un arbre plus petit. Donc, nous faire une fonction qui prend un compteur et une longueur de branche. Le compteur indique le nombre d’itérations l’arbre va aller. Par exemple, compteur = 1 signifie juste le tronc sera établi, et compteur = 1 signifie le tronc et un ensemble de branches seront tirés au sort.
Tout d’abord, le code vérifie si notre compteur est déchargée à zéro. Dans l’affirmative, nous n’avons rien dessiner. Ensuite, nous attirons un tronc. Alors nous tirer quatre branches qui sort elle avec une simple boucle. Pour concevoir ce morceau de code, j’ai juste m’imaginer comme la tortue, après avoir remonté tout le long du tronc. Pour dessiner une branche, j’ai soulever mon auto de 30 degrés (p. ex., t.pitch(30)) et dessiner un nouvel arbre de plus petite taille : son compteur est inférieur par l’un, et son tronc sera 3/4 de la longueur de ma Malle actuel. Je pense que tilt moi-même vers le bas de 30 degrés. Je me tourne de 90 degrés et répétez l’exercice. Enfin, une fois que j’en ai fini avec les branches, je reviens vers le bas du tronc.
Enfin, j’ai juste besoin d’appeler ce code. Je ferai un arbre avec un comptoir de 6 et une longueur de branche initiale de 20. Et pour faire bonne mesure, I'l faire en bois et bien sûr verticalement vers le haut :
Cet arbre fractal ne semble pas très réaliste. Nous devrions faire le tronc épais et les branches se diluant et diluant car ils vont vers l’extérieur (dire, obtenir deux fois moins épais, jusqu'à ce qu’ils atteignent un seul bloc), et nous devrions passer du bois à des blocs de feuilles que nous sortons. Mais surtout, vrais arbres ne sont pas autrement ordinaires. Il faut peu d’aléatoire. La forme la plus simple de l’aléatoire est juste de donner à chaque branche une chance de ne pas avoir à se développer, par exemple 20 % de chance. J’ai mis en place tout cela dans mon script de fancytree.py. L’arbre qui en résulte ressemble étonnamment réaliste pour quelque chose produite par un tel morceau de code relativement simple. Un effet secondaire drôle de comment j’ai implémenté c’est qu’il y a 20 % de chance que rien ne sera tiré--c'est-à-dire, l’arbre a une chance de ne pas avoir à se développer, qui est aussi réaliste. Et chaque fois que vous exécutez le script, vous obtenez quelque chose de différent.
Une autre fonctionnalité utile de la classe de dessin de tortue est d’être capable d’attirer non seulement des lignes mais des surfaces polygonales. Pour ce faire, juste faire t.startface(), dessiner votre surface et puis ne t.endface(). Une fois que vous êtes en mode face, chaque fois que vous dessinez une ligne, le code dessine en fait un triangle : un vertex est le point de la tortue était quand t.startface() a été appelée et la ligne est le bord opposé. Cela dessine un pentagone incliné sur le côté de 45 degrés :