《见缝插圆》顾名思义,就是在我们绘制的c语言窗口里面画随机圆,圆与圆之间不能相交或相切,那就要自己找“缝隙”咯!
今天用c语言制一些漂亮的随机图案,如图所示,随机生成的圆互不相交且尽量填满画布,按空格键可以切换不同的绘制模式:
首先利用数组实现多个圆的生成和绘制,并使得圆和圆之间不相交;然后学习函数的概念,并应用函数改进代码,添加了新圆半径最大化的功能;最后利用函数封装了多种绘制模式,并通过键盘按键进行互动。
源码示例:
#include #include #include #include #include // 求解两个点之间的距离float dist2points(float x1,float y1,float x2,float y2){ float result; result = sqrt((x1 - x2)*(x1 - x2) + (y1 - y2)*(y1 - y2)); return result;}// 判断两个圆是否相交int istwocirclesintersect(float x1,float y1,float r1,float x2,float y2,float r2){ if (dist2points(x1,y1,x2,y2)0) { float h = rand()%360; colorref color = hsvtorgb(h,0.6,0.8); setlinecolor(rgb(255,255,255)); setfillcolor(color); fillcircle(x,y,r); r=r-5; }}// 随机颜色同心圆线条绘制void drawcircles4(float x,float y,float r){ while (r>0) { float h = rand()%360; colorref color = hsvtorgb(h,0.9,0.8); setlinecolor(color); circle(x,y,r); r=r-5; }}int main() // 主函数{ int width = 600; // 窗口宽度 int height = 600; // 窗口高度 initgraph(width,height); // 新开一个窗口 setbkcolor(rgb(255,255,255)); // 背景颜色为白色 cleardevice(); // 以背景颜色清空背景 srand(time(0)); // 随机种子函数 int xarray[1000]; // 数组存储所有圆心的x坐标 int yarray[1000]; // 数组存储所有圆心的y坐标 int rarray[1000]; // 数组存储所有圆的半径 int rmin = 8; // 圆的最小半径 int rmax = 50; // 圆的最大半径 int circlenum = 0; // 生成的圆的个数 float x,y,r; // 新增圆的圆心坐标、半径 int isnewcircleok; // 用于判断新生成的圆是否可以了 int i,j; int drawmode = 3; // 用于设定4种不同的绘制模式,开始设为3 while (circlenum4) // 如果大于4,重新回到第1种绘图模式 drawmode = 1; } } x = rand() % width; // 新圆的圆心x坐标 y = rand() % height; // 新圆的圆心y坐标 r = rmin; // 新圆的半径开始设为最小半径 for (i=0;i
希望对大家有帮助!
搭乘物联网“东风” MCU主宰低功耗市场
小米6新品手机黑科技频发,6不6?
温湿度传感器在孵化室中的应用
为什么服务器位置在网站中很重要
佰维存储荣膺“2023年度中国物联领航企业”
C语言实现见缝插圆游戏!零基础代码思路+源码分享
TOP224P构成的12V、20W开关直流稳压电源电路
性价比最高处理器和国产处理器I.MX6UL/A40I/T3对比
聚合物锂电池作为无人机的电池的优势分析
简易Arduino电子锁DIY图解
智能变电站相较传统变电站的优势
2020年全球物联网市场对电池需求增至159亿美元,CAGR达到11.6%
如何注册及使用ChatGPT?【服务器篇】
5G多天线在小型蜂窝基站中的应用
5G商用来临之前还将面临哪些安全问题?
2023中国国际计量展部分参展商名单抢先看
台积电5纳米EUV芯片已开始生产 全球仅两家能做到
歌尔股份牵头制定全球首个近耳声学技术标准
陕西移动联合国内产业链数家单位成立“5G+智慧矿山产业联盟”
10大统计事实:排名前20的科学家大多从事人工智能