Paso 13: Avanzada notas 3: nudos
Puede encontrar ecuación paramétrica para los nudos en la red. Esta vez, vamos a hacer las cosas un poco distintas que antes. Antes, hemos tenido lazos manejar llamadas a mc.setBlock() directamente. Pero en nuestras parcelas de superficie, como la botella de Klein, a menudo el mismo bloque Haz dibujado varias veces, que es lento e ineficiente. Una forma mejor es mantener el conjunto de bloques exactas que ya eran para evitar rehacer la misma cosa.
Déjame ir a través de un ejemplo como eso (en knot.py) a un nudo. Comenzar con una cabecera estándar como:
Ahora tenemos que generar nuestro nudo. He utilizado las fórmulas de Potentilla de aquí. Esto requiere colocación de un parámetro t de 0 a 2 * pi, con pequeño suficientes medidas para asegurar no tiene lagunas. He usado 10000 pasos. Puesto que esto se hace en la memoria, las computadoras son rápidas y superposición de bloques sólo se envían una vez a Minecraft, es más fácil más fácil hacer más pasos que to que la cantidad es suficiente. Es importante que las coordenadas que van en el diccionario para ser enteros, por lo que podemos decir que el mismo bloque es ser dibujo (un bloque en (1.1,1.2,1.4) y una a (1,1,1) son la misma cosa en Minecraft).
Primero inicializar y establecer la posición del nudo en relación con el jugador. Observe que la posición de jugador no necesita ser un número entero (que podría no estar exactamente alineado con un bloque) y debe convertirse en un entero.
Ahora hacemos un conjunto vacío hecho para almacenar las coordenadas que ya hemos dibujado el nombre:
Y sacar el conjunto:
Esto sólo dibuja los datos que ya no está. Tenga en cuenta que tenemos que redondear la x, y, z coordenadas con la función int(). Que es la magia detrás de la eliminación de superposición: cuando las coordenadas redondeadas son iguales, a una cuadra se dibuja. (Nota: el paréntesis doble en la línea de done.add((x,y,z)) es debido a que estamos agregando al conjunto es la coordenada triple (x, y, z).)
El código anterior es en knot.py.
El nudo se vería mejor si la cuerda fuese más gruesa. Hay muchas maneras que uno puede hacer eso. Manera ineficiente, pero es fácil ya que los equipos son rápidos estos días, es dibujar una bola pequeña en vez de un punto en cada píxel. Para ello, primero hacer una pequeña función de utilidad para dibujar una bola mientras que comprobar en el hecho al asegurar no hay bloques duplicados:
Esto utiliza el método de desigualdad para llenar en una bola en la (x0, y0, z0), de radio r.
Entonces sólo modificar nuestro lazo nudo hacer mientras para hacer una bola en vez de sólo un punto:
El resultado es de knot2.py en los scripts de muestra.
Otros nudos de la muestra están en trefoil.py, trefoil2.py y borromean.py. Si se dibuja con múltiples materiales, puede utilizar un diccionario en lugar de un conjunto, o sólo pasar secuencialmente por los diferentes materiales y claro el juego antes de cada uno (que es lo que hago en trefoil2.py y borromean.py).