Да. Чем меньше у вас точек, тем больше они будут образовывать кластеры.
Чтобы избежать этого, вы можете использовать «стратифицированную выборку». это в основном означает, что вы делите свою поверхность равномерно на более мелкие области и размещаете свои точки там.
Для вашего примера вы бы поделили квадрат на n * n подквадрат. Каждая точка будет размещена случайным образом внутри своего квадрата. Вы можете даже настроить коэффициент случайности, чтобы сделать шаблон более или менее случайным / регулярным:
// I assume random() return a number in the range [0, 1).
float randomnessFactor = 0.5;
int n = 100;
for(int ySub=0; ySub<n; ++ySub){
for(int xSub=0; xSub<n; ++xSub){
float regularity = 0.5 * (1-randomnessFactor)
x = regularity + randomnessFactor * random() + xSub / (float) (n-1);
x = regularity + randomnessFactor * random() + xSub / (float) (n-1);
plot(x, y);
}
}
Причина, по которой это работает, в том, что вы на самом деле не хотите случайности. (Глыбы являются случайными.) Вы хотите, чтобы точки распределялись равномерно, но без регулярного шаблона. Размещение точек на сетке и их смещение немного скрывают регулярность.