观看与网易云课堂的童晶老师的视屏教学
#include <graphics.h>
#include <conio.h>//Sleep()函数
#include <time.h>//srand()函数
#include <math.h>//sqrt()函数
//画黄色的圆
void DrawCicles1(float x,float y,float r)
{
setlinecolor(RGB(0,0,0));
setfillcolor((RGB(255,255,0)));
fillcircle(x,y,r);
}
//画随机圆
void DrawCicles2(float x,float y,float r)
{
float h=rand()%360;
COLORREF color=HSVtoRGB(h,0.6,0.8);
setlinecolor(RGB(255,255,255));
setfillcolor(color);
fillcircle(x,y,r);
}
//画同心圆
void DrawCicles3(float x,float y,float r)
{
while(r>0)
{
float h=rand()%300;
COLORREF color=HSVtoRGB(h,0.6,0.8);
setlinecolor(RGB(255,255,255));
setfillcolor(color);
fillcircle(x,y,r);
r-=5;
}
}
//画亮一点的同心圆
void DrawCicles4(float x,float y,float r)
{
while(r>0)
{
float h=rand()%300;
COLORREF color=HSVtoRGB(h,0.9,0.8);
setlinecolor(RGB(255,255,255));
setfillcolor(color);
fillcircle(x,y,r);
r-=5;
}
}
//计算两个圆心的距离
float Dis2Points(float x1,float y1,float x2,float y2)
{
float result;
result=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
return result;
}
//计算两个圆是否相交
int isTowCiclesIntersect(float x1,float y1,float r1,float x2,float y2,float r2)
{
if (Dis2Points(x1,y1,x2,y2)<r1+r2)
{
return 1;
}
return 0;
}
//随机生成圆的半径
int randBetweenMinMax(int min,int max)
{
int r=rand()%(max-min+1)+min;
return r;
}
int main()
{
int width=600;//画布宽
int height=600;//画布宽
initgraph(width,height);//生成画布
setbkcolor(RGB(255,255,255));//设置背景颜色
cleardevice();//清屏
srand(time(0));
int drawMode=0;//颜色选择模式
int xArray[200];//圆的x坐标数组
int yArray[200];//圆的y坐标数组
int rArray[200];//圆的半径坐标数组
int rmin=8;//圆的半径最小
int rmax=50;//圆的半径最大
int circleNum=0;//初始化圆的数量
float x,y,r;//新圆的x、y、r
int isNewCircleOk;//判断是否生成圆
int i,j;
while(circleNum<200)//圆的数量最多为200
{
isNewCircleOk=0;
while(isNewCircleOk==0)
{
if (kbhit())//空格改变颜色
{
char input=_getch();
if (input==' ')
{
circleNum=0;
cleardevice();
drawMode=drawMode+1;
if (drawMode>4)
{
drawMode=1;
}
}
}
//随机生成圆的对应坐标
x=rand()%width;
y=rand()%height;
r=rmin;
//判断两圆是否相交,如果相交就重新生成
for (i=0;i<circleNum;i++)
{
if (isTowCiclesIntersect(xArray[i],yArray[i],rArray[i],x,y,r))
{
break;
}
}
if (i==circleNum)
{
isNewCircleOk=1;
}
}
//这里是为了随机生成的圆大一点,尽量圆是相切
isNewCircleOk=0;
while (isNewCircleOk==0&&r<rmax)
{
r++;
for (j=0;j<circleNum;j++)
{
if (isTowCiclesIntersect(xArray[j],yArray[j],rArray[j],x,y,r))
{
isNewCircleOk=1;
break;
}
}
}
//重新生成的对应坐标复制
xArray[circleNum]=x;
yArray[circleNum]=y;
rArray[circleNum]=r;
circleNum++;
//这里是颜色模式选择
if (drawMode==1)
{
DrawCicles1(x,y,r);
}
if (drawMode==2)
{
DrawCicles2(x,y,r);
}
if (drawMode==3)
{
DrawCicles3(x,y,r);
}
if (drawMode==4)
{
DrawCicles4(x,y,r);
}
Sleep(100);//延时0.1秒
}
_getch();
closegraph();//关闭
return 0;
}
如有错误,地方请指教,主要作为个人学习记录