Xin chào, tôi đang gặp một số sự cố khi tạo các số ngẫu nhiên với C# Bây giờ tôi có chức năng này.Cuộc gặp gỡ ngẫu nhiên không quá ngẫu nhiên
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;
}
Bây giờ bạn có thể nhận thấy rằng có ALOT ngẫu nhiên mới() ở đó, đó là vì tôi muốn loại bỏ xác suất có thể là lỗi giống nhau.
Tôi hiện đang chạy chức năng này 8 lần, một vài lần. Bây giờ, đây là những điều đặt ra.
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
Như bạn có thể thấy điều này không phải ngẫu nhiên một lần nữa, nhưng tại sao liều này lại xảy ra? và làm thế nào tôi có thể chống lại nó?
Tôi đã có cùng một vấn đề này tạo ra các màu ngẫu nhiên trong một phạm vi chuẩn hóa. Cách nhanh chóng mà không cung cấp hạt giống là để hoán đổi một vài giá trị với nhau bằng cách sử dụng cùng một luồng ngẫu nhiên. Thiếu độ chính xác nhưng có thể được sử dụng để phân phối ngẫu nhiên nhiều hơn một chút. Ví dụ: int x = rng.Next()^rng.Next(); int magnitude = x * x; giá trị float = x/(float) độ lớn; –
Sử dụng phương pháp này, bạn có thể tạo phân phối màu tốt hơn một chút bằng cách sau. Màu = color = new Màu ( (byte) (rand.Next (0, 255)^rand.Next (0, 255)), (byte) (rand.Next (0, 255)^rand.Next (0, 255)), (byte) (rand.Next (0, 255)^rand.Next (0, 255)), (byte) (rand.Next (0, 255)^rand.Next (0 , 255))) –