在计算机图形学中,开窗裁减是一项基本操作,在显示图形子集的过程中,按照显示窗口的形状,对图形集合延窗口边线裁减,保留当前窗口内的部分,裁减掉窗口外的部分。地图标注也是基于这个基础,对窗口内的图形进行标注,同时控制标注的位置。开窗裁减是图形显示和标注的基础,在GIS平台内核每一步显示中,都要调用此功能,它的效率将直接影响整个地图显示的效率,本文将重点介绍如何进行矩形开窗裁减。 矩形开窗裁减是最简单,也是最常用的一种裁减方式,折线、多边形的裁减都可以化归为线段的裁减,下面就讨论线段的矩形开窗裁减。有关开窗裁减的算法,已经比较成熟了,比较著名的算法有:Cohen-Sutherland 编码算法、梁友栋-Barsky算法,以及这些方法的改进。这里我们介绍Cohen-Sutherland 编码算法。 线段裁减效率的瓶颈主要在线段求交判断上,建立方程求线段交点运算比较耗CPU时间,同时运算也是比较频繁的,减少不必要的线段求交是提高效率的关键。Cohen-Sutherland 编码算法,是用四个比特bit对平面9个区域进行编码,编码方法如图, ![]()
线段的端点落在哪个区域,线段的端点就拥有该区域的编码,如图:
![]() 图中线段a的两端点A(0100)、A‘(0010);线段d的两端点D(0000)、D’(0000);线段g的两端点G(1000)、G‘(1010);等等,以此类推,其他线段的两端点的编码也可以得到。对于一条线段,如果把两个端点的编码进行“按位与”运算,结果为两大类情况: 一,“按位与”结果非零,表明线段两端点位于同侧,不予裁减显示,如,线段g ; 二,“按位与”结果为零,这种情况又可以分为三种类型, 1,两端点编码都为0000,则该线段全部位于窗口内而被显示,如,线段d, 2,其中只有一个端点的编码为0000,则该线段与窗口有一个交点,如,线段e, 3,两个端点的编码都不为0000,则该线段与窗口有两个交点或者无交点,如,线段a,两端点都不为0000,与窗口无交点,线段f,两端点都不为0000,与窗口有两个交点。
以上就是Cohen-Sutherland 编码算法的思路,在同侧的线段“按位与”结果非零,容易排除,全部在窗口内的线段,也比较容易确定,其他很多情况需要进一步判断和处理,才能确定如何进行裁减,而这一判断处理过程通常需要进行线段求交,如何有效地确定线段与窗口的交点,以及如何有效地排除与窗口无交点的情况,从而达到有效减少相交运算的次数,将是下面要重点考虑的,本文将对此情况进行详细地分析。 我们知道,线段与窗口的交点个数,只有三种可能:1,无交点;2,一个交点;3,两个交点。下面我们就各种情况给予详细说明。
线段两端点编码进行“按位与”运算,结果非零,表明线段位于同侧,应予以排除,无需裁减显示。
![]() 以下情况为线段两端点编码进行“按位与”运算,当结果为非零的时候,再进行“按位或”运算。 一、当“按位或”运算结果等于0000,表明两端点都在窗口内,应予以保留,无需裁减。
二、当“按位或”运算结果等于“上下左右”区域的编码,即
1000
、
0100
、
0010
、
0001
这四个数,根据“按位或”的结果,即可判断线段与哪个窗口边线相交。
![]() 三、当“按位或”运算结果等于1100、0011。表明两端点分别位于对面的区域内,即“上下”或者 “左右”,根据根据“按位或”的结果,即可判断是与上下两个边线求交裁减,或者左右两个边线求交 裁减。
四、当“按位或”运算结果等于
1001
、
0101
、
1010
、
0110
,即结果等于四个角区域的编码,这种情况分两类:
一类是其中一个端点位于
0000
区域内,只存在一个交点,需要进行一次求交运算测试,判断需要与哪条窗口边线求交裁减;一类是两个端点都位于相邻的斜对角区域,存在两个交点或者无交点,也是需要一次求交测试,才能判断。这两类通过通过判断是否有端点的编码是
0000
来进一步区分。
![]() 五、当“按位或”运算结果等于1101、1011、1110、0111,即,存在三位数为“1”,一个端点位于 角区域之一,一个点位于上下左右区域之一,存在两个交点或者无交点,需要进行零次或者两次测试, 由“按位或”的结果,先与正区域的窗口边线求交测试,如果不存在交点,表明无交点,直接舍弃,如 图线段a,如果存在交点,如图线段b,c,则需要再进行一次求交测试,判断与哪条窗口边线相交。
六、当“按位或”运算结果等于
1111
,即,两端点位于对角的角区域上,存在两个交点或者无交点,也有两种情况,需要根据一个端点的编码判断是其中的哪一种情况,确定以后,需要进行一次求交测试,相交的两条窗口边界是相邻的。
![]() 以上先进行了线段端点的“按位与”运算,排除掉结果非零的情况,针对结果为零的情况,再进行“按位或”运算,分各种情况进行了讨论。
开窗裁减,在GIS引擎开发中,是图形显示,窗口内图形标注的前提,尤其是矩形的线段开窗裁减最常用,也最具代表性,为多边形的面裁减,多边形窗口的裁减提供了思路,在计算机图形学、GIS中有着特殊的意义。 MSN : geochenyj@hotmail.com |
开窗裁减
最新推荐文章于 2024-08-02 20:52:12 发布
开窗裁减
2007-08-17 15:55