⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 2.3.3 种子填色算法.htm

📁 计算机图形学教程计算机图形学教程
💻 HTM
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0058)http://www.ekany.com/wdg98/cg/contents/chapter2/les233.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>
<H3 align=justify><B><FONT face=楷体_GB2312 size=4>2.3.3 种子填色算法</FONT></B></H3>
<P align=justify><FONT face=楷体_GB2312><SUP><SPAN 
style="LETTER-SPACING: 1px"><FONT size=4>种子填色又称边界填色(</FONT></SPAN></SUP><SPAN 
style="LETTER-SPACING: 1px"><SUP><FONT size=4>Boundary 
Filling)。它的功能是:给出多边形光栅化后的边界位置及边界色代码boundary,以及多边形之内的一点x, 
y位置,要求将颜色color</FONT></SUP></SPAN><SUP><FONT size=4><SPAN 
style="LETTER-SPACING: 1px">填满多边形。</SPAN></FONT></SUP></FONT></P>
<P align=justify><SUP><SPAN style="LETTER-SPACING: 1px"><FONT face=楷体_GB2312 
size=4>通常采用的填法有两种:四邻法(4-connected)和八邻法。四邻法是已知x, 
y(图2.3.6(a)的黑色象素)是多边形内的一点,据此向上下左右四个方向测试(图2.3.6(a)中打勾的象素)、填色、扩散。四邻法的缺点是有时不能通过狭窄区域,因而不能填满多边形。如图2.3.6(b)所示,左下角方形中的种子(打点的象素)不能扩散到右上角的方形中,因为采用四邻法通不过中间的狭窄区域。八邻法是已知x, 
y(图2.3.6 
(c)中黑色的象素)为多边形内的一点,即种子,据此可向周围的八个方向(图2.3.6(c)中打勾的象素)测试、填色、扩散。八邻法的缺点是有时要填出多边形的边界。如图2.3.6(d)所示的边界,按八邻法就会将色彩涂出多边形。由于填不满往往比涂出更易于补救,因此四邻法比八邻法用的更普通。</FONT></SPAN></SUP></P>
<P align=justify><SPAN style="LETTER-SPACING: 1px"><SUP><FONT face=楷体_GB2312 
size=4>四邻法种子填色基本程序如程序2.3.2所示。这种程序书写简洁,但运行效率不高,因为包含有多余的判断。在它的基础上可以写出各种改进的算法[8]。</FONT></SUP></SPAN></P>
<BLOCKQUOTE>
  <P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px" align=justify><FONT 
  face=Arial>void seed_filling (x, y, fill_color, boundary_color)</FONT></P>
  <P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px" align=justify><FONT 
  face=Arial>int x, y, fill_color, boundary_color;</FONT></P>
  <P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px" align=justify><FONT 
  face=Arial>{</FONT></P>
  <BLOCKQUOTE>
    <P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px" align=justify><FONT 
    face=Arial>int c;</FONT></P>
    <P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px" align=justify><FONT 
    face=Arial>c=inquire_color(x, y);</FONT></P>
    <P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px" align=justify><FONT 
    face=Arial>if((c&lt; &gt; boundary_color) &amp;&amp; (c&lt; &gt; 
    fill_color))</FONT></P>
    <P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px" align=justify><FONT 
    face=Arial>{</FONT></P>
    <BLOCKQUOTE>
      <P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px" align=justify><FONT 
      face=Arial>set_pixel(x, y, fill_color);</FONT></P>
      <P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px" align=justify><FONT 
      face=Arial>seed_filling(x+1, y, fill_color, boundary_color);</FONT></P>
      <P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px" align=justify><FONT 
      face=Arial>seed_filling(x-1, y, fill_color, boundary_color);</FONT></P>
      <P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px" align=justify><FONT 
      face=Arial>seed_filling(x, y+1, fill_color, boundary_color);</FONT></P>
      <P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px" align=justify><FONT 
      face=Arial>seed_filling(x, y-1, fill_color, 
    boundary_color);</FONT></P></BLOCKQUOTE>
    <P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px" align=justify><FONT 
    face=Arial>}</FONT></P></BLOCKQUOTE>
  <P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px" align=justify><FONT 
  face=Arial>}</FONT></P>
  <P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px" align=justify> </P>
  <P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px" align=justify><FONT 
  face=Arial>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  </FONT>程序<FONT face=Arial>2.3.2 </FONT>四邻法种子填色程序</P></BLOCKQUOTE>
<P align=justify><FONT 
face=楷体_GB2312>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<IMG height=346 alt="2_3_6.gif (4035 bytes)" src="2.3.3 种子填色算法.files/2_3_6.gif" 
width=383></FONT><B><FONT face=Arial size=5></P>
<P align=justify></FONT><FONT 
face=楷体_GB2312>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
图2.3.6 四邻法和八邻法种子</FONT></P></B>
<OL type=a>
  <LI>
  <P align=justify><FONT face=楷体_GB2312 size=4>四邻法</FONT> </P>
  <LI>
  <P align=justify><FONT face=楷体_GB2312 size=4>四邻法不能填满此多边形</FONT> </P>
  <LI>
  <P align=justify><SUP><SPAN style="LETTER-SPACING: 1px"><FONT face=楷体_GB2312 
  size=4>八邻法</FONT></SPAN></SUP> </P>
  <LI>
  <P align=justify><SUP><SPAN style="LETTER-SPACING: 1px"><FONT face=楷体_GB2312 
  size=4>八邻法会涂出此多边形</FONT></SPAN></SUP> </P></LI></OL>
<P align=justify> </P>
<P><A href="http://www.ekany.com/wdg98/cg/contents/chapter2/les232.htm"><FONT 
face=楷体_GB2312>&lt;上一节〉</FONT></A><FONT face=楷体_GB2312>&nbsp;&nbsp;&nbsp; <A 
href="http://www.ekany.com/wdg98/cg/contents/chapter2/les241.htm">〈下一节〉</A> 
&nbsp;&nbsp;&nbsp; <A 
href="http://www.ekany.com/wdg98/cg/tutorial/chapter2/lesson2-3.htm">〈返回〉</A></FONT></P></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -