Así que, el tiempo 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 realmente predecibles. Así que, ahora intentemos hacer las cosas un poco más interesantes añadiendo algo de irregularidad. ¿Cómo hacemos eso? ¿Cómo añadimos un poco de variación orgánica a nuestro arte? ¿Cómo incorporamos la aleatoriedad es lo que te estoy preguntando?
Entonces, ¿cómo maneja la programación funcional la aleatoriedad? Bueno, probablemente puedas adivinar. No lo hace. No hacemos aleatoriedad en programación funcional. Porque si lo hiciéramos, entonces no podríamos predecir cuál debería ser el valor de retorno dado ciertos inputs, ¿verdad? Y eso rompería todo nuestro cerebro y todas las maravillosas ventajas de predictibilidad y capacidad de depuración y prueba.
Así que, vamos a hacer lo mismo que hace cualquier otra pieza de computación porque en realidad todas las computadoras son deterministas incluso cuando pretenden no serlo. Y vamos a usar pseudoaleatoriedad. 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 basándonos en una semilla que damos a un generador de números pseudoaleatorios. Entonces, el generador de números aleatorios que podemos usar, el generador de números pseudoaleatorios podría ser algo como Simplex Noise. Simplex Noise 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 haces zoom y lo miras a gran escala, parece totalmente aleatorio. Pero si haces zoom y miras una porción más pequeña del campo de ruido que genera, en realidad puedes ver que los valores están relacionados unos con otros, por lo que obtienes esta agradable transición suave y orgánica de un valor pseudoaleatorio al siguiente. Así que este es un algoritmo realmente útil para hacer arte generativo. Y entonces lo que podemos hacer es obtener un paquete de Simplex Noise de una fuente muy impura del mundo exterior, pero luego lo que podemos hacer es impuramente obtener 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 particular como semilla, obtengo una cierta cuadrícula 2D que luego puedo consultar en un cierto punto y obtener un cierto valor. 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. Así que esto es determinista. Es pseudoaleatorio, no es realmente aleatorio. Pero para nuestros propósitos, funciona igual de bien. Y entonces lo que tenemos ahora, podemos hacer como una función make random tile, donde voy a pasar el campo de ruido como datos que esto importa y algunos colores y un índice para cada mosaico para representar cada mosaico. Y luego voy a usar ese índice de mosaico para determinar un valor aleatorio específico del campo de ruido que representará este mosaico, usar eso para elegir aleatoriamente un color para este pequeño mosaico, y luego incrementar mi índice de mosaico en cada llamada a esta función para que esté obteniendo un valor diferente para cada mosaico diferente. Y lo que esto me da entonces es un campo algo ruidoso pero elegido de los colores que elegí un tipo de campo ruidoso. Y a dónde podemos llevar esto es a comenzar a cambiar aleatoriamente o agitar alguna propiedad de nuestro arte basado en estos valores que son pseudoaleatorios pero lo suficientemente diferentes de mosaico a mosaico, que parecen aleatorios para nosotros, para nuestros ojos humanos tontos. Así que lo que tengo aquí es que estoy dibujando estos pequeños relojes. Cada uno de estos mosaicos va a ser un círculo con un color particular y una manecilla de reloj particular que está rotada un cierto número de grados. Y todo lo que estoy haciendo es usar el mismo concepto, usando el índice de mosaico para determinar un número aleatorio de grados para rotar este mosaico. Y en este caso, en realidad no estoy eligiendo un color aleatorio.
Comments