Paso 7: Avanzada basada en tortuga dibujo
Usando los métodos left(), right(), up() y down() para la tortuga es fácil. Pero para algunos dibujos necesitamos control 3D más sofisticado. Por ejemplo, puede dibujar una dona inclinada 45 grados para arriba. Es tentador tomar el guión de donut de cristal del paso anterior, y agregar antes del bucle:
Pero que produce un resultado inesperado--consulte la imagen. La razón de esto es que la tortuga va subiendo para arriba todo el tiempo, mientras que el método de d.left() la gira alrededor del eje vertical, y así se obtiene una espiral.
En cambio, lo que tenemos que hacer es rotatins de rodillo de desvío de la echada de la tortuga. Ver la imagen de la NASA (obras de gobierno de los Estados Unidos son de dominio público) explicando cómo los tres ángulos de ir y solo imaginan que el avión es tu tortuga. (Desafortunadamente, debido a limitaciones de Minecraft, el ángulo del rodillo no afecta la apariencia de la tortuga o el punto de vista de que estás viendo.) Lo que tenemos que hacer para sacar nuestro lado donut es rodar primero nuestra tortuga de 45 grados con t.roll(45), y cuando dibujo el donut Utilice t.yaw(-angle) en lugar de t.left(angle). El código revisado está en la captura de pantalla.
Cuál es agradable sobre las rotaciones de desvío/pitch/roll son que siempre son en relación a dónde está apuntando la tortuga, mientras left() y right() están en relación con el mundo de Minecraft.
Finalmente, aquí está un ejemplo mucho más avanzado. Vamos a dibujar un árbol. Esto consiste en hacer una función recursiva. Empezar con esto para que el dibujo se realiza tan rápido como sea posible
Ahora hacemos nuestra función recursiva de árbol. La idea básica detrás de esto es que una rama es sólo un árbol más pequeño. Así que hacemos una función que toma un contador y una longitud de rama. El contador especifica cuántas iteraciones irá el árbol. Por ejemplo, contador = 1 significa que se sorteará solo el tronco, y contador = 1 significa que se sorteará el tronco y un sistema de ramas.
En primer lugar, el código comprueba si ha agotado nuestro contador a cero. Si es así, no tenemos nada para dibujar. Luego dibujamos un tronco. Luego dibujamos cuatro ramas sobresale con un bucle simple. Para diseñar este poco de código, solo imagino yo como la tortuga, sólo después de haber subido a lo largo del tronco. Para dibujar una rama, incline mi auto hacia arriba de 30 grados (es decir, t.pitch(30)) y dibujar un árbol de tamaño más pequeño: su contador es menos por uno, y su tronco 3/4 de la longitud de mi tronco actual. Creo que la inclinación me hacia abajo de 30 grados. Yo me gire 90 grados y repetir el ejercicio. Por último, una vez que he terminado con las ramas, vuelvo abajo del tronco.
Por último, sólo hay que invocar a este código. Voy a hacer un árbol con un contador de 6 y una longitud de la rama inicial de 20. Y de yapa, I'l hacerla de madera y luego verticalmente hacia arriba:
Este árbol fractal no se ve muy realista. Debemos hacer el tronco grueso y las ramas consigue el deluente y el deluente como van hacia el exterior (digo, haz la mitad de espesor, hasta llegar a un solo bloque), y debemos cambiar de madera a bloques de hojas como salimos. Pero sobre todo, los árboles no son que regular. Necesitamos cierta aleatoriedad. La forma más simple de aleatoriedad es solo para darle a cada rama una oportunidad de no crecer, digamos un 20% de probabilidad. Implementé todos estos en mi script de fancytree.py. El árbol resultante se ve sorprendentemente realista de algo producido por un relativamente simple pedazo de código. Un efecto secundario curioso de cómo he implementado es que hay un 20% de probabilidades de que nada se dibujarán--es decir, el árbol tiene la oportunidad de no crecer, que también es realista. Y cada vez que ejecute el script, algo diferente.
Otra característica útil de la clase de dibujo de tortuga es ser capaz de establecer no sólo las líneas sino las superficies poligonales. Para hacer esto, solo lo t.startface(), dibujar su superficie y luego hacer t.endface(). Una vez que estás en modo cara, cada vez que usted dibuja una línea, el código realmente dibuja un triángulo: un vértice es el punto de la tortuga era cuando se llamaba t.startface() y la línea es el borde opuesto. Esto dibuja un Pentágono inclinado en su lado por 45 grados: