请教:种子填充法

hflyingheart 2006-12-21 08:30:13
请教各位:
一个矩形内4个物体(不同的两类),在矩形内画了一条线,如何判断这条线是否将这四个物体正确分类? 有人说用种分填充法,什么是种子填充法,哪位可以提供一点相关资料?

谢啦!!
...全文
722 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
hflyingheart 2006-12-23
  • 打赏
  • 举报
回复
回jixingzhong:[遇到最近的边界就停止继续延伸了 ~~]
=====================================================================
关于扫描线种子填充法:
从左往右扫描时,遇到最近的边界b1就停止继续延伸了.什么时候再开始呢?
1. . . . . . . b . p b0 . . . q b8 . . . . . .
2. L b . u b1 b2 . w b3 b4 . x b5 b6 b7 . . v b .
如上所示,是从b2再次开始吗?若是,那么当再次从b2开始,是否遇到最近的边界b3就记下新的种子w并再次停止,然后再次从b4开始呢?对于b5,b6,b7三个连续的情况也是到b5停止,再从b7开始呢?也就是说对于在当前扫描线上遇到最近的边界点停止后,在这个边界点旁边有多个边续的边界点,是否下次开始时就从这些连续点中最后那个开始呢?

之前没学过图形学,现在要用了,才查资料,种子填充法看明白了,可是扫描线种子填充法却不太明白.前面的图示就是看书上的,怎么想都不明白.麻烦高手您再讲解一下.先在此多谢了!!
hflyingheart 2006-12-23
  • 打赏
  • 举报
回复
谢谢各位指点!

我所说的问题分类正确与否的标准是:在闭合的矩形内,固定了起点和终点,从起点到终点画一条连续的线,把矩形内的四个物体(如:1,2,3,4四个数字分成奇偶两类)分成两类.

现在把它当成四连通区域来用种子填充法处理,出现了问题,由于种子填充算法需更多的栈空间,在程序运行时出现了死机.据说种子扫描线算法会少用一些栈空间.哪位可以提供扫描线种子填充法的代码?
jixingzhong 2006-12-22
  • 打赏
  • 举报
回复
判断这条线是否将这四个物体正确分类
=================
问题是 分类 正确与否的标准,
也就是怎么分类的。

比如是 分 物体闭合与否,
就可以用种子填充,
给定一个种子,
如果闭合的,
那么只能填充物体内部, 或者只能填充外部,
而对于非闭合的, 则是整个区域被填充了 ~~
jixingzhong 2006-12-22
  • 打赏
  • 举报
回复
用C实现多边形的种子填充算法:

/* WIN-TC BGI 图形编程模板 */

#include "Conio.h"
#include "graphics.h"
#define closegr closegraph

void initgr(void) /* BGI初始化 */
{int gd=DETECT,gm=0; /* 和gd=VGA,gm=VGAHI是同样效果 */
registerbgidriver(EGAVGA_driver);/* 注册BGI驱动后可以不需要.BGI文件的支持运行 */
initgraph(&gd,&gm,"");
}
void seedfilling(x,y,fill_color,boundary_color)

int x,y,fill_color,boundary_color;

{

int c;

c=getpixel(x,y); /*获取当前点的颜色*/

if((c!=boundary_color)&&(c!=fill_color)) /*如果颜色为边界色则不填充*/

{

putpixel(x, y, fill_color); /*画点*/
getch(); /*加上这条语句可以显示填充状态 */

seedfilling(x+1,y, fill_color, boundary_color);

seedfilling(x-1,y, fill_color, boundary_color);

seedfilling(x, y+1, fill_color, boundary_color);

seedfilling(x, y-1, fill_color, boundary_color);

}

}

void main()
{
int a,b,color;

int gd=DETECT , gm;
int poly[10];
a=150 ;
b=140;
color=4;
initgraph(&gd , &gm , "");

poly[0] = 110; /* 第一个点的x坐标以及y坐标 */
poly[1] = 110;

poly[2] = 200; /* 第二点 */
poly[3] = 105;


poly[4] = 170; /* 第三点 */
poly[5] = 120;

poly[6]=150; /*第四点*/
poly[7]=170;

poly[8]=110; /*多边形的起点与终点一样*/
poly[9]=110;
drawpoly(5,poly);/* 显示各点连接起来的多边形 */
seedfilling(a,b,color,15); /*种子填充多边形*/

getch();
closegraph();
}

jixingzhong 2006-12-22
  • 打赏
  • 举报
回复
计算机图形学,
楼主随便找本书就有,
它是 计算机图形学 的基础内容,
基本上所以的 图形学入门/提高 的书籍都有讲解
zdywqy 2006-12-22
  • 打赏
  • 举报
回复
up
YouTuBe 2006-12-22
  • 打赏
  • 举报
回复
帮顶:)
debehe 2006-12-21
  • 打赏
  • 举报
回复
种子填充是 计算机图形学里的一个基本填充算法,你可以看一下下面
http://course.cug.edu.cn/cugFirst/computer_graphics/class/course/2-3-2-a.htm

用C实现多边形的种子填充算法
http://dev.csdn.net/article/48/48591.shtm

15,440

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧