计算机图形学中的种子填充算法c++程序实现

种子填充其实很简单,计算机图形学中介绍的使用栈,感觉作者是不是脑子进水了,直接使用一个队列用广搜就可以了啊,但是我就懒得写了,直接一个递归算了,有兴趣的同学自己试一试

#include<graphics.h>
#include<conio.h> 
#include<stdio.h>
#include<math.h>
int Graph[500][500] ;

void scanline_seed_fill(int color,int sx,int sy)
{
 Graph[sx][sy] = 1 ;
 putpixel(sx, sy, color);
 if(Graph[sx+1][sy] == 0 && sx+1 < 500)
 {
  Sleep(50);
  scanline_seed_fill(color,sx + 1,sy);
 }
 if(Graph[sx-1][sy] == 0 &&sx - 1 > 0)
 {
  Sleep(50);
  scanline_seed_fill(color,sx - 1,sy);
 }
 if(Graph[sx][sy+1] == 0  && sy+1 < 500)
 {
  Sleep(50);
  scanline_seed_fill(color,sx ,sy + 1);
 }
 if(Graph[sx][sy-1] == 0 && sy - 1 > 0)
 {
  Sleep(50);
  scanline_seed_fill(color,sx,sy - 1);
 }
}
void Seed_fill(int startX,int startY,int color){

int driver=VGA,mode=VGAHI;
  initgraph(&driver,&mode,"");
  setbkcolor(0);
  int x;
  int y;
  //画图形
    for(x=1,y=50;x<=50 && y>=1;x++,y--)
  {
  putpixel(x,y,color); 
  Graph[x][y]=1;
  }
 for(x=100,y=1;x<=150 && y<=50;x++,y++)
  {
  putpixel(x,y,color); 
  Graph[x][y]=1;
  }
 for(x=1,y=100;x<=50 && y<=150;x++,y++)
  {
  putpixel(x,y,color); 
  Graph[x][y]=1;
  }
 for(x=100,y=150;x<=150 && y>=100;x++,y--)
  {
  putpixel(x,y,color); 
  Graph[x][y]=1;
  }
  for(x=50;x<=100;x++)
  {
   putpixel(x,1,color);
   Graph[x][1]=1;
   putpixel(x,150,color);
   Graph[x][150]=1;
  }
  for(y=50;y<=100;y++)
  {
   putpixel(1,y,color);
   Graph[1][y]=1;
   putpixel(150,y,color);
   Graph[150][y]=1;
  }

getchar();
 scanline_seed_fill(255,startX,startY);

getch();
}

int main()
{
 initgraph(1000,1000);                      //初始化图
 Seed_fill(100,100,255);
 getchar();                              //暂停画面
 return 0;
}

时间: 2024-10-20 11:31:59

计算机图形学中的种子填充算法c++程序实现的相关文章

计算机图形学中的边标志算法c++程序实现2

摘要: 讲一讲这个程序遇到的错误 1.就是最后一个点,当他只有一个点的时候,他就是吧后面的全部填充,这是因为标志填充算法一定要有两个边界才可以,我解决这个问题的办法是错开一个点 2.就是当有三个点的时候,第2和3点中间部分就不会被填充了,以上的解决办法就是错开一点,也就是把第二个点变成两个点 3,使用中点画圆方法画的圆,在这个算法中,由于他选择的点有可能不是下一个点,而是跟当前点平行的那一个,这个时候他就会填充的是这两个点,所以会有下面运行结果图中心形上方的填充空白,尤其是弧度比较水平的时候 #

计算机图形学 有效边表填充算法(6)

作者:卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/40154077 本文通过一个完整的实例,展示多边形有效边表填充算法. 1)创建CAET类 头文件:AET.h // AET.h: interface for the CAET class. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_AET_

计算机图形学 - 扫描线种子填充算法

算法描述: 种子填充算法原理和程序都很简单, 但由于多次递归, 费时.费内存, 效率不高.为了减少递归次数, 提高效率可以采用扫描线种子填充算法.算法的基本过程如下: 当给定种子点( x, y) 时, 首先填充种子点所在扫描线上的位于给定区域的一个区段, 然后确定与这一区段相连通的上.下两条扫描线上位于给定区域内的区段, 并依次保存下来.反复这个过程, 直到填充结束. 区域填充的扫描线算法可由下列4 个步骤实现: ①  初始化: 堆栈置空.将种子点(x, y) 入栈. ② 出栈: 若栈空则结束.

CGA填充算法之种子填充算法

CGA填充算法之种子填充算法 平面区域填充算法是计算机图形学领域的一个很重要的算法,区域填充即给出一个区域的边界 (也可以是没有边界,只是给出指定颜色),要求将边界范围内的所有象素单元都修改成指定的颜色(也可能是图案填充).区域填充中最常用的是多边形填色,本文讨论种子填充算法(Seed Filling)   如果要填充的区域是以图像元数据方式给出的,通常使用种子填充算法(Seed Filling)进行区域填充.种子填充算法需要给出图像数据的区域,以及区域内的一个点,这种算法比较适合人机交互方式进

多边形区域填充算法--递归种子填充算法

http://blog.csdn.net/orbit/article/details/7323090 平面区域填充算法是计算机图形学领域的一个很重要的算法,区域填充即给出一个区域的边界(也可以是没有边界,只是给出指定颜色),要求将边界范围内的所有象素单元都修改成指定的颜色(也可能是图案填充).区域填充中最常用的是多边形填色,本文中我们就讨论几种多边形区域填充算法. 一.种子填充算法(Seed Filling) 如果要填充的区域是以图像元数据方式给出的,通常使用种子填充算法(Seed Fillin

种子填充算法

1 /************************************************************* 2 pb-图形学题4 3 种子填充算法 4 5 *************************************************************/ 6 7 8 #include <GL/glut.h> 9 #include<cstdio> 10 #include<cmath> 11 #include<stack

计算机图形学中的经常使用模型

今天在网上搜了一下图形学里面比較经常使用的模型.认为挺有意思,把它们收集起来,总结一下. 1.Lena/Lenna 这个模型是一个美女,名字叫Lena,是1972年11月<Playboy>(国内译为:花花公子)杂志的一个插图. 不知道花花公子杂志为何物的请自己去百度. Lena是瑞典人.依据英语标准发音,译为Lenna. 以下来张截图: 花花公子中的原图:http://www.ee.cityu.edu.hk/~lmpo/lenna/len_full.jpg 1973年6月.美国南加州大学的信号

计算机图形学 直线反走样Wu算法(4)

作者:卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/40048285 本文通过一个完整的实例来演示,直线反走样Wu算法. 1)创建CP2类 头文件:P2.h // P2.h: interface for the CP2 class. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_P2_H__DD2

计算机图形学中的常用模型

今天在网上搜了一下图形学里面比较常用的模型,觉得挺有意思,把它们收集起来,总结一下. 1.Lena/Lenna 这个模型是一个美女,名字叫Lena,是1972年11月<Playboy>(国内译为:花花公子)杂志的一个插图.不知道花花公子杂志为何物的请自己去百度. Lena是瑞典人,根据英语标准发音,译为Lenna.下面来张截图: 花花公子中的原图:http://www.ee.cityu.edu.hk/~lmpo/lenna/len_full.jpg 1973年6月,美国南加州大学的信号图像处理