




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
#include #include /#include #include #include /creat a stack struct stack_node int x; int y; struct stack_node *next; ; typedef stack_node stack_list; typedef stack_list *link; link stack = 0; /push an element void push(int xx,int yy) link new_node; new_node=(stack_list *)malloc(sizeof(stack_list); new_node-x=xx; new_node-y=yy; new_node-next=stack; stack=new_node; /pop an element void pop(int &xx,int &yy) link top; top=stack; xx=stack-x; yy=stack-y; stack=stack-next; free(top); /fill the plot void fill(int x,int y) int x0,y0,xl,xr,xlold,xrold;/*x0,y0用来标记x,y的值,xl记录x的最左值,xr记录x的最右值*/ int go=0,go2=0; int i=0; push(x,y);/种子像素入栈 while(stack!=0)/如果栈不空则循环,stack=0表示栈空 go=0;/go 只是一个标记 pop(x,y); putpixel(x,y,RED); x0=x+1; while(getpixel(x0,y)!=RED)/fill right 填充右边 putpixel(x0,y,RED); x0=x0+1; xr=x0-1;/记录最右值 xrold=xr;/再记录一次最右值,以备后用 x0=x-1; while(getpixel(x0,y)!=RED)/fill right 填充左边 putpixel(x0,y,RED); x0=x0-1; xl=x0+1;/记录最左值 xlold=xl;/再记录一次最左值,以备后用 y0=y+1;/go up 向上移一条扫描线 go2=0;/go2 也只是一个用来标记的变量 while(xrxl&go=0)/查找上一条线的最右值,并记录为xr if(getpixel(xr,y0)=RED) xr=xr-1; else go=1;/若go=1这句执行的话就说明找到了最右值,并在while中的go=0中判断并退出while while(xlxr&go2=0)/查找上一条线的最左值,并记录为xl if(getpixel(xl,y0)=RED) xl=xl+1; else go2=1;/go2=1这句执行就说明找到了最左值,并在此while中的go2=0中退出while if(go=1&go2=1)/如果找到了最左值各最右值,则执行下面的语句 push(xr,y0);/先将上一条线上的最右点作为种子点入栈 for(i=xl;ixl&go=0)/找下一条线的最右 if(getpixel(xr,y0)!=4) go=1; else xr-; while(xlxr&go2=0)/找下一条线的最左 if(getpixel(xl,y0)!=RED) go2=1; else xl+; if(go=1&go2=1)/如果找到最左和最右,则执行 /push(xl,y0); push(xr,y0); for(i=xl;i=xr;i+) if(getpixel(i,y0)!=RED) else if(getpixel(i-1,y0)!=RED) push(i-1,y0); void main() /void fill(int x,int y); int gdriver,gmode;/*显示模式*/ int i,j; int n,px,py,px0,py0,px1,py1; int ya=0,yi=500; printf(pleas input the number of the top points:); scanf(%d,&n); for(i=0;in;i+)/从键盘接受各顶点的坐标,依次入栈,并记录最大Y值和最小Y值 printf(please input the coordinate of the points-like:100,200 :); scanf(%d,%d,&px,&py); if(yapy) yi=py;/yi是最小Y值 push(px,py); /detectgraph(&gdriver,&gmode); initgraph(&gdriver,&gmode,c:bc31bgi); setbkcolor(0); cleardevice(); setcolor(RED); pop(px0,py0);/输入的最后一个顶点出栈 px=px0; py=py0;/记录最后一个顶点 /draw the plot while(stack != 0) pop(px1,py1); line(px0,py0,px1,py1); px0=px1; py0=py1; Sleep(500); line(px0,py0,px,py);/依次画线,画出多边形 /画完多边形后,栈为空 /find the y value j=(ya+yi)/2;/找Y的中间值,就是第一个种子点的Y值 i=0; n=0;/记录入栈个数 /find the seed element while(igetmaxx()&n!=2)/按X值从0到X最大值依次查找,并在入栈个数为2的时候退出 if(getpixel(i,j)=RED)/如果是多边形上的点,则入栈,用n记录入栈的个数 push(i,j); n=n+1; i=i+1;/i是记录当前的X值 pop(i,j);/第二个交点出栈 pop(n,j);/第一个交点出栈,虽然覆盖了Y值,但这不重要,我们要的是X值 i=(i+n)/2;/现在i是我们要找的种子点的X值 /fill t
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年事业单位工勤技能-北京-北京汽车驾驶与维修员一级(高级技师)历年参考题库含答案解析
- 2025年中级卫生职称-主治医师-重症医学(中级)代码:359历年参考题库典型考点含答案解析
- 2025年通信专业技术-通信专业技术(中级)-中级通信专业技术(设备环境实务)历年参考题库含答案解析(5套)
- 2025年职业技能鉴定-汽轮机本体检修工-汽轮机本体检修工(高级)历年参考题库含答案解析(5套)
- 2025年职业技能鉴定-供水供应工-供水供应工证(高级)历年参考题库含答案解析(5套)
- 2025年综合评标专家-湖北-湖北综合评标专家(交通运输厅)历年参考题库含答案解析(5套)
- 热电厂锅炉安全知识培训课件
- 季氏将伐颛臾课件
- 烟草公司消防知识培训课件
- 烟花爆竹基础知识培训课件
- 2025全国小学生“学宪法、讲宪法”活动知识竞赛题库及答案
- 消防文员笔试题目及答案
- 胃肠镜检查的护理常规
- 东北区域风力发电场并网安全条件及评价实施细则
- 第三期团课课件乡村振兴中的青春力量-学习2025中央一号文件“千万工程”新阶段部署
- 儿童乐园室内装修施工方案
- 检验科标本保存制度
- 中国半导体热沉材料行业发展现状、市场前景、投资方向分析报告(智研咨询发布)
- 外研版高一到高三单词表
- 《园林绿化工程施工方案》知识培训
- 《鼻内镜上颌窦开放》课件
评论
0/150
提交评论