Hola estoy teniendo algunos problemas para generar números aleatorios con C# Ahora tengo esta función.Encuentro aleatorio no tan aleatorio
public Color getRandomColor()
{
Color1 = new Random().Next(new Random().Next(0, 100), new Random().Next(200, 255));
Color2 = new Random().Next(new Random().Next(0, 100), new Random().Next(200, 255));
Color3 = new Random().Next(new Random().Next(0, 100), new Random().Next(200, 255));
Color color = Color.FromArgb(Color1, Color2, Color3);
Console.WriteLine("R: " + Color1 + " G: " + Color2 + " B: " + Color3 + " = " + color.Name);
return color;
}
Ahora usted puede notar que hay una gran cantidad de nueva aleatorio() existe, es porque quiero eliminar a la probabilidad de que podría ser un ejemplo mismo error.
Ahora ejecuto esta función 8 veces, un par de veces. Ahora aquí están las salidas.
R: 65 G: 65 B: 65 = ff414141
R: 242 G: 242 B: 242 = fff2f2f2
R: 205 G: 205 B: 205 = ffcdcdcd
R: 40 G: 40 B: 40 = ff282828
R: 249 G: 249 B: 249 = fff9f9f9
R: 249 G: 249 B: 249 = fff9f9f9
R: 94 G: 94 B: 94 = ff5e5e5e
R: 186 G: 186 B: 186 = ffbababa
R: 142 G: 142 B: 142 = ff8e8e8e
R: 190 G: 190 B: 190 = ffbebebe
R: 19 G: 19 B: 19 = ff131313
R: 119 G: 119 B: 119 = ff777777
R: 119 G: 119 B: 119 = ff777777
R: 75 G: 75 B: 75 = ff4b4b4b
R: 169 G: 169 B: 169 = ffa9a9a9
R: 127 G: 127 B: 127 = ff7f7f7f
R: 73 G: 73 B: 73 = ff494949
R: 27 G: 27 B: 27 = ff1b1b1b
R: 125 G: 125 B: 125 = ff7d7d7d
R: 212 G: 212 B: 212 = ffd4d4d4
R: 174 G: 174 B: 174 = ffaeaeae
R: 0 G: 0 B: 0 = ff000000
R: 0 G: 0 B: 0 = ff000000
R: 220 G: 220 B: 220 = ffdcdcdc
Como puede ver, esto no es tan aleatorio de nuevo, pero ¿por qué ocurre esto? y ¿cómo puedo contrarrestarlo?
Tuve el mismo problema al generar colores aleatorios en un rango normalizado. Una manera rápida sin proporcionar una semilla es permutar un par de valores usando la misma secuencia aleatoria. Falta de precisión pero se puede usar para obtener una distribución aleatoria un poco más variada. P. ej. int x = rng.Next()^rng.Next(); int magnitud = x * x; valor flotante = x/(flotante) magnitud; –
Al usar este método, puede generar una distribución de color ligeramente mejor de la siguiente manera. Color = color = nuevo Color ( (byte) (rand.Next (0, 255)^rand.Next (0, 255)), (byte) (rand.Next (0, 255)^rand.Siguiente (0, 255)), (byte) (rand.Next (0, 255)^rand.Next (0, 255)), (byte) (rand.Next (0, 255)^rand.Next (0 , 255))) –