📄 2.3 区域填充算法.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0058)http://www.ekany.com/wdg98/cg/contents/chapter2/les231.htm -->
<HTML><HEAD><TITLE>2</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META content="MSHTML 6.00.2800.1106" name=GENERATOR></HEAD>
<BODY><B>
<H2 align=justify><FONT face=楷体_GB2312 size=5>2.3 区域填充算法 </FONT></H2>
<H3 align=justify><FONT face=楷体_GB2312 size=4><A name="2.3.1 基础知识">2.3.1
基础知识</A></FONT></B></H3>
<P align=justify><SPAN style="LETTER-SPACING: 1px"><FONT face=楷体_GB2312
size=4>区域填充即给出一个区域的边界,要求对边界范围内的所有象素单元赋予指定的颜色代码。区域填充中最常用的是多边形填色,本节中我们就以此为例讨论区域填充算法。</FONT></SPAN></P>
<P align=justify><SPAN style="LETTER-SPACING: 1px"><FONT face=楷体_GB2312
size=4>多边形填色即给出一个多边形的边界,要求对多边形边界范围的所有象素单元赋予指定的色代码。要完成这个任务,一个首要的问题,是判断一个象素是在多边形内还是外。数学上提供的方法是“扫描交点的奇偶数判断”法:</FONT></SPAN></P>
<P align=justify><SPAN style="LETTER-SPACING: 1px"><FONT face=楷体_GB2312
size=4>1、将多边形画在纸上。</FONT></SPAN></P>
<P align=justify><SPAN style="LETTER-SPACING: 1px"><FONT face=楷体_GB2312
size=4>2、用一根水平扫描线自左而右通过多边形而与多边形之边界相交。扫描线与边界相交奇次数后进入该多边形,相交偶次数后走出该多边形。图2.3.1示出这类情况:扫描线与多边形相交四点。相交a点之后入多边形;交b点(第2交点)之后出多边形;交c点(第3交点)之后又入多边形;交d点(第4交点)之后又出多边形。</FONT></SPAN></P>
<P align=justify><SPAN style="LETTER-SPACING: 1px"><FONT face=楷体_GB2312
size=4>上述方法似乎能完满地解决问题,但事实并非如此,因为直线在光栅化后变成了占有单位空间的离散点。图2.3.1中的A点处和B、C处,在光栅化后变成图2.3.2所示的情况。此时,使用上述判断法则,在A、B、C处发现错判现象。在A处,扫描线通过一点后以为入多边形,其实此时已出多边形。结果是在A点之后的扫描线段上全都错误地填上色。在B和C处,因为光栅化后,使得扫描线通过交点的个数发生变化而同样导致填色错误。因此,原始的奇偶判断方法需要加以周密地改善,才能成为计算机中实用的填色算法。</FONT></SPAN></P>
<P align=justify><FONT face=楷体_GB2312><IMG height=202
alt="2_3_1.gif (3081 bytes)" src="2.3 区域填充算法.files/2_3_1.gif" width=351>
<IMG
height=137 alt="2_3_2.gif (2351 bytes)" src="2.3 区域填充算法.files/2_3_2.gif"
width=174> </FONT> </P>
<P align=justify><FONT
face=楷体_GB2312>
图2.3.1
图2.3.2</FONT></P>
<P align=justify><SPAN style="LETTER-SPACING: 1px"><FONT face=楷体_GB2312
size=4>填色算法分为两大类:</FONT></SPAN></P>
<P align=justify><SPAN style="LETTER-SPACING: 1px"><FONT face=楷体_GB2312
size=4>1、扫描线填色(Scan-Line
Filling)算法。这类算法建立在多边形边边界的矢量形式数据之上,可用于程序填色,也可用交互填色。</FONT></SPAN></P>
<P align=justify><SPAN style="LETTER-SPACING: 1px"><FONT face=楷体_GB2312
size=4>2、种子填色(Seed
Filling)算法。这类算法建立在多边形边边界的图象形式数据之上,并还需提供多边形界内一点的坐标。所以,它一般只能用于人机交互填色,而难以用于程序填色。</FONT></SPAN><FONT
face=System size=5><B></P>
<P align=justify> </P></B></FONT>
<P><A href="http://www.ekany.com/wdg98/cg/contents/chapter2/les222.htm"><FONT
face=楷体_GB2312><上一节〉</FONT></A><FONT face=楷体_GB2312> <A
href="http://www.ekany.com/wdg98/cg/contents/chapter2/les232.htm">〈下一节〉</A>
<A
href="http://www.ekany.com/wdg98/cg/tutorial/chapter2/lesson2-3.htm">〈返回〉</A></FONT></P>
<P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px" align=justify><FONT
face=楷体_GB2312
size=4>
</FONT></P></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -