#include "stdafx.h"
#include <iostream>
#include <graphics.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int width,height;
width=800;height=600;
initgraph(width,height);
setbkcolor(WHITE);
cleardevice();
int xArray[200],yArray[200],rArray[200],circleNum,rmin,rmax;
circleNum=0;rmin=8;rmax=50;
float dist2;int isOk=1;float r2;
while(circleNum<200)
{
int x,y,r;
x=rand()%width;//是x不是xArray[i],先是尝试生成三个数值,满足不相交条件里再放进数组里
y=rand()%height;
r=rand()%(rmax+rmin-1)+rmin;//随机生成一个圆的数值
for(int i=0;i<circleNum;i++)//判断数组中的圆与新增的圆是否相交
{
dist2=pow(xArray[i]-x,2)+pow(yArray[i]-y,2);
r2=pow(rArray[i]+r,2);
if(dist2<r2)
{
isOk=0;//默认isOk=1;若相交的话就变为0;
break;//数组中有圆与尝试圆相交的话就直接跳出for循环,进入下面的if语句
}
}
if(isOk==1)/*上面for循环完了也没有出发isOk=0,就说明没有圆相交,不相交就把数值加入数组,然后画新增圆,
但是注意是isOk==1,不是isOk=1,否则判断无效*/
{
xArray[circleNum]=x;//是xArray[circleNum]而不是xArray[i],合格的数值是要放进数组中最新的空位里
yArray[circleNum]=y;
rArray[circleNum]=r;
setlinecolor(BLACK);
circle(xArray[circleNum],yArray[circleNum],rArray[circleNum]);
setfillcolor(YELLOW);
fillcircle(xArray[circleNum],yArray[circleNum],rArray[circleNum]);
circleNum++;
Sleep(30);//画一个圆就停一下,要不然会直接画完
}
else//相交的话就continue进入继续while循环
{
isOk=1;
}
}
_getch();
closegraph();
return 0;
}