边缘填充算法
来源:互联网 发布:windows xp是什么意思 编辑:程序博客网 时间:2024/05/22 05:32
多边形的区域填充:边缘填充算法
边缘填充算法的基本思想是,逐边向右求补。可以按任意顺序处理多边形的每条边,在处理每条边时,首先求出该边与扫描线的交点,然后将每一条扫描线上交点右方的所有像素取补,多边形的所有边处理完毕之后,填充即完成
#include<stdio.h>#include<string.h>#include<stdlib.h>#include<math.h>#include<conio.h>#include<graphics.h>#define N 100000#define Min -99999999int n;//点的个数int right;//图像的右边界struct point //点的坐标{ int x;int y;}point[N];void init() //顺序输入点的坐标{int i; printf("请输入点的个数: ");scanf("%d",&n);right=Min;for(i=0;i<n;i++){scanf("%d %d",&point[i].x,&point[i].y); if(point[i].x>right)right=point[i].x;}point[n].x=point[0].x; //首位相接point[n].y=point[0].y;}void DDA(int x0,int y0,int x1,int y1)//用于绘制直线{int dx,dy,eps1,k;float x,y,xIncre,yIncre;int p,q;dx=x1-x0;dy=y1-y0;x=x0;y=y0;if(abs(dx)>abs(dy))eps1=abs(dx);elseeps1=abs(dy);xIncre=(float)dx/(float)eps1; yIncre=(float)dy/(float)eps1;for(k=0;k<=eps1;k++){p=(int)(x+0.5);q=(int)(y+0.5);if(getpixel(p,q)==BLUE) //背景色为蓝色,填充色为红色putpixel(p,q,RED);elseputpixel(p,q,BLUE);x+=xIncre;y+=yIncre;}}void sol1()//绘制该多边形的外轮廓{int i;int x0,y0,x1,y1;setbkcolor(BLUE);cleardevice();setcolor(RED);for(i=0;i<n;i++){ x0=point[i].x;y0=point[i].y;x1=point[i+1].x;y1=point[i+1].y;line(x0,y0,x1,y1);}}void sol2()//边缘填充算法{int x0,y0,x1,y1,i;int dx,dy,eps1,k;int p,q;int flag;int temp;float x,y,xIncre,yIncre;for(i=0;i<n;i++){x0=point[i].x;y0=point[i].y;x1=point[i+1].x;y1=point[i+1].y;if(y0>y1) //保证(x0,y0)在(x1,y1)的下面{temp=y0;y0=y1;y1=temp; temp=x0;x0=x1;x1=temp;}dx=x1-x0; dy=y1-y0; x=x0; y=y0;//注意这里和DDA算法不同,yIncre=1 //if(abs(dx)>abs(dy)) //eps1=abs(dx); //else eps1=abs(dy); xIncre=(float)dx/(float)eps1; yIncre=(float)dy/(float)eps1;flag=1; for(k=0;k<=eps1;k++){p=(int)(x+0.5); q=(int)(y+0.5);//每条直线的上端点不处理,避免交点处处理两次,没达到填充的效果if(k!=0)DDA(p,q,right,q);x+=xIncre; y+=yIncre;}}}int main(){init();initgraph(500,500);sol1();sol2();getch(); closegraph();return 0;}
附个测试数据和截图
请输入点的个数: 7
10 70
30 10
60 50
80 10
120 90
70 80
30 120
- 边缘填充算法
- Graphics—边缘填充算法
- OpenGL应用——实现边缘填充算法
- 计算机图形学——边缘填充算法和边界填充算法
- OpenCV笔记:填充边缘
- 填充算法
- 填充算法
- 边缘断裂处理算法-边缘连接算法
- 边缘断裂处理算法-边缘连接算法
- Sobel边缘检测算法
- Sobel边缘检测算法
- Sobel边缘检测算法
- 边缘检测算法
- 边缘检测,素描算法
- Sobel边缘检测算法
- Canny算法 边缘检测
- 边缘检测算法原理
- 图像边缘检测算法
- you must have accepted the latest version of the IOS Developer Program Agreement
- myeclipse 加载 buiding workspace 慢解决方案
- Erlang socket 工作原理
- UFT/QTP11.5新特性
- 【跟师兄学编程】换电脑引发的血案
- 边缘填充算法
- 霍夫曼编码
- A - Shortest path of the king
- IO / Linux系统对IO端口和IO内存的管理
- 深入了解计算机系统 练习题2.74
- 关于SQL Server系统数据库详解
- .Net中后台线程和前台线程的区别
- eclipse 创建 userlibraries 库
- 五子棋算法篇