C 如何为绘制相同位图随机选择屏幕位置

C 如何为绘制相同位图随机选择屏幕位置,c,math,random,graphics,bitmap,C,Math,Random,Graphics,Bitmap,我试图在屏幕上的任意位置绘制一个20x20大小的位图。我希望位图不应该相互重叠,应该均匀分散 为了实现这一点,我将生成如下职位- void function() { int bitmap_size = 20*20; int i, width = 320, height = 480; int numslots = width*height/bitmap_size; int *array = malloc(sizeof(int)*numslots); for(i=0;

我试图在屏幕上的任意位置绘制一个20x20大小的位图。我希望位图不应该相互重叠,应该均匀分散

为了实现这一点,我将生成如下职位-

void function() {
   int bitmap_size = 20*20;
   int i, width = 320, height = 480;
   int numslots = width*height/bitmap_size;

   int *array = malloc(sizeof(int)*numslots);
   for(i=0; i<numslots; i++)
      array[i] = i;

   // Randomize pixel indices
   for(i=0; i<numslots; i++) {
      int x = (rand()%(numslots-i)) + i;
      swap(array+i, array+x);
   }

   // Generate positions for 20 bitmaps
   for(i=0; i<20; i++) {
      int pos = array[i];
      pos *= bitmap_size;
      int y = pos / height;
      int x = pos % width;
      printf("%d, %d\n", x, y);
   }

   free(array);
}
3个位置位于x=240,5个位置分别位于x=160和x=0,7个位置位于x=80。如何为位图生成更均匀分散的位置

将整个屏幕划分为平铺: 0,0-20,20瓦0 21,0-21,20瓷砖1 ... 299,0-319,20瓦14 0,20-20,40瓷砖15 ... 299459-319478瓷砖383

创建一个大小为384的数组,使arr[i]=i int-arr[384]; 对于int i=0;i<384;i++{ arr[i]=i; }

将数组的内容随机化: void randomizeint arr[],整数大小{ 对于int i=size-1;i>0;i-{ int place=randi; 调剂和调剂[i],&arr[place]; } }

使用数组前3个单元格的内容选择在步骤1中设置的平铺


均匀分散?对于int i=尺寸;i>0;当您使用&arr[i]时,i-{将在数组外建立索引。感谢您的帮助,修改了答案。
240, 85
160, 255
80, 37
240, 115
80, 280
160, 118
0, 223
80, 170
80, 147
240, 45
0, 253
160, 225
160, 261
0, 66
80, 230
80, 30
0, 236
80, 27
160, 238
0, 200