多边环境公约范文

2024-08-13

多边环境公约范文(精选3篇)

多边环境公约 第1篇

在地理信息系统GIS (Geographic Information System) 环境中存在频繁的关于图元 (如点、线、多边形) 之间拓扑关系的计算, 而且其它图元和多边形之间的拓扑关系运算规模都比较大, 在拓扑关系的运算中占的比例也比较高, 所以我们通常通过对多边形进行预处理来提高运算效率, 一个经典的方法就是将多边形分割成一组可以用平面方程来表示的梯形[1]。

Weiler算法的的核心思想就是当两个多边形进行剪裁的时候, 如果存在一些交叉点, 那么每个交叉点对于一个重叠区域来说是出点或者是入点, 这依赖于相交的次序。计算出交叉点之后, 重叠区域和分离区域就可以通过一个出点和入点为顶点的集合描述出来。现在任给一个n个顶点的被剪裁多边形和m个顶点的剪裁多边形, Weiler算法计算剪裁区域的时间复杂度是O (n*m) [2], 其中绝大部分时间耗费在计算两个多边形的交叉点上。对于剪裁区域的任意一条边界, 无论它与被剪裁区域的MBR (Minimum Bound Rectangle) 关系如何, 即使它们并不相交, Weiler算法也会将它和被剪裁区域的所有边界进行交叉点的计算, 这样做不但耗时而且没有任何意义。还有其它一些Weiler算法的变种, 如Vatti算法[3]和 Greiner-Hormann算法[4], 它们和Weiler算法有相同的时间复杂度[4], 也有上述相同的缺点。

本文提出了一种基于预处理的多边形的计算方法, 旨在减少需要参与运算的剪裁多边形的边界数量, 该算法计算交叉点的时间复杂度小于Weiler算法。

1 算法描述

1.1 多边形的梯形分割

一个梯形可以通过一组平面方程来描述, 如图1所示, 对多边形进行预处理的目的就是将多边形分割成一组这种梯形 (三角形可以看做是一种退化的梯形) , 如图2所示。假设多边形是以点集的形式给出, 那么分割的过程是:首先根据顶点的X值对所有的顶点进行快速排序, 然后根据互不相同的X值将多边形分割成若干个子区域, 最后对每个子区域里面的梯形建立平面方程, 并将这些方程按照它们的Y值 (如按照方程的最大Y值或最小Y值) 进行排序。这样最终一个多边形可以用一组有序的方程来表示, 整个过程的时间复杂度是O (n×logn) [1]。

1.2 关键数据结构

这里有两个主要的数据结构用来描述如何分割一个多边形, 本文中直线就指线段。

上述数据结构用来描述子区域的方程。然后一个多边形就可以用一组子区域来表示。

1.3 计算剪裁区域

计算多边形之间剪裁区域的过程主要有以下四个步骤:

步骤1 计算剪裁区域Pclipping的边界方程 (以下简称边界) , 并将它们加入到方程集合LSclipping中, 该过程的时间复杂度为O (m) 。

步骤2 对于集合LSclipping中的任一边界, 计算它的MBR与被剪裁区域Pclipped的MBR之间的关系, 如果它们之间有重叠区域, 把该边界加入到边界集合LScal中, 该过程的时间复杂度为O (m) 。我们假设集合LScalv个元素。

步骤3 对于集合LScal中的每个边界Lcross, 按顺时针方向遍历, 计算与多边形Pclipped之间的交叉点, 如果存在交叉点, 根据交叉点计算出来的顺序索引交叉点, 如不存在为相交的两条边界各新建一个链表用来存储交叉点索引并把交叉点设置为出点或者入点, 另如不存在则新建一个交叉点列表存储交叉点坐标、索引及对应的相交边界的funcId, 该过程的时间复杂度将在节2中分析。

步骤4 对LScal中的每个边界Lcross, 按逆序遍历, 如果与Pclipped相交, 从Lcross的交叉点链表的最后一个出点Pexit开始, 根据Pexit中记录的边界索引funcId找到位于Pclipped上的边界Lexit, 然后沿着边界Lexit按逆时针方向 (对多边形Pclipping, 始终以顺时针方向) , 如果在Lexit上有其它交叉点, 我们按当前顺序第一个遍历到的肯定是多边形Pclipping的入点, 否则遍历与Lexit具有相同顶点的在Pclipped中的边界直到找到一条有交叉点的边界, 该边界上按当前顺序遍历的第一个交叉点就是Pclipping的入点, 然后再找到该交叉点对应的在Pclipping上的边界, 再从该边界开始顺时针查找另一个出点, 把这些遍历到的出入点或者顶点按遍历顺序加入到集合SPvertex中, 最后我们会得到以点集SPvertex形式给出的非重叠区域。

然后重复上述过程就可以枚举出所有的非重叠区域, 当枚举重叠区域的时候可以采用相同的算法, 但是需从最后一个入点开始进行。如果有k个交叉点, 该枚举过程的时间复杂度为O (n+m+2k) 即O (n+m) , (k< (n+m) ) , 与Weiler算法的中枚举过程的时间度杂度相同[5], 但是减少了枚举过程中遍历顶点和交叉点的次数。

以虚线形势给出的矩形是剪裁多边形, 另外一个是被剪裁多边形。图3中, 点Ι1, Ι3, Ι5, Ι6, Ι8, Ι10是入点, 点Ι2, Ι4, Ι7, Ι9, Ι1, Ι12是出点, 算法从Ι12开始, 查找出所有的非重叠区域:

当所有的出点被遍历完之后, 开始查找重叠区域, 从入点Ι5开始, 枚举出重叠区域:

所有出点都已被遍历, 已枚举出所有重叠区域和非重叠区域。

当采用Weiler算法的时候, 如果我们计算边界 (R2, R3) 与被剪裁区域的交叉点, 那么需要计算改边界与被剪裁区域中所有边界的交叉点, 采用本文算法, 只需要计算与边界 (P18, P19) 和边界 (P0, P20) 的交叉点。

2 算法分析

1.3节中已经提到, 我们只需要分析步骤3中计算两个剪裁多边形之间交叉点的时间复杂度, 即主要关注如何计算一条边界与多边形之间的交叉点。首先折半查找与边界L相交的子区域, 如果多边形有s个子区域那么时间复杂度为O (logs) , 现在假设相交的第一个子区域是Sstat (1≤starts) , 一共与p (1≤ps) 个子区域相交, 那么相交的任意一个子区域用Sstart+j-1 (1≤jp) 来表示, L落在子区域Sstart+j-1中的部分为Lj。给定一个子区域Sstart+j-1和位于其中的直线Lj, 计算直线Lj的相邻直线 (如果两条直线的MBR有重叠, 两条直线相邻) 的时间复杂度为logks+j-1, 假设有aj条相邻直线, 那么在子区域Ss+j-1中耗费的时间为logks+j-1+aj, p个子区域耗费的总时间Tline为:

Tline=∑j=1p (logkstart+j-1+aj)

=∑j-1plogkstart+j-1+∑j=1paj (1≤j≤p)

假设被剪裁多边形被分割成t个梯形, 那么平均情况下每个子区域含有ts个梯形和2×ts个边界 (不包含与X轴垂直的边界) , 由于直线和子区域之间的平面关系有太多种组合 (例如直线的斜率和子区域中的边界的斜率对aj的影响很大) , 我们只讨论最坏情况下的时间度杂度, 在最坏情况下, aj= kstart+j-1时间复杂度为:

WΟRSΤ (Τline) =j=1p (logks+j-1+ks+j-1) j=1p (log2×ts+2×ts) =p× (1+logq+2×q) (q=ts)

因为ts (每个子区域中至少有一个梯形) , 所以logts<ts, 时间复杂度为O (p×q) , q的取值依赖于具体的多边形, 对于凸多边形q=1, 对于非凸多边形, 平均情况下q <logn。最坏情况下计算v条直线的交叉点的时间复杂度为:

WORST (Tv-lines) =∑k=1vPk×qv×q×pmax

(1≤max≤v, Pmax为最大值)

所以该算法耗费的时间小于O (n+2m+2k+v×q×pmax) 最坏情况下的时间复杂度为O (n+m+v×q×pmax) , 当pmax远小于n (Pclipping的MBR远小于Pclipped的MBR) 并且不是Pclipping中所有边界都参与运算 (v < m) 的时候, 该算法要比Weiler算法快很多, 当v = p 或者 Pmax= n的时候意味着Pclipping的任一边界都与Pclipped相交, 此时p≈1该算法退化为Weiler算法。

3 实 验

如表1所示, 我们用不同顶点个数的非凸多边形进行测试, 表的第一行表示被剪裁多边形Pclipped的顶点个数。对于每个多边形, 我们随机生成5000个矩形, 并且矩形的MBR包含在Pclipped的MBR中 (对于我们的算法接近最坏的情况) , 它们或者与Pclipped相交或者在Pclipped中, 然后计算矩形和Pclipped之间的剪裁区域。我们在表中给出了两种算法所消耗时间的对比, 算法以C++代码实现, 测试机器配置为:处理器 Athlon 4200+, 内存1G 。图4是表1中实验数据的图形表示, 从图中我们可以看出随着顶点数目的增加该算法的性能提升更为明显, 因为当顶点的数目比较小的时候, 计算交叉点的时间还不足以成为Weiler算法的瓶颈, 这与我们的预期也是相吻合的。

4 结束语

本文提出的在GIS环境中基于预处理的多边形剪裁算法优于Weiler算法。该算法主要通过减少多边形之间交叉点的运算时间来提高效率, 并且由于实验是在接近最坏的情况下进行, 所以在平均情况下效率提升应该还会更高。我们将该算法应用到了GIS项目当中, 提高了拓扑关系计算时的性能并减少了系统的响应时间。

摘要:在Weiler算法的基础上提出一种在GIS环境中计算非凸多边形之间的剪裁区域的新算法。该算法前提是多边形已根据梯形分解法被分解成若干个梯形, 首先计算两个多边形之间的交叉点, 并在计算的过程中按Weiler算法中的出点和入点来标示它们, 然后逆序遍历所有的交叉点来确定剪裁区域。该算法通过减少交叉点的计算时间和遍历时间来提高Weiler算法的效率。在GIS这种具有频繁拓扑关系运算的环境中可以很好地提高运算效率, 最后通过实验验证, 即使在接近最坏的情况下, 该算法也优于传统的Weiler算法。

关键词:Weiler,梯形分割,多边形剪裁

参考文献

[1]Zalik B, Gordan J.Auniversal trapezoidation algorithm for planar poly-gons[J].Computer&Graphics, 1999, 23 (3) :253-263.

[2] Weiler K, Atherton P.Hidden Surface Removal Using Polygon Area Sorting[C].Proceedings of SIGGRAPH’77, New York: ACM Press, 1977:214-222.

[3] Vatti B R.A generic solution to polygon clipping[J].Commun, ACM, 1992, 35:56-63.

[4] Greiner G, Hormann K.Efficient Clipping of Arbitrary Polygons[J].ACM Transactions on Graphics, 1998, 17 (2) :7-83.

村民环境卫生公约 第2篇

界牌镇_______村村民环境卫生公约

为优化农村人居环境,改善村容村貌,更好地规范村民环境卫生行为,不断提高全村村民的生活质量,加快社会主义新农村建设,现就村民环境卫生制定如下公约。

一、牢固树立社会主义荣辱观,坚持以讲卫生为荣,不讲卫生为耻。

二、崇尚文明、树立新风、展示新貌,经常做好家庭环境卫生保洁。

三、室外保持整洁,房屋前后无杂草、无乱堆乱放,畜禽圈舍、厕所安排得当,粪便垃圾入池,门前用具摆放整齐,墙体无乱写乱画,乱钉乱挂。好范文版权所有

四、室内经常打扫,清洁明亮,家具干净,摆放有序。

五、搞好四旁植树,绿化美化家园。

六、争先创优,努力争当星级卫生文明户。

七、带头弘扬正气,敢于同一切不讲卫生,破坏环境的行为作斗争。

八、自觉接受社会监督和邻里监督,对不守社会公德,阻挠村庄环境整治的家庭户,一律提交村民代表大会讨论决定,实施相应的追究和处罚。

以上公约,希全体村民共同遵守。

_________村村民委员会

办公室环境维护公约 第3篇

为了给公司全体同事创造一个舒适、清爽的办公环境,减少因为环境因素带来的干扰,人力行政部于2013年3月份对办公室环境维护方面制定了《办公室环境维护公约》,但经过几个月的试行,发现仍有问题存在,现就《办公室环境维护公约》作一重申,希望引起全体同事足够的重视。

1. 办公室内不要长期放置食物(台面、抽屉里等位置),容易引起蟑螂、老鼠的光顾和滋生繁殖。

2. 各位同事自带饭菜的,在茶水间加热时,溢出到外面的食物和汤汁请及时擦拭干净;公司明确规定不允许在办公座位上用餐(含早、午、晚餐),用餐请到指定的阳台处(由于夏季炎热,可在小会议室用餐,但洒落在台面或地下的饭粒、菜渣等要及时清理干净);用餐完毕后,剩余的残渣请倒入阳台放置的专用垃圾桶中,不要倒入茶水间的垃圾篓内;用餐完毕后饭盒及时清洗干净,清洗饭盒时请将洒落在台面或水池内的残渣及时清理干净;下班记得将饭盒等餐具带回家,勿滞留在办公室内。

3. 在外打包的同事,用餐后将饭盒丢入阳台专用垃圾桶内,请勿丢入茶水间垃圾篓内。

4. 茶叶等固体物质不要倒入水池内,请倒入垃圾篓中。

5. 办公室区域内禁止吸烟(含卫生间),吸烟应在吸烟区。

6. 下班后请各位同事收拾整理好各自的台面,重要文件材料请放入文件柜或抽屉;同时摆放好自己的座椅,关闭座位上的一切电源,电脑显示屏电源须关闭(经每日巡查,常有不关显示器电源的情况发生)。

7. 人力行政部会定期对办公室进行消杀工作,请各位同事理解并配合。

8. 为规范员工着装,展现员工整体划一的仪表仪容,树立公司良好的精神风貌,规定如下:

8.1 办公室内禁止穿拖鞋;

8.2 女同事着装端庄得体,梳妆适宜,不穿超短裙/短裤,不化浓妆,头发梳理整齐;

8.3 男同事不穿短裤,不留长发和胡须;

人力行政部每日例行稽查,如发现违反以上公约者将知会部门负责人责令其改正,对于屡次违反者将进行通报批评。

【良好的环境,大家的功劳;维护好环境,每个人受益。】

人力行政部

上一篇:训练适应下一篇:心肺复苏教学中的体会