Ooh! Как насчет этого!
(Очень волнообразно, поскольку я не знаю, квадратная ли у вас матрица или что-то в этом роде ... Я предполагаю, что это так.)
Скажем, у вас есть массив 1000x1000, в который вы хотите поместить 47 точек (я выбираю 47, так что это необычное число, которое не подходит "красиво").
Вы берете ceil (sqrt (47)) ... который даст вам значение (7). Таким образом, мы делаем квадрат 7х7, заполняем его 47 пикселями (некоторые пустые) и представляем, что помещаем его в угол массива.
Теперь переведите каждый из этих пикселей в новое место, основываясь на том, где они находятся в маленьком (7x7) массиве, в большой массив (1000x1000). Простое уравнение должно сделать это для вас ... для координаты X, например:
xBigArrayIndex = xSmallArrayIndex * 1000 / 7;
Тогда ваши пиксели будут очень размазаны! И это приятно и быстро.
Единственный недостаток - это то, что это прекрасно работает только тогда, когда ваш квадрат идеально расположен с начала ... если вы заполните его наивно (начиная с верхнего левого угла, пересекаясь и т. Д.), Вы получите немного неидеальный спред ... так как переведенные пиксели не дойдут до правого нижнего края большого массива. Но может быть, это достаточно хорошо? А если нет, то, возможно, легче разобраться с меньшей частью проблемы?