Entonces, el tiempo del que no estoy seguro ahora porque no lo tengo, pero voy a seguir adelante porque lo que hemos estado viendo hasta ahora son cosas que son realmente regulares y predecibles. Ahora intentemos hacer las cosas un poco más interesantes agregando algo de irregularidad. ¿Cómo hacemos eso? ¿Cómo agregamos un poco de variación orgánica a nuestro arte? ¿Cómo incorporamos la aleatoriedad es lo que les estoy preguntando?
Entonces, ¿cómo maneja la programación funcional la aleatoriedad? Bueno, probablemente puedas adivinar. No lo hace. No hacemos aleatoriedad en la programación funcional. Porque si lo hiciéramos, entonces no podríamos predecir cuál debería ser el valor de retorno dado ciertos valores de entrada, ¿verdad? Y eso rompería todo nuestro cerebro y todas las maravillosas ventajas de la previsibilidad, la capacidad de depuración y la capacidad de prueba.
Entonces, vamos a hacer lo mismo que cualquier otra pieza de cálculo porque en realidad todas las computadoras son deterministas incluso cuando pretenden no serlo. Y vamos a utilizar la pseudo-aleatoriedad. Donde vamos a generar valores que tienen la misma distribución que los valores aleatorios, pero en realidad podemos predecir qué valores vamos a generar en función de una semilla que le damos a un generador de números pseudo-aleatorios. Entonces, el generador de números aleatorios que podemos utilizar, el generador de números pseudo-aleatorios podría ser algo como el ruido Simplex. El ruido Simplex es realmente genial para el arte generativo, porque básicamente lo que hace es generar un campo de valores, como una cuadrícula de valores para ti, que si te alejas y lo ves a gran escala, parece totalmente aleatorio. Pero si te acercas y ves una parte más pequeña del campo de ruido que genera, en realidad puedes ver que los valores están relacionados entre sí, por lo que obtienes esta agradable transición suave y orgánica de un valor pseudo-aleatorio al siguiente. Entonces, este es un algoritmo realmente útil para hacer arte generativo. Y lo que podemos hacer es obtener un paquete de ruido Simplex de una fuente muy impura del mundo exterior, pero luego podemos obtener de manera impura un campo de ruido que nos dará de manera predecible los mismos valores aleatorios. Entonces, cómo funciona esto es si instancio un campo de ruido con este algoritmo, con una cadena en particular como una semilla, obtengo una cuadrícula 2D determinada que luego puedo consultar en un punto determinado y obtener un valor determinado. Así que tomo mi campo 2D. Le doy una coordenada x, y y obtengo un valor. Y si genero este campo con una semilla diferente, obtendré un valor diferente. Si genero un nuevo campo con la misma semilla, obtengo el mismo valor. Esto es determinista. Es pseudo-aleatorio, no es realmente aleatorio. Pero para nuestros propósitos, funciona igual de bien. Y lo que tenemos ahora, podemos hacer una función como make random tile, donde voy a pasar el campo de ruido como datos en los que se preocupa y algunos colores y un índice para cada casilla para representar cada casilla. Y luego voy a usar ese índice de casilla para determinar un valor aleatorio específico del campo de ruido que representará esta casilla, usar eso para elegir aleatoriamente un color para esta pequeña casilla, y luego incrementar mi índice de casilla en cada llamada a esta función para obtener un valor diferente para cada casilla diferente. Y lo que esto me da entonces es un campo ruidoso pero elegido de entre los colores que elegí. Y a partir de aquí, podemos comenzar a cambiar aleatoriamente o mover algunas propiedades de nuestro arte basado en estos valores que son pseudo-aleatorios pero lo suficientemente diferentes de casilla a casilla, que parecen aleatorios para nosotros, para nuestros tontos ojos humanos. Así que lo que tengo aquí es que estoy dibujando estos pequeños relojes. Cada una de estas casillas va a ser un círculo con un color particular y una manecilla de reloj particular que está girada un cierto número de grados. Y todo lo que estoy haciendo es usar el mismo concepto, usar el índice de casilla para determinar un número aleatorio de grados para girar esta casilla. Y en este caso, en realidad no estoy eligiendo un color aleatorio.
Comments