C++实现基于EASYX库扫描线算法
本文实例为大家分享了C++实现基于EASYX库扫描线算法的具体代码,供大家参考,具体内容如下
扫描线算法的基本原理
*作者在扫描线算法的基础上自己设计的更易于理解的地物填充绘制算法
流程图
代码
#include//#include #include usingnamespacestd; //-----------------------------草图形-----------------------------// voidGrass(doublex,doubley,doublehight,doublewidth) { setlinecolor(GREEN); line(x,y,x-hight/2,y-width); line(x,y,x,y-width); line(x,y,x+hight/2,y-width); } //-----------------------------林图形-----------------------------// voidTree(doublex,doubley,doublehight,doublewidth) { setlinecolor(GREEN); line(x,y,x-hight/2,y-width); line(x,y,x+hight/2,y-width); line(x,y-width,x,y+width); } //------------------求解方程的k,b值---------------------// voidfunction_line(doublex1,doubley1,doublex2,doubley2,double&k,double&b) { if(x2-x1==0){ k=-9999; b=x1; return; } k=(y2-y1)/(x2-x1); b=y1-k*x1; } //------------------返回直线的y----------------------// doublesolve_y(doublek,doubleb,doublex) { returnk*x+b; } //------------------返回直线的x----------------------// doublesolve_x(doublek,doubleb,doubley) { if(k==-9999) returnb; return(y-b)/k; } //-------------------找出扫描线与边界相交的点,并储存在suitable_x[]中,把相交的点数储存在n中--------------// //x[]-----------顶点x坐标 //y[]-----------顶点y坐标 //N-------------顶点的个数 //now_y---------当前的扫描线y //suitable_x[]--扫描线与边界相交的点的x坐标 //n-------------相交的点数 voidSuitable_x(doublex[],doubley[],intN,doublenow_y,doublesuitable_x[],int&n) { n=0; intt=0; doublek,b; for(inti=0;i suitable_x[j]){ doubletemp=suitable_x[i]; suitable_x[i]=suitable_x[j]; suitable_x[j]=temp; } } } } doublefind_max(doubleelem[],intN)//输出最大的元素值 { doublemax=elem[0]; for(inti=0;i max) { max=elem[i]; } } returnmax; } doublefind_min(doubleelem[],intN)//输出最小的元素值 { doublemin=elem[0]; for(inti=0;i >N; cout<<"依次输入地物的顶点坐标:"; for(inti=0;i >x[i]; cout<<"y=";cin>>y[i];*/ } cout<<"选择您填充的地物:整个区域单颜色充填---请按0;草地---请按1;林地---请按2;";cin>>ch; if(ch==0) { cout<<"请选择颜色:BLACK黑,DARKGRAY深灰绿色BLUE蓝LIGHTBLUE亮蓝:GREEN绿CYAN青RED红MAGENTA紫BROWN棕YELLOW黄LIGHTGRAY浅灰---注意是大写的英文\n"; cout<<"如果想让颜色变亮请在颜色的前面加上LIGHT\n"; cout<<"请输入颜色:"; cin>>color; } initgraph(find_max(x,N)+100,find_max(y,N)+100); //intN=9; //doublex[50]={200,100,150,170,400,350,300,250,270}; //doubley[50]={200,300,400,250,350,300,250,100,270}; doublenew_y[50]={0}; intn=0; doublesuitable_x[10]; //草的参数 inthight=12, width=6; intspace=4;//草之间的间隔 setbkcolor(WHITE);//设置背景色 cleardevice();//用背景色填充屏幕 setlinecolor(BLACK);//多边形的线条颜色 for(inti=0;i 实现效果
谢谢阅读,欢迎来一起交流,一起学习!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。