检测当前像素是否位于多边形中的方法和系统的制作方法

文档序号:6468619阅读:209来源:国知局
专利名称:检测当前像素是否位于多边形中的方法和系统的制作方法
技术领域
本发明涉及图形处理领域,更具体地涉及一种检测当前像素是否位于多边形中的
方法和系统。
背景技术
在计算机图形学中,多边形(包括凸多边形、凹多边形、以及包含多边形孔的多边 形)栅格化可以不通过三角化来进行。这是因为三角化常常需要太多的计算负担,没有简 单的算法来将一个多边形(尤其是凸多边形和包含孔以及自相交的复杂多边形)分为三角 形。 使用扫描线来对多边形进行栅格化(而不使用三角化)对于栅格显示是一个直接 途径。在每条扫描线上,需要判断当前像素是否包含在多边形中,如果是,则需要对此像素 进行描画。 对于检测当前像素是否在多边形中,存在很多方法。最著名的是Jordan曲线理 论对于从当前像素出发的任何射线,如果此射线与多边形相交的数目为奇数,那么此像素 位于多边形中。另一个比较常用的方法是检测当前像素相对于所有多边形边的边方程值, 如果相对于凸边的边方程值都是正,并且相对于凹边的边方程值也为正,那么此像素就位 于多边形中。另外一个方法是检测当前像素与多边形顶点组成的符号角之和,如果其为零, 那么像素在多边形外,否则在多边形中。 然而,上述方法在实际图形产品中不太容易使用硬件实现,效率也不高。具体地, 在Jordan曲线理论中,计算当前像素的射线与多边形相交的计算量巨大,且不容易使用硬 件实现射线的方法;在检测所有多边形边方程值的方法中,当多边形边的数目很大时,此方 法的性能大大降低;在计算符号角的方法中,需要大量计算角度的数学运算,硬件上不容易 实现,同时,当计算带有多边形孔的复杂多边形时,算法变得很复杂。

发明内容
鉴于以上所述的一个或多个问题,本发明提供了一种检测当前像素是否位于多边 形中的方法和系统。 根据本发明实施例的检测当前像素是否位于多边形中的方法,包括以下步骤获 取当前像素所在扫描线与多边形的相交边;将相交边两两配对为多对配对相交边;计算当 前像素位于多少对配对相交边之间;以及如果当前像素位于奇数对配对相交边之间,则判 定当前像素位于多边形中,否则判定当前像素位于多边形外。 根据本发明实施例的检测当前像素是否位于多边形中的系统,包括相交边获取 单元,用于获取当前像素所在扫描线与多边形的相交边;相交边配对单元,用于将相交边两 两配对为多对配对相交边;中间性计算单元,用于计算当前像素位于多少对配对相交边之 间;以及像素位置判定单元,用于在当前像素位于奇数对配对相交边之间的情况下,判定当 前像素位于多边形中,在当前像素位于偶数对配对相交边之间的情况下,判定当前像素位于多边形外。 本发明适用于凸多边形、凹多边形以及带有多边形孔的复杂多边形;并且本发明 的方法简单,过程模块化强,容易硬件实现。另外,在本发明中,在每行扫描之前使用相交边 获取单元计算相交边,与每一行的像素步进无关,扫描性能不会随多边形边数目的增加而 降低;在中间性计算单元中,像素在扫描线上的步进可以使用加法来计算边方程值,简单而 高效;并且奇数为内、偶数为外的奇数中间性规则简化了系统的实现。


图l是应用了根据本发明实施例的检测当前像素是否位于多边形中的方法/系统 的多边形栅格化系统的工作原理的示意性框图; 图2是根据本发明实施例的检测当前像素是否位于多边形中的方法的简要流程 图; 图3是根据本发明实施例的检测当前像素是否位于多边形中的方法的详细流程 图; 图4是根据本发明实施例的获取当前像素所在扫描线与多边形的相交边的过程 的详细流程图; 图5是应用左上规则来判定是否描画当前像素的原理示意图; 图6是应用了根据本发明实施例的检测当前像素是否位于多边形中的方法/系统
的多边形栅格化系统的硬件模块示意图; 图7是应用根据本发明实施例的检测当前像素是否位于多边形中的方法/系统来
判断当前像素相对于包含多边形孔的凹多边形的位置的示意图; 图8是根据本发明实施例的将相交边两两配对的过程的示意图; 图9是扫描线上的当前像素相对于多边形的相交边的三种位置的示意图; 图10是根据本发明实施例的奇数中间性规则的一个示例的示意图; 图11至图16是用于说明根据本发明实施例的奇数中间性规则的各种多边形与当
前像素之间的相对位置关系的示意图。
具体实施例方式
本发明提供了一种检测当前像素是否位于多边形中的方法和系统。其中,在根据 本发明实施例的检测当前像素是否位于多边形中的方法和系统中,应用了奇数中间性规 则。该奇数中间性规则的内容在于将与当前像素所在的扫描线相交的多边形边两两配对 为多对配对相交边,如果当前像素位于奇数对配对相交边之间,则判定当前像素位于多边 形中,否则判定当前像素位于多边形外。 图1是应用了根据本发明实施例的检测当前像素是否位于多边形中的方法/系统 的多边形栅格化系统的工作原理的示意性框图。在图l所示的多边形栅格化系统中,按照 不同的顺序对多边形顶点以及多边形孔的顶点进行排序。例如,如果多边形顶点是顺时针 计数的,那么多边形孔的顶点就是按逆时针计数的,反过来也是如此。在找到第一条扫描线 之后,按照扫描线的顺序逐行计算扫描线与多边形和/或多边形孔的相交边。其中,可以通 过对扫描线的Y轴坐标值与多边形和/或多边形孔的顶点的Y轴坐标值进行比较来找出相
6交边,而不需要计算相交点,所以可以避免除法运算。然后,将每两条相交边配对为一对配 对相交边,以计算配对相交边中间性的数目。其中,使用多边形的边方程值来进行当前像素 的中间性的计算。然后,将计算出的中间性的信息输入到检测模块,用来判断当前扫描线的 像素是否在多边形内。如果是,则将这些像素送入描画模块和输入的参数一起进行渲染;否 则该多边形栅格化系统移到下一条扫描线进行以上所述的过程。 图2是根据本发明实施例的检测当前像素是否位于多边形中的方法的简要流程 图。如图2所示,该检测当前像素是否位于多边形中的方法包括以下步骤S202,获取当前 像素所在扫描线与多边形的相交边;S204,将相交边两两配对为多对配对相交边;S206,计 算当前像素位于多少对配对相交边之间;以及S208,如果当前像素位于奇数对配对相交边 之间,则判定当前像素位于多边形中,否则判定当前像素位于多边形外。
具体地,可以通过将当前像素所在扫描线的Y轴坐标值与多边形的顶点的Y轴坐 标值进行比较来获取当前像素所在扫描线与多边形的相交边。如果当前像素所在扫描线 的Y轴坐标值介于多边形的任意两个相邻顶点的Y轴坐标值之间,则判定该任意两个相邻 顶点所在的多边形边为当前像素所在扫描线与多边形的相交边。可以通过计算当前像素相 对于配对相交边中的每条相交边的边方程值来判定当前像素是否位于配对相交边之间。如 果当前像素相对于配对相交边中的每条相交边的边方程值都为正或者都为负,则判定当前 像素位于配对相交边之间。如果当前像素相对于配对相交边中的一条相交边的边方程值为 零,则判定当前像素位于该配对相交边中的该一条相交边上。 如果当前像素所在扫描线的Y轴坐标值等于多边形的任意两个相邻顶点的Y轴坐 标值或者等于多边形的任意一个或多个顶点的Y轴坐标值,则判定当前像素所在扫描线通 过多边形的该任意两个相邻顶点所在的多边形边或通过多边形的该任意一个或多个顶点。 如果当前像素相对于该任意两个相邻顶点所在的多边形边或者该任意一个或多个顶点所 在的多边形边的边方程值为零,则判定当前像素在该任意两个相邻顶点所在的多边形边上 或者该任意一个或多个顶点所在的多边形边上。如果当前像素位于多边形的左上侧边上, 则判定当前像素位于多边形中,如果当前像素位于多边形的右下侧边上,则判定当前像素 位于多边形外。 当多边形为包含多边形孔的多边形时,通过将当前像素所在扫描线的Y轴坐标值 与多边形孔的顶点的Y轴坐标值进行比较来获取当前像素所在扫描线与多边形孔的相交 边。如果当前像素所在扫描线的Y轴坐标值等于多边形孔的任意两个相邻顶点的Y轴坐标 值或者等于多边形孔的任意一个或多个顶点的Y轴坐标值,则判定当前像素所在扫描线通 过多边形孔的该任意两个相邻顶点所在的多边形孔边或通过多边形孔的该任意一个或多 个顶点。如果当前像素相对于该任意两个相邻顶点所在的多边形孔边或者该任意一个或多 个顶点所在的多边形孔边的边方程值为零,则判定当前像素在该任意两个相邻顶点所在的 多边形孔边上或者该任意一个或多个顶点所在的多边形孔边上。如果当前像素位于多边形 孔的右下侧边上,则判定当前像素位于多边形中,如果当前像素位于所述多边形孔的左下 侧边上,则判定当前像素位于所述多边形外。 图3是根据本发明实施例的检测当前像素是否位于多边形中的方法的详细流程 图。如图3所示,在步骤S302中,将输入的顶点分为两个类型多边形的顶点和多边形孔的 顶点,他们分别存储于数组V[n]和HV[m]。其中,n是多边形的顶点的数目,m是多边形孔的顶点的数目。在步骤S304中,确定起始扫描线。通常,为了扫描多边形,需要创建一个边 界框,那么起始扫描线就是该边界框中的最上面的扫描线yi = y0。 接着,对于每一条扫描线yi,在计算其与多边形的相交边(步骤S306)以及将其的 相交边两两配对(步骤S308)之后,沿着当前扫描线按像素对多边形进行处理。对于每两 条配对的相交边,首先判断当前像素(xi, yi)相对于该两条配对的相交边中的一条的边方 程值e是否为零(步骤S310)。如果是,则使用左上规则来检测当前像素是否在多边形中 (步骤S312);如果不是,则判断当前像素相对于两条配对的相交边的边方程值是否都为正 或者都为负(步骤S314),如果是,则表明当前像素在该两条配对的相交边之间(称为中间 性),并且中间性的数目betw加一 (步骤S316)。 对于扫描线穿过的多边形或多边形孔的边(存储在ee数组中),逐个进行判断,如 果当前像素的边方程值为0(步骤S318),则根据左上规则来确定它是否位于多边形中;如 果不为O,则忽略。如果当前扫描线没有到达边界框的右边(xmax),则沿扫描线方向步进一 个像素;否则转移到下一个扫描线上,直到边界框的下边(ymax)。 图4是根据本发明实施例的获取当前像素所在扫描线与多边形的相交边的过程 的详细流程图。如图4所示,该过程包含两大部分一部分用于多边形边,一部分用于多 边形孔的边。首先,输入扫描线yi、多边形的顶点V[n]、以及多边形孔的顶点HV[m](步骤 406)。在每一部分中,首先要检查yi是否介于V[u].y(V[u].y表示多边形的顶点V[u]的Y 轴坐标值,下面的类似符号表示类似的意思)和V[u+l].y之间(步骤S408)以及是否介于 HV[u]. y(HV[u]. y表示多边形孔的顶点HV[u]的Y轴坐标值,下面的类似符号表示类似的意 思)和HV[u+l]. y之间(步骤S410)。如果是,则将V[u]和V[u+1]所在的边、和HV[u]和 HV[u+l]所在的边的计数号码存储于数组e[p]中(步骤S412和步骤S414);如果不是,则检 查扫描线是否穿过多边形或者多边形孔的顶点或边,这是通过分别判断yi是否等于V[u]. y或者V[u+l] y,以及HV[u]. y或者HV[u+l] y,或者两者的全部来实现的(步骤S416和步 骤S418)。如果扫描线穿过多边形和/或多边形孔的顶点和/或边,则将该边和/或该顶 点所在的边的计数号存储在数组ee[q]中(步骤S420和步骤S422)。最后,输出数组e[p] 和ee[p](步骤424)。 在计算数组e[p]中的配对边的中间性数目之后,通过扫描数组ee[q]来判断当前 像素相对于ee[q]中的这些边的边方程值是否为零。如果是,则通过左上规则来完成是否 在多边形中的检测。 图5是应用左上规则来判定是否描画当前像素的原理示意图。如图5所示,对于 任意一条边,其边方程为e(xi, yi) = a朽i+l^yi+c,这里系数a、 b以及c可以通过计算边 顶点的坐标来获得。对于多边形边i,这些系数表示为a[i]、b[i]和c[i];对于多边形孔 的边j,这些系数表示为a[j]、b[j]和c[j]。多边形的左上方边(边502、504、506和508) 为描画,多边形孔的右下方边(边510、512和514)也为描画,其他边为不描画。描画的表 示在多边形之内,否则在多边形之外。描画的多边形边的条件为a[i] X)或者a[i] ==0 & & b[i] X),描画的多边形孔的边的条件为a[j] X)或者a[j] ==0 & & b[j] <0。
图6是应用了根据本发明实施例的检测当前像素是否位于多边形中的方法/系统 的多边形栅格化系统的硬件模块示意图。如图6所示,计算边方程系数的模块利用顶点缓 存中的顶点信息计算得到边方程系数,计算相交边的模块同时也从顶点缓存中读取顶点信息。相交边的系数和计数号码存储在内存中,用于计算中间性数目的模块进行的计算。通 过检测规则(左上规则以及奇数中间性规则)检测的结果送入描画模块。
图7是应用根据本发明实施例的检测当前像素是否位于多边形中的方法/系统来 判断当前像素相对于包含多边形孔的凹多边形的位置的示意图。图7示出了一个包含多 边形孔的凹多边形,该凹多边形也包含扫描线。其中,多边形的顶点V[i]按顺时针计数, 多边形孔的顶点HV[j]按逆时针计数。如果V[i].y < yi < V[i+l].y或者HV[j] < yi < HV[j+l]. y,则扫描线yi将与多边形边V[i]V[i+l]相交或者与多边形孔的边HV[j] HV[j+l]相交(如图7中的虚线702)。如果yi == V[i].y或者yi = = V[i+1] y,则扫 描线yi将穿过多边形顶点V[i](如图7中的虚线704),这对于多边形孔是一样的。如果 V[i].y = = yi = V[i+l].y或者HV[i].y = = yi = = HV[i+l] y,则扫描线将分别穿过边 V[i]V[i+l]或者HV[i]HV[i+l](如图7中的虚线706)。在本实施例中,不把这些穿过的情 况看作是相交,所以使用左上规则来对穿过情况下的扫描线上的像素进行检测。相交边的 计数号码存储于数组e[p]中,穿过情况中的边计数号码存储于数组ee[q]中。
从Jordan曲线理论可知,相交边的数目永远为偶数。因此,可以将相交边两两配 对。图8是根据本发明实施例的将相交边两两配对的过程的示意图。其中,E用于计数原 始的边号码。如图8所示,包含多边形孔的凹多边形的顶点按顺时针计数,被包含的多边形 孔的顶点按逆时针计数。每个边的号码记录为此边的第一个顶点的号码,相交边画为粗实 线。根据边号码和计算的顺序,图8中的配对边为[E0, E3] 、 [E4, E6] 、 [E7, E8] 、 [E9, E12]、 [E15,E16]以及[E17,E18]。这里,多边形孔边的号码紧跟多边形边的号码计数。在实际运 用中,一般将配对边的号码按顺序存储于数组e[p]中,所以不需要显式地进行配对操作, 只要将e[i]和e[i+l]看作一对即可。 对于每一对配对边,扫描线上的当前像素具有三种位置中间(中间性)、一侧 ( 一侧性)、或者在配对边上,如图9所示。如果当前像素相对于一对配对边的边方程值都 为正或者都为负,则当前像素在该对配对边的中间;如果一个为正一个为负,则当前像素在 该对配对边的某条相交边的一侧;如果至少一个为零,此则当前像素在该对配对边的某条 相交边上。同时,对于同一个多边形,根据不同的起始边号码,也有两种配对组合。例如,如 图9中所示,配对边组合可以为[e0, el]、 [e2, e3]以及[e4, e5],也可以为[e5, e0] 、 [el, e2]以及[e3, e4]。在第一种组合中,pO在所有配对边的一侧,pl在配对边[e2, e3]的中 间,p2在配对边[e4,e5]中的相交边e4上。在第二种组合中,p0在配对边[e0,el]和[e4, e5]中间,pl在配对边[e4, e5]中间并在其他配对边的一侧,p2在配对边[e2, e3]中上。 其中,在配对边中间的像素相对于配对边的边方程值既可以都为正,也可以都为负。虽然有 两种组合方式,他们不会影响奇数中间性规则。 本发明中应用了奇数中间性规则来检测当前像素与多边形之间的相对位置关系。 奇数中间性规则表明,如果某像素的中间性数目为奇数,则此像素就在多边形中。图io示 出了奇数中间性规则的一个示例。在图10所示的示例中,配对相交边为[e0,el]、[e2,e3]、 [e4, e5] 、 [e6, e7] 、 [e8, e9]和e [10, ell]。对于像素p0,中间性的数目为1,它位于多边形 中洞样,根据奇数中间性规则,可以得到pl的中间性数目为2,不位于多边形中;p2的中 间性数目为3,位于多边形中;p3的中间性数目为3,位于多边形中;以及p4的中间性数目 为4,不位于多边形中。
下面,对上述方法和系统中应用的奇数中间性规则进行证明。具体地,这里使用归 纳法来证明奇数中间性规则。 这里,将多边形凹顶点的数目记为k,将多边形孔的凹点数目记为q。
第一步对于任何不包含多边形孔的凸多边形(k = 0),如图11所示,只存在两条 相交边(图11中的边1103、1104),如果当前像素p(图11中的像素1101、1102)的中间性 数目为l,那么该当前像素在多边形中。 对于任何包含一个凸多边形孔的凸多边形(k = 0, q = O),如图12所示,对于凸 多边形来说只存在两条相交边(图12中的边1201、 1206),同时对于凸多边形孔来说也只存 在两条相交边(图12中的边1202、 1207)。对于多边形中的像素点p0(图12中的点1203、 1208)来说,中间性的数目永远是1 ;对于多边形孔中的像素pl(图12中的点1204、 1209) 来说,中间性的数目永远是2 ;对于多边形外的像素点p2(图12中的点1205U210)来说, 中间性的数目永远是O。 对于任何具有m个凸多边形孔的凸多边形来说(k = 0, q = O),如图13所示,存 在最多2+m*2条相交边。对于在多边形中但是不在多边形孔之间的像素p0(图13中的点 1301)来说,并且对于在多边形中而且也在多边形孔之间的像素p2(图13中的点1303)来 说,中间性的数目永远是1 ;对于多边形孔中的像素pl(图13中的点1302)来说,中间性的 数目永远是2 ;对于多边形外的像素p3(图13中的点1304)来说,中间性的数目永远是0。
由以上所述可见,奇数中间性规则对于k = 0禾P q = 0成立。 第二步对于k二 1的凹多边形,如图14所示,存在两种情况情况l,扫描线穿过 凹部分(图14中的1401),情况2 :扫描线不穿过凹部分(图14中的1402)。对于情况1中 的任何像素P,中间性的数目是0、1或者2 ;如果是l,则像素在多边形中。对于情况2中的 任何像素P,中间性的数目是O或者l,如果是l,则像素在多边形中。 对于k二 l并且q二 1的包含一个凹多边形孔的凹多边形,如图15所示,对于在 多边形中的像素(例如,图15中的点1501),因为它们总是在凹多边形孔的外面,所以根据 k = 1的规则,中间性的数目永远加0或者2,这里0或者2是当q = 1时在凹多边形孔之 外的像素的中间性数目。对于凹多边形孔中间的像素(例如,图15中的点1502),根据k = 1的规则,中间性数目将加l(变成2)。 由以上所述可见,奇数中间性规则对于k = 1和q = 1成立。 第三步假定奇数中间性规则当k = i-l, i < = k,以及q = j-l, j < = k时成
第四步考虑k = i以及q = j。 首先考虑k二i。对于具有n个顶点的任何凹多边形,它具有最多n-2个凹点,并 具有一个对应的n顶点凸多边形。通过将一个凸点变成凹点,一个具有j个凹点的凹多边 形A可以从一个具有j-l个凹点的凹多边形生成,如图16所示。并且,从一条边产生一个 凹点也具有相同的效果。 经过上述处理后,从按顺序排号的多边形B中的相交边,一对新的相交边在三角 形V2V3' V4中删除了,它插入了三角形V2V3V4。对于多边形A中三角形V2V3' V4中的像 素,中间性的数目减1 ,根据第3步,此数目将变成偶数,此像素不在多边形中。对于其他像 素,中间性的数目不会改变,因此它们与多边形B的判断方式相同,这已经在第三步中证明
10过了。 这个增加凹点的过程同样对于q = j也实用。然而,我们只考虑在凹多边形之外 的像素的中间性数目,根据上述已证明规则,它将永远为偶数。最后,我们考虑k二 i和q =j,对于具有凹多边形孔的凹多边形中的像素,中间性的数目将是原来凹多边形相同像素 的中间性数目(奇数)加上插入的凹多边形孔之外同样位置像素的中间性数目(偶数),因 此结果永远为奇数。
由以上所述可见,奇数中间性规则对于k = i禾P q = j成立。 综上所述,本发明适用于凸多边形、凹多边形以及带有多边形孔的复杂多边形;并 且本发明的方法简单,过程模块化强,容易硬件实现。另外,在本发明中,在每行扫描之前使 用相交边获取单元计算相交边,与每一行的像素步进无关,扫描性能不会随多边形边数目 的增加而降低;在中间性计算单元中,像素在扫描线上的步进可以使用加法来计算边方程 值,简单而高效;并且奇数为内、偶数为外的奇数中间性规则简化了系统的实现。
本领域技术人员将理解,还存在可用于实现本发明实施例的更多可选实施方式和 改进方式,并且上述实施方式和示例仅是一个或多个实施例的说明。因此,本发明的范围仅 由所附权利要求书限制。
权利要求
一种检测当前像素是否位于多边形中的方法,其特征在于,包括以下步骤获取当前像素所在扫描线与多边形的相交边;将所述相交边两两配对为多对配对相交边;计算所述当前像素位于多少对所述配对相交边之间;以及如果所述当前像素位于奇数对所述配对相交边之间,则判定所述当前像素位于所述多边形中,否则判定所述当前像素位于所述多边形外。
2. 根据权利要求1所述的检测当前像素是否位于多边形中的方法,其特征在于,通过 将所述当前像素所在扫描线的Y轴坐标值与所述多边形的顶点的Y轴坐标值进行比较来获 取所述当前像素所在扫描线与所述多边形的相交边。
3. 根据权利要求2所述的检测当前像素是否位于多边形中的方法,其特征在于,如果 所述当前像素所在扫描线的Y轴坐标值介于所述多边形的任意两个相邻顶点的Y轴坐标值 之间,则判定所述任意两个相邻顶点所在的多边形边为所述当前像素所在扫描线与所述多 边形的相交边。
4. 根据权利要求3所述的检测当前像素是否位于多边形中的方法,其特征在于,通过 计算所述当前像素相对于所述配对相交边中的每条相交边的边方程值来判定所述当前像 素是否位于所述配对相交边之间。
5. 根据权利要求3所述的检测当前像素是否位于多边形中的方法,其特征在于,如果 所述当前像素相对于所述配对相交边中的每条相交边的边方程值都为正或者都为负,则判 定所述当前像素位于所述配对相交边之间。
6. 根据权利要求3所述的检测当前像素是否位于多边形中的方法,其特征在于,如果 所述当前像素相对于所述配对相交边中的一条相交边的边方程值为零,则判定所述当前像 素位于所述配对相交边中的一条相交边上。
7. 根据权利要求2所述的检测当前像素是否位于多边形中的方法,其特征在于,如果 所述当前像素所在扫描线的Y轴坐标值等于所述多边形的任意两个相邻顶点的Y轴坐标值 或者等于所述多边形的任意一个或多个顶点的Y轴坐标值,则判定所述当前像素所在扫描 线通过所述多边形的任意两个相邻顶点所在的多边形边或通过所述多边形的任意一个或 多个顶点。
8. 根据权利要求7所述的检测当前像素是否位于多边形中的方法,其特征在于,如果 所述当前像素相对于所述任意两个相邻顶点所在的多边形边或者所述任意一个或多个顶 点所在的多边形边的边方程值为零,则判定所述当前像素在所述任意两个相邻顶点所在的 多边形边上或者所述任意一个或多个顶点所在的多边形边上。
9. 根据权利要求6或8所述的检测当前像素是否位于多边形中的方法,其特征在于,如 果所述当前像素位于所述多边形的左上侧边上,则判定所述当前像素位于所述多边形中, 如果所述当前像素位于所述多边形的右下侧边上,则判定所述当前像素位于所述多边形 外。
10. 根据权利要求1至8中任一项所述的检测当前像素是否位于多边形中的方法,其 特征在于,当所述多边形为包含多边形孔的多边形时,通过将所述当前像素所在扫描线的Y 轴坐标值与所述多边形孔的顶点的Y轴坐标值进行比较来获取所述当前像素所在扫描线 与所述多边形孔的相交边。
11. 根据权利要求io所述的检测当前像素是否位于多边形中的方法,其特征在于,如果所述当前像素所在扫描线的Y轴坐标值等于所述多边形孔的任意两个相邻顶点的Y轴坐 标值或者等于所述多边形孔的任意一个或多个顶点的Y轴坐标值,则判定所述当前像素所 在扫描线通过所述多边形孔的任意两个相邻顶点所在的多边形孔边或通过所述多边形孔 的任意一个或多个顶点。
12. 根据权利要求11所述的检测当前像素是否位于多边形中的方法,其特征在于,如 果所述当前像素相对于所述任意两个相邻顶点所在的多边形孔边或者所述任意一个或多 个顶点所在的多边形孔边的边方程值为零,则判定所述当前像素在所述任意两个相邻顶点 所在的多边形孔边上或者所述任意一个或多个顶点所在的多边形孔边上。
13. 根据权利要求12所述的检测当前像素是否位于多边形中的方法,其特征在于,如 果所述当前像素位于所述多边形孔的右下侧边上,则判定所述当前像素位于所述多边形 中,如果所述当前像素位于所述多边形孔的左上侧边上,则判定所述当前像素位于所述多 边形外。
14. 一种检测当前像素是否位于多边形中的系统,其特征在于,包括 相交边获取单元,用于获取当前像素所在扫描线与多边形的相交边; 相交边配对单元,用于将所述相交边两两配对为多对配对相交边; 中间性计算单元,用于计算所述当前像素位于多少对所述配对相交边之间;以及 像素位置判定单元,用于在所述当前像素位于奇数对所述配对相交边之间的情况下,判定所述当前像素位于所述多边形中,在所述当前像素位于偶数对所述配对相交边之间的 情况下,判定所述当前像素位于所述多边形外。
15. 根据权利要求14所述的检测当前像素是否位于多边形中的系统,其特征在于,所 述相交边获取单元通过将所述当前像素所在扫描线的Y轴坐标值与所述多边形的顶点的Y 轴坐标值进行比较来获取所述当前像素所在扫描线与所述多边形的相交边。
16. 根据权利要求15所述的检测当前像素是否位于多边形中的系统,其特征在于,所 述相交边获取单元在所述当前像素所在扫描线的Y轴坐标值介于所述多边形的任意两个 相邻顶点的Y轴坐标值之间的情况下,判定所述任意两个相邻顶点所在的多边形边为所述当前像素所在扫描线与所述多边形的相交边。
17. 根据权利要求16所述的检测当前像素是否位于多边形中的系统,其特征在于,所述中间性计算单元通过计算所述当前像素相对于所述配对相交边中的每条相交边的边方 程值来判定所述当前像素是否位于所述配对相交边之间。
18. 根据权利要求16所述的检测当前像素是否位于多边形中的系统,其特征在于,所 述中间性计算单元在所述当前像素相对于所述配对相交边中的每条相交边的边方程值都 为正或者都为负的情况下,判定所述当前像素位于所述配对相交边之间。
19. 根据权利要求16所述的检测当前像素是否位于多边形中的系统,其特征在于,所 述像素位置判定单元在所述当前像素相对于所述配对相交边中的一条相交边的边方程值 为零的情况下,判定所述当前像素位于所述配对相交边中的一条相交边上。
20. 根据权利要求15所述的检测当前像素是否位于多边形中的系统,其特征在于,所 述相交边获取单元在所述当前像素所在扫描线的Y轴坐标值等于所述多边形的任意两个 相邻顶点的Y轴坐标值或者等于所述多边形的任意一个或多个顶点的Y轴坐标值的情况下,判定所述当前像素所在扫描线通过所述多边形的任意两个相邻顶点所在的多边形边或 通过所述多边形的任意一个或多个顶点。
21. 根据权利要求20所述的检测当前像素是否位于多边形中的系统,其特征在于,所 述像素位置判定单元在所述当前像素相对于所述任意两个相邻顶点所在的多边形边或者 所述任意一个或多个顶点所在的多边形边的边方程值为零的情况下,判定所述当前像素在 所述任意两个相邻顶点所在的多边形边上或者所述任意一个或多个顶点所在的多边形边 上。
22. 根据权利要求19或21所述的检测当前像素是否位于多边形中的系统,其特征在 于,所述像素位置判定单元在所述当前像素位于所述多边形的左上侧边上的情况下,判定 所述当前像素位于所述多边形中,在所述当前像素位于所述多边形的右下侧边上的情况 下,判定所述当前像素位于所述多边形外。
23. 根据权利要求14至21中任一项所述的检测当前像素是否位于多边形中的系统,其 特征在于,在所述多边形为包含多边形孔的多边形的情况下,所述相交边获取单元通过将 所述当前像素所在扫描线的Y轴坐标值与所述多边形孔的顶点的Y轴坐标值进行比较来获 取所述当前像素所在扫描线与所述多边形孔的相交边。
24. 根据权利要求23所述的检测当前像素是否位于多边形中的系统,其特征在于,所 述相交边获取单元在所述当前像素所在扫描线的Y轴坐标值等于所述多边形孔的任意两 个相邻顶点的Y轴坐标值或者等于所述多边形孔的任意一个或多个顶点的Y轴坐标值的情 况下,判定所述当前像素所在扫描线通过所述多边形孔的任意两个相邻顶点所在的多边形 孔边或通过所述多边形孔的任意一个或多个顶点。
25. 根据权利要求24所述的检测当前像素是否位于多边形中的系统,其特征在于,所 述像素位置判定单元在所述当前像素相对于所述任意两个相邻顶点所在的多边形孔边或 者所述任意一个或多个顶点所在的多边形孔边的边方程值为零的情况下,判定所述当前像 素在所述任意两个相邻顶点所在的多边形孔边上或者所述任意一个或多个顶点所在的多 边形孔边上。
26. 根据权利要求25所述的检测当前像素是否位于多边形中的系统,其特征在于,所 述像素位置判定单元在所述当前像素位于所述多边形孔的右下侧边上的情况下,判定所述 当前像素位于所述多边形中,在所述当前像素位于所述多边形孔的左上侧边上的情况下, 判定所述当前像素位于所述多边形外。
全文摘要
本发明公开了一种检测当前像素是否位于多边形中的方法和系统。其中,该检测当前像素是否位于多边形中的方法包括以下步骤获取当前像素所在扫描线与多边形的相交边;将相交边两两配对为多对配对相交边;计算当前像素位于多少对配对相交边之间;以及如果当前像素位于奇数对配对相交边之间,则判定当前像素位于多边形中,否则判定当前像素位于多边形外。本发明适用于凸多边形、凹多边形以及带有多边形孔的复杂多边形;并且本发明的方法简单,过程模块化强,容易硬件实现。
文档编号G06T7/00GK101751665SQ200810184068
公开日2010年6月23日 申请日期2008年12月15日 优先权日2008年12月15日
发明者洲镰康, 白向晖, 谭志明 申请人:富士通株式会社
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1