Las matemáticas enteras pueden generar patrones sorprendentes cuando se distribuyen sobre una cuadrícula. ¡Incluso las funciones más básicas pueden producir diseños increíblemente elaborados!
Tu reto
Escriba 3 cuerpos de función Tweetable (que significa 140 caracteres o menos) para los valores rojo, verde y azul para una imagen de 1024x1024.
La entrada a las funciones será dos enteros i (número de columna para el píxel dado) y j (número de fila para el píxel dado) y la salida será un corto sin signo entre 0 y 1023, inclusive, que representa la cantidad de color presente en el píxel (i, j).
Por ejemplo, las siguientes tres funciones producen la siguiente imagen:
/* RED */
return (unsigned short)sqrt((double)(_sq(i-DIM/2)*_sq(j-DIM/2))*2.0);
/* GREEN */
return (unsigned short)sqrt((double)(
(_sq(i-DIM/2)|_sq(j-DIM/2))*
(_sq(i-DIM/2)&_sq(j-DIM/2))
));
/* BLUE */
return (unsigned short)sqrt((double)(_sq(i-DIM/2)&_sq(j-DIM/2))*2.0);
/* RED */
return i&&j?(i%j)&(j%i):0;
/* GREEN */
return i&&j?(i%j)+(j%i):0;
/* BLUE */
return i&&j?(i%j)|(j%i):0;
Las normas
- Dado este código C ++ , sustituya en sus funciones. He proporcionado algunas macros y he incluido la biblioteca, y puede incluir complex.h. Puede usar cualquier función de estas bibliotecas y / o mis macros. No utilice ningún recurso externo más allá de esto.
Si esa versión no funciona para usted, asegúrese de estar compilando con:
g++ filename.cpp -std=c++11
Si eso no funciona, utilice la versión alternativa con caracteres sin signo en lugar de cortos sin signo.
Michaelangelo ha proporcionado una versión limpia de salida de color de 24 o 48 bits .
- Puede implementar su propia versión en otro idioma, pero debe comportarse de la misma manera que la versión de C ++ provista, y solo las funciones de las funciones integradas de C ++, la biblioteca o las macros proporcionadas pueden usarse para hacerlo justo.
- Publique solo sus tres cuerpos de funciones; no incluya mi código en su publicación
- Incluya una versión más pequeña o una copia incrustada de su imagen. Están hechos en un formato de ppm y es posible que necesiten convertirse a otro para una visualización adecuada en stackexchange.
- Los cuerpos de las funciones (sin incluir la firma) deben tener 140 caracteres o menos.
- Este es un concurso de popularidad: la mayoría de los votos gana
fuente
Respuestas:
Mandelbrot 3 x 133 caracteres
Lo primero que me vino a la mente fue "Mandelbrot!".
Sí, sé que ya hay una presentación de Mandelbrot. Después de confirmar que puedo obtener menos de 140 caracteres, he tomado los trucos y las optimizaciones de esa solución en la mía (gracias Martin y Todd). Eso dejó espacio para elegir una ubicación interesante y hacer zoom, así como un buen tema de color:
132 caracteres en total
Traté de bajarlo a 140 para los 3 canales. Hay un poco de ruido de color cerca del borde, y la ubicación no es tan interesante como la primera, pero: 132 caracteres
fuente
Manteles
Plano
Comencé poniendo un patrón de cuadros / cuadros en perspectiva como un mantel sin límites:
Onda
Luego introduje una onda (perspectiva no estrictamente correcta, pero aún en 140 caracteres):
Color
Luego hice algunos de los colores más finos para dar detalles en una gama más amplia de escalas y hacer que la imagen sea más colorida ...
En movimiento
Reducir el código un poco más permite definir una fase de onda P con 2 decimales, lo cual es suficiente para cuadros lo suficientemente cercanos como para una animación suave. Reduje la amplitud en esta etapa para evitar provocar mareos, y cambié la imagen completa otros 151 píxeles (al costo de 1 carácter adicional) para eliminar el alias de la parte superior de la imagen. El alias animado es fascinante.
fuente
#define P
. Se requería jugar golf para permitir los caracteres adicionales#define P 6.03
.Pintor al azar
Aquí hay una entrada basada en la aleatoriedad. Para aproximadamente el 0.1% de los píxeles elige un color aleatorio, para los demás usa el mismo color que un píxel adyacente aleatorio. Tenga en cuenta que cada color hace esto de forma independiente, por lo que en realidad es solo una superposición de una imagen aleatoria de verde, azul y rojo. Para obtener diferentes resultados en diferentes ejecuciones, deberá agregar
srand(time(NULL))
a lamain
función.Ahora para algunas variaciones.
Al omitir píxeles, podemos hacerlo un poco más borroso.
Y luego podemos cambiar lentamente los colores, donde los desbordamientos resultan en cambios abruptos que hacen que esto se vea aún más como pinceladas
Cosas que necesito resolver:
srand
dentro de esas funciones sin obtener un segfault.También puede hacer que la caminata aleatoria sea isotrópica, como
darte
Más cuadros al azar
He jugado un poco más con esto y he creado algunas otras pinturas al azar. No todos estos son posibles dentro de las limitaciones de este desafío, por lo que no quiero incluirlos aquí. Pero puedes verlos en esta galería de imágenes junto con algunas descripciones de cómo los produje .
Estoy tentado a desarrollar todas estas posibilidades en un marco y ponerlo en GitHub. (No es que cosas como esta aún no existan, ¡pero es divertido de todos modos!)
fuente
Algunas cosas puntiagudas
Sí, sabía exactamente cómo llamarlo.
EDITAR: ya no se usa
pow
. EDIT 2: @PhiNotPi señaló que no necesito usar abdominales tanto.Puede cambiar los puntos de referencia con bastante facilidad para obtener una imagen diferente:
@EricTressler señaló que mis fotos tienen Batman en ellas.
fuente
Por supuesto, tiene que haber una presentación de Mandelbrot.
Intentando mejorar el esquema de color ahora. ¿Es engañoso si defino el cálculo como una macro
red_fn
y uso esa macro en las otras dos para tener más caracteres para la selección de colores elegantes en verde y azul?Editar: es realmente difícil crear esquemas de color decentes con estos pocos bytes restantes. Aquí hay otra versión:
Y según la sugerencia de los gitofagocitos y con las mejoras de Todd Lehman, podemos elegir fácilmente secciones más pequeñas:
P.ej
da
fuente
Juegos de julia
Si hay un Mandelbrot, también debería haber un conjunto de Julia.
Puede pasar horas ajustando los parámetros y funciones, por lo que este es solo uno rápido que parece decente.
Inspirado en la participación de Martin.
¿Quieres un poco de RNG?
Bien, el comentario de Sparr me puso en la pista para aleatorizar los parámetros de estas pequeñas Julias. Primero intenté hacer piratería a nivel de bits con el resultado de,
time(0)
pero C ++ no permite literales hexadecimales de coma flotante, por lo que este fue un callejón sin salida (al menos con mi conocimiento limitado). Podría haber usado un casting pesado para lograrlo, pero eso no habría encajado en los 140 bytes.No me quedaba mucho espacio de todos modos, así que tuve que soltar la Julia roja para poner mis macros y tener un RNG más convencional (
time
d seed y realrand()
, ¡woohoo!).Vaya, falta algo. Obviamente, estos parámetros tienen que ser estáticos o, de lo contrario, tendrá algunos resultados extraños (pero divertido, tal vez investigaré un poco más tarde si encuentro algo interesante).
Así que aquí estamos, con solo canales verdes y azules:
Ahora agreguemos un patrón rojo simple para llenar el vacío. No es realmente imaginativo, pero no soy un programador gráfico ... todavía :-)
Y finalmente el nuevo código con parámetros aleatorios:
Todavía queda espacio ahora ...
fuente
Este es interesante porque no utiliza los parámetros i, j en absoluto. En cambio, recuerda el estado en una variable estática.
fuente
fuente
Buddhabrot (+ Antibuddhabrot)
Editar: ¡ Ahora es un Buddhabrot apropiado!
Editar: logré limitar la intensidad del color dentro del límite de bytes, por lo que no hay más píxeles falsamente negros debido al desbordamiento.
Tenía muchas ganas de parar después de las cuatro ... pero ...
Esto se comprime ligeramente durante la carga (y se reduce al incrustar), por lo que si desea admirar todos los detalles, aquí está el interesante 512x512 recortado (que no se comprime y se muestra en su tamaño completo):
Gracias a githubphagocyte por la idea. Esto requirió un abuso bastante complicado de las tres funciones de color:
Quedan algunos bytes para un mejor esquema de color, pero hasta ahora no he encontrado nada que supere la imagen en escala de grises.
El código que se proporciona utiliza 4096x4096 puntos de partida y realiza hasta 500,000 iteraciones en cada uno de ellos para determinar si las trayectorias escapan o no. Eso tomó entre 6 y 7 horas en mi máquina. Puede obtener resultados decentes con una cuadrícula de 2k por 2k y 10k iteraciones, lo que lleva dos minutos, e incluso solo una cuadrícula de 1k por 1k con 1k iteraciones se ve bastante bien (eso lleva unos 3 segundos). Si desea jugar con esos parámetros, hay algunos lugares que deben cambiar:
5e5
enBL
a su cuenta de iteración.4096
enRD
que la resolución deseada y1024.
enGR
el mismo factor para mantener la escala correcta.return c[i][j]
enGR
ya que sólo contiene el número absoluto de visitas de cada píxel. El color máximo parece ser mayormente independiente del recuento de iteraciones y se escala linealmente con el número total de puntos de partida. Entonces, si desea usar una cuadrícula de 1k por 1k, es posible que deseereturn c[i][j]*16;
o similar, pero ese factor a veces necesita un poco de violín.Para aquellos que no están familiarizados con el Buddhabrot (como yo hace un par de días), se basa en el cálculo de Mandelbrot, pero la intensidad de cada píxel es la frecuencia con la que se visitó ese píxel en las iteraciones de las trayectorias de escape. Si estamos contando las visitas durante las trayectorias que no escapan, es un Antibuddhabrot. Existe una versión aún más sofisticada llamada Nebulabrot, donde utiliza una profundidad de recursión diferente para cada canal de color. Pero se lo dejaré a otra persona. Para más información, como siempre, Wikipedia .
Originalmente, no distinguí entre las trayectorias de escape y las de no escape. Eso generó una trama que es la unión de un Buddhabrot y un Antibuddhabrot (como lo señala el githubphagocyte).
Esta se parece un poco a una fotografía desvaída ... Me gusta eso.
fuente
Pentágono de Sierpinski
Es posible que hayas visto el método del juego del caos para aproximar el Triángulo de Sierpinski al trazar puntos a la mitad de un vértice elegido al azar. Aquí he tomado el mismo enfoque usando 5 vértices. El código más corto en el que podía establecerme incluía la codificación rígida de los 5 vértices, y no había forma de que lo ajustara todo en 140 caracteres. Así que delegué el componente rojo a un fondo simple, y usé el espacio libre en la función roja para definir una macro para que las otras dos funciones también sean inferiores a 140. Entonces, todo es válido a costa de no tener un componente rojo en el pentágono.
Gracias a Martin Büttner por la idea mencionada en los comentarios de la pregunta sobre la definición de una macro en una función para luego usarla en otra, y también por usar la memorización para llenar los píxeles en un orden arbitrario en lugar de estar restringida al orden ráster de la función principal .
La imagen tiene más de 500 KB, por lo que se convierte automáticamente a jpg por intercambio de pila. Esto difumina algunos de los detalles más finos, por lo que también he incluido solo el cuarto superior derecho como png para mostrar el aspecto original:
fuente
Partitura
La música de Sierpinski. : D Los chicos en el chat dicen que se parece más al papel perforado para cajas de música.
Algunos detalles sobre cómo funciona ... um, en realidad es solo un acercamiento en una representación de algunos triángulos ondulados de Sierpinski. El aspecto de la partitura (y también el bloqueo) es el resultado del truncamiento de enteros. Si cambio la función roja a, digamos,
se elimina el truncamiento y obtenemos el render de resolución completa:
Entonces sí, eso es interesante.
fuente
Generador de diagrama de Voronoi al azar alguien
OK, este me hizo pasar un mal rato. Sin embargo, creo que es bastante bueno, incluso si los resultados no son tan artísticos como otros. Ese es el trato con la aleatoriedad. Tal vez algunas imágenes intermedias se vean mejor, pero realmente quería tener un algoritmo completamente funcional con diagramas voronoi.
Editar:
Este es un ejemplo del algoritmo final. La imagen es básicamente la superposición de tres diagramas voronoi, uno para cada componente de color (rojo, verde, azul).
Código
versión no comentada y comentada al final
Me tomó muchos esfuerzos, así que tengo ganas de compartir los resultados en diferentes etapas, y hay algunos buenos (incorrectos) para mostrar.
Primer paso: coloque algunos puntos al azar, con
x=y
Lo he convertido a jpeg porque el png original era demasiado pesado para cargar (
>2MB
), ¡apuesto a que son más de 50 tonos de gris!Segundo: tener una mejor coordenada y
No podía permitirme tener otra tabla de coordenadas generada aleatoriamente para el
y
eje, por lo que necesitaba una forma simple de obtener las " aleatorias " en la menor cantidad de caracteres posible. Fui a usar lax
coordenada de otro punto en la tabla, haciendo un bitAND
a bit en el índice del punto.3 °: no recuerdo pero se está poniendo bien
Pero en este momento tenía más de 140 caracteres, así que necesitaba jugar golf bastante.
4to: líneas de escaneo
Es broma, esto no es deseable, pero me parece genial.
Aún trabajando para reducir el tamaño del algoritmo, me enorgullece presentar:
Edición StarFox
Voronoi instagram
5to: aumentar el número de puntos
Ahora tengo un código funcional, así que pasemos de 25 a 60 puntos.
Eso es difícil de ver desde una sola imagen, pero los puntos están casi todos ubicados en el mismo
y
rango. Por supuesto, no cambié la operación bit a bit,&42
es mucho mejor:Y aquí estamos, en el mismo punto que la primera imagen de esta publicación. Ahora expliquemos el código para los raros que estarían interesados.
Código sin golf y explicado
Gracias por leer hasta ahora.
fuente
El fractal de Lyapunov
La cadena utilizada para generar esto fue AABAB y el espacio del parámetro fue [2,4] x [2,4]. ( explicación de la cadena y el espacio de parámetros aquí )
Con espacio de código limitado, pensé que este color era bastante genial.
También hice una variación del conjunto de Mandelbrot. Utiliza un mapa similar al conjunto de mapas de Mandelbrot. Digamos que M (x, y) es el mapa de Mandelbrot. Entonces M (sin (x), cos (y)) es el mapa que uso, y en lugar de verificar los valores de escape, uso x e y, ya que siempre están delimitados.
EDITAR
Después de mucho dolor finalmente pude crear un gif de la segunda imagen transformándose. Aquí está:
fuente
Porque los unicornios.
No pude obtener la versión de OP con
unsigned short
y valores de color de hasta 1023 funcionando, así que hasta que se solucione, aquí hay una versión conchar
un valor de color máximo de 255.fuente
Colinas logísticas
Las funciones
Sin golf
Todos los #defines son para encajar BL bajo 140 caracteres. Aquí está la versión no adaptada del algoritmo azul, ligeramente modificada:
Donde los valores de x caen con mayor frecuencia para un determinado r (valor j), la gráfica se vuelve más clara (generalmente representada como más oscura).
fuente
Difusión limitada agregación
Siempre me ha fascinado la agregación limitada por difusión y la cantidad de formas diferentes en que aparece en el mundo real.
Me resultó difícil escribir esto en solo 140 caracteres por función, así que tuve que hacer que el código fuera horrible (o hermoso, si te gustan cosas como
++d%=4
yfor(n=1;n;n++)
). Las tres funciones de color se llaman entre sí y definen macros para que se usen, por lo que no se lee bien, pero cada función tiene poco menos de 140 caracteres.Para visualizar cómo las partículas se agregan gradualmente, produje instantáneas a intervalos regulares. Cada cuadro se produjo reemplazando el 1 en
for(n=1;n;n++)
con 0, -1 << 29, -2 << 29, -3 << 29, 4 << 29, 3 << 29, 2 << 29, 1 << 29, 1. Esto lo mantuvo justo por debajo del límite de 140 caracteres para cada ejecución.Puede ver que los agregados que crecen cerca uno del otro se privan de partículas y crecen más lentamente.
Al hacer un ligero cambio en el código, puede ver las partículas restantes que aún no se han unido a los agregados. Esto muestra las regiones más densas donde el crecimiento ocurrirá más rápidamente y las regiones muy dispersas entre los agregados donde no puede ocurrir más crecimiento debido a que todas las partículas se han agotado.
Esto se puede animar de la misma manera que antes:
fuente
Espiral (140 exactamente)
Esto es exactamente 140 caracteres si no incluye los encabezados y paréntesis de la función. Es tanta complejidad espiral que podría encajar en el límite de caracteres.
Gradualmente construí una espiral simple, agregué patrones a los bordes de la espiral y experimenté cómo se podían combinar diferentes espirales para que se vieran geniales. Aquí hay una versión sin golf con comentarios que explican lo que hace cada pieza. Jugar con los parámetros puede producir algunos resultados interesantes.
Jugar con los parámetros:
Aquí, las espirales están alineadas pero tienen diferentes patrones de borde. En lugar de los bordes en bloque en el ejemplo principal, esto tiene bordes completamente compuestos de ondas sin.
Aquí, el gradiente ha sido eliminado:
Una animación (
que por alguna razón no parece estar repitiéndose después de haberla cargado, lo siento. Además, tuve que reducirla. Simplemente ábrala en una nueva pestaña si se perdió la animación):Y aquí está el álbum de imgur con todas las imágenes. Me encantaría ver si alguien puede encontrar otros patrones espirales geniales. Además, debo decir que este es, con mucho, uno de los desafíos más geniales que he visto aquí. ¡Disfrutar!
EDITAR: Aquí hay algunos fondos hechos de estas espirales con parámetros alterados.
Además, al combinar mis patrones de borde en espiral con algunos de los fractales que he visto aquí mediante el uso de xor / y / u operaciones, aquí hay una espiral final:
fuente
Homenaje a un clásico
V1 : Inspirado por "Be happy" de DreamWarrior, este envío directo incorpora una pequeña imagen de pixel art en cada canal de color. ¡Ni siquiera tuve que jugar golf el código!
V2 : ahora con un código considerablemente más corto y un borde negro grueso que aísla solo la "pantalla del juego".
V3 : nave espacial, bala, alienígenas dañados y borde azul, ¡ay! Tratando de apuntar a esto , más o menos.
Me topé con una edición de Umber Ferrule cuyo avatar me inspiró a agregar otra entrada basada en pixel art. Dado que la idea central del código es muy similar a la de Space Invaders, la agrego a esta entrada, aunque las dos definitivamente tenían diferentes puntos desafiantes. Para este, obtener el rosa correcto (a expensas del blanco) y el hecho de que es un sprite bastante grande probaron ser buenos desafíos. Los escapes hexadecimales (
\xFF
etc.) en el canal rojo representan sus caracteres correspondientes en el archivo fuente (es decir, el canal rojo en el archivo fuente contiene datos binarios), mientras que los escapes octales son literales (es decir, están presentes en el archivo fuente).fuente
Pintura de acción
Quería intentar recrear algo similar al trabajo de Jackson Pollock : gotear y verter pintura sobre un lienzo horizontal. Aunque me gustaron los resultados, el código fue demasiado largo para publicarlo en esta pregunta y mis mejores esfuerzos solo lo redujeron a unos 600 bytes. Entonces, el código publicado aquí (que tiene funciones de 139 bytes, 140 bytes y 140 bytes respectivamente) fue producido con una enorme cantidad de ayuda de algunos de los genios en el chat . Muchas gracias a:
para una implacable sesión de golf grupal.
La macro E (q) se usa en las funciones RD y GR. Cambiar el valor del argumento cambia la forma en que cambian los componentes rojo y verde de los colores. La macro J termina con un número que se utiliza para determinar cuánto cambia el componente azul, lo que a su vez afecta a los componentes rojo y verde porque se calculan a partir de él. He incluido algunas imágenes con los argumentos rojo y verde de E variados para mostrar la variedad de combinaciones de colores posibles. Desplácese sobre las imágenes de los valores rojo y verde si desea ejecutarlas usted mismo.
Todas estas imágenes se pueden ver a tamaño completo si las descarga. El tamaño del archivo es pequeño ya que el color plano se adapta al algoritmo de compresión PNG, por lo que no se requirió compresión con pérdida para cargarlo en el sitio.
Si desea ver imágenes de varias etapas en el proceso de golf mientras probamos diferentes cosas, puede mirar en el chat de pintura de acción .
fuente
Pensé que jugaría con los parámetros de este código ... Todo el crédito va a @Manuel Kasten. Estos son tan geniales que no pude resistir publicar.
BubbleGumRupture http://i57.tinypic.com/3150eqa.png
SeussZoom http://i59.tinypic.com/am3ypi.png
SeussEternalForest http://i61.tinypic.com/35akv91.png
fuente
Editar: Esta es ahora una respuesta válida, gracias a las declaraciones directas de
GR
yBL
.¡Divirtiéndose con la secuencia Q de Hofstadter! Si usamos la distancia radial desde algún punto como entrada y la salida como color inverso, obtenemos algo que parece vinilo coloreado.
La secuencia es muy similar a la secuencia de Fibonacci, pero en lugar de retroceder 1 y 2 pasos en la secuencia, toma los dos valores anteriores para determinar qué tan lejos retroceder antes de tomar la suma. Crece más o menos lineal, pero de vez en cuando hay una explosión de caos (a intervalos crecientes) que luego se establece en una secuencia casi lineal nuevamente antes de la próxima explosión:
Puede ver estas ondas en la imagen después de las regiones que se ven muy "planas" en color.
Por supuesto, usar solo un color es aburrido.
Ahora para el código. Necesito la función recursiva para calcular la secuencia. Para hacer eso lo uso
RD
siempre quej
sea negativo. Desafortunadamente, eso no deja suficientes caracteres para calcular el valor del canal rojo en sí, por lo queRD
a su vez llamaGR
con un desplazamiento para producir el canal rojo.Por supuesto, este es el uso más simple posible de la secuencia, y quedan muchos caracteres. ¡Siéntase libre de pedirlo prestado y hacer otras locuras con él!
Aquí hay otra versión donde el límite y los colores están determinados por la secuencia Q. En este caso, había suficiente espacio
RD
para que ni siquiera necesitara la declaración de avance:fuente
Esto calcula la transformación de Joukowsky de un conjunto de círculos concéntricos centrados en un punto ligeramente desplazado del origen. Modifiqué ligeramente las intensidades en el canal azul para dar un poco de variación de color.
fuente
C objetivo
Reescribí el código C ++ en Objective-C porque no pude compilarlo ... Dio los mismos resultados que otra respuesta cuando se ejecutaba en mi iPad, así que eso está bien.
Aquí está mi presentación:
El código detrás de esto es bastante simple:
Puede ampliar los cuadrados multiplicando
i
yj
por0.5
,0.25
etc. antes de que se procesen.fuente
x^(x-y)^y
(esto también me quitó la primera vez). Si tiene capacidades de iOS, aquí está mi código: gist.github.com/Jugale/28df46f87037d81d2a8fSalpicadura de pintura de Sierpinski
Quería jugar más con los colores, así que seguí cambiando mi otra respuesta (la swirly) y finalmente terminé con esto.
Es mi avatar ahora. :PAGS
fuente
Me siento obligado a enviar esta entrada que llamaré "comportamiento indefinido", que ilustrará lo que hace su compilador con funciones que se supone que devuelven un valor pero no:
Todos los píxeles negros:
Píxeles seudoaleatorios:
Y, por supuesto, una gran cantidad de otros posibles resultados dependiendo de su compilador, computadora, administrador de memoria, etc.
fuente
maravilloso
Solo algunos trigonometría y extraños trucos macro.
RD:
GRAMO:
LICENCIADO EN DERECHO:
EDITAR: si
M_PI
no está permitido debido a que solo está presente en los sistemas compatibles con POSIX, se puede reemplazar con el literal3.14
.fuente
acos(-1)
es un buen reemplazo paraM_PI
.No soy bueno en matemáticas. Siempre fui un estudiante pobre en la clase de matemáticas. Así que hice uno simple.
Usé el código Javascript modificado de user1455003 . Y este es mi código completo .
Es muy corto, por lo que las tres funciones encajan en un solo tweet.
Otras funciones muy cortas. Encontré este patrón sierpinski (y algún patrón tangente) mientras jugaba con varias funciones matemáticas. Este es el código completo
fuente
i&j
representa el triángulo de Sierpinski en realidad. Lo cual es asombroso .JavaScript
Otra version. Los cuerpos funcionales son tuiteables.
Función de renderizado de imagen revisada. draw (rgbFunctions, setCloseEvent);
Púrpura
fuente
Pintor planetario
Inspirado por la entrada obviamente impresionante de Martin , esta es una versión diferente. En lugar de sembrar aleatoriamente una parte de los píxeles, comienzo con la esquina superior izquierda como RGB (512,512,512), y tomo caminatas aleatorias en cada color desde allí. El resultado parece algo de un telescopio (imo).
Cada píxel toma el promedio de los píxeles arriba / a la izquierda y agrega un poco al azar. Puedes jugar con la variabilidad cambiando la
p
variable, pero creo que lo que estoy usando es un buen equilibrio (principalmente porque me gusta el azul, por lo que una mayor volatilidad de desenfoque da buenos resultados).Hay un ligero sesgo negativo de la división de enteros al promediar. Sin embargo, creo que funciona y le da un bonito efecto de oscurecimiento a la esquina inferior.
Por supuesto, para obtener más que un solo resultado, deberá agregar una
srand()
línea a su función principal.fuente
Olas reflejadas
Un patrón básico de tablero de ajedrez distorsionado de acuerdo con la posición de una ola que se expande desde un punto como una piedra caída en un estanque (¡muy lejos de ser físicamente exacto!). La variable
w
es el número de píxeles desde ese punto que la onda se ha movido. Siw
es lo suficientemente grande, la onda se refleja desde los lados de la imagen.w
= 225w
= 360w
= 5390Aquí hay un GIF que muestra una sucesión de imágenes a medida que la ola se expande. He proporcionado varios tamaños diferentes, cada uno de los cuales muestra tantos fotogramas como lo permita el límite de tamaño de archivo de 500 KB.
Si puedo encontrar una manera de encajar, idealmente quisiera modelar la interferencia de las olas para que las olas se vean más realistas cuando se crucen. Sin embargo, estoy satisfecho con la reflexión.
Tenga en cuenta que realmente no he modelado la reflexión de onda en 3 lotes de 140 bytes. Realmente no hay ningún reflejo, simplemente parece que es así. He escondido la explicación en caso de que alguien quiera adivinar primero:
fuente