12/01/2013, 12:34
|
| | Fecha de Ingreso: junio-2010 Ubicación: Madrid
Mensajes: 620
Antigüedad: 14 años, 5 meses Puntos: 73 | |
Respuesta: Números pseudoaleatorios más avanzados. Las imágenes no son similares, simplemente te lo parecen. Eso que has generado sería algo así como ruido blanco. Son muchos pixels, pero tu ojo lo capta como un todo y, en principio, no distingue detalles, por eso te parecen iguales (haz una comparación, pixel por pixel, entre dos imágenes, a ver cuántos pixels coinciden en posición y valores de color).
Por otro lado, tienes 8 bits por color (valores de 0 a 255), lo que da un total de 24 bits de color y de ahí los 16 y pico millones de colores que te pueden dar las tarjetas gráficas, pero "efectivos" (de cara a lo que ve el ojo) serán algunos menos, tengo entendido que el ojo humano solamente puede distinguir algo más de 60 tonos de un color determinado.
Además, efectivamente el random estandar de C (y supongo que el de C++) garantiza una distribución uniforme, entre 0 y RAND_MAX, que es una constante que está definida en stdlib.h. Pero ocurre que esta constante, por ejemplo en Gcc 4.4.1 (que es el que tengo actualmente instalado con Codeblocks) vale 0x7FFF, o 32767 (parece mentira, pero...), con lo que, en tu caso (cada imagen tiene algo más de 300000 pixels), sí que puede que haya tendencia a que aparezca alguna pauta.
La solución sería buscar algún generador de números aleatorios con un período mayor, buscando en la red será fácil encontrarlos. Aunque, de cara al ojo, no habrá mucha diferencia con lo que ya has obtenido.
Saludos, |