//生成随机整数 int randbetween(int min, int max) { int r = rand() % (max - min + 1) + min; return 1; }
int main() { int width = 600; int height = 600; initgraph(width, height); setbkcolor(WHITE); cleardevice(); srand(time(0));
int xarray[100]; int yarray[100]; int rarray[100]; int rmin = 8; int rmax = 50; int circlenum = 0; float x, y, r;//新增圆的属性 int isnewcircleOK;//用于判断新生成的圆是否满足条件 int i = 0; while(circlenum<100){ isnewcircleOK = 0; while (isnewcircleOK == 0) { x = rand() % width; y = rand() % height; r = randbetween(rmin, rmax); for (i = 0; i < circlenum; i++) if (xiangjiao(xarray[i], yarray[i], rarray[i], x, y, r)) break; if (i == circlenum) isnewcircleOK = 1; } xarray[circlenum] = x; yarray[circlenum] = y; rarray[circlenum] = r; circlenum++; setlinecolor(RED); setfillcolor(YELLOW); fillcircle(x,y,r); Sleep(10); } _getch(); closegraph(); return 0;
}
4.新圆半径最大化
while(circlenum<100){ isnewcircleOK = 0; while (isnewcircleOK == 0) { x = rand() % width; y = rand() % height; r = rmin;//新圆的半径开始设置为最小半径
for (i = 0; i < circlenum; i++) if (xiangjiao(xarray[i], yarray[i], rarray[i], x, y, r)) break; if (i == circlenum) isnewcircleOK = 1; }
isnewcircleOK = 0;//继续设置为不ok,接下来要让这个新圆的半径最大 while (isnewcircleOK == 0 && r < rmax) { r++; for (int j = 0; j < circlenum; j++) { if (xiangjiao(xarray[i], yarray[i], rarray[i], x, y, r)) { isnewcircleOK = 1; break; } } }