dbice 发表于 2004-6-29 12:47:00

[分享]如何分割任意多边形?

<FONT face=宋体 size=2>软件Topology Creator 新发现,你可以使用它用来分割任意复杂的多边形<BR><BR>比如你已经有一个多边形:Pline线,您可以将它Copy并粘贴到一个新文档,炸开为Line,然后描画分割线可以是一条,或多条(必须使用多边形的折点)在Topology Creator点击OK,看看有什么效果,所有被分割的多边形将自动封闭,这就实现了任意多边形的自动分割。你说她有用吗?欢迎尝试!!!<BR><BR><BR>主页:</FONT><A href="http://cadx.go.nease.net/" target="_blank" ><FONT face=宋体 color=#003300 size=2>http://cadx.go.nease.net/</FONT></A><BR><BR><FONT face=宋体 size=2>高速无广告镜像:</FONT><A href="http://cadx.shuigong.com/" target="_blank" ><FONT face=宋体 color=#003300 size=2>http://cadx.shuigong.com/</FONT></A>

莫名 发表于 2004-6-29 18:35:00

AutoDesk Map有这样的功能

dbice 发表于 2004-6-30 08:14:00

本帖最后由 作者 于 2004-7-2 9:24:03 编辑

但是如果多边形包含小岛连线,AutoCAD Map就不能处理了小岛连线就是(人工弧段),用途是连接两个有包含关系的多边形,详细情况可以参考软件Topology Creator的帮助,请看下图



http://cadx.shuigong.com/Show.gif

莫名 发表于 2004-7-1 22:25:00

为什么要连接两个有包含关系的多边形的那根线呢?


湖中岛的问题不用小岛连线吧!

dbice 发表于 2004-7-2 09:05:00

关于小岛连线的解释:为什么需要这条线(人工弧)?


1.用途一:精确的面积表示<BR>               往往GIS数据不仅仅局限于一个平台,以MapInfo为例它有Region这个实体,可以表示内部有空洞的多边形,但是当将MapInfo数据导入AutoCAD你就会发现,Region变成了Polyline 原有的包含关系就被破坏了,类似的现象很多很多,最终用户的平台不一定支持有包含关系实体的表示。这是事实。那么如何解决这个问题?<BR>               因此就引出了小岛连线。使用它有很多好处,<BR>       例子1:如果你需要将每一个多边形的坐标导出到数据库中,而对于最常用的关系数据库而言,根本无法表示包含关系,比如一个湖泊,内有很多岛屿,我要表示的是水面这个多边形,导出到数据库后如果要记录哪个小岛是哪个多边形的子岛,非常困难,你可能想到添加一个字段来表示包含关系,但是当出现大岛套小岛的情况要想表示层层的包含关系,非常困难,无疑将破坏已经定义好的数据库结构。如果有了岛线,就可以方便的将有包含关系的图形直接存储到关系数据库中去。以后导入任何图形系统,你可以将岛线删除(共用同样的节点,而且方向相反的线)。


       例子2:通过一个点来提取一个多边形,想象一下有这样一个应用,数据平台是AutoCAD 还是以湖泊为例,内有很多岛屿,用户要求编写这样一个管理程序,当用鼠标点击一个多边形的内部,后就由程序判断包含这个点的最近最小的多边形实体并提示用户这个多边形的面积。推想一下这个程序如何编制,无论使用什么算法最终可能用到的就是AutoCAD的选择集功能,但是当屏幕缩放到一定程度你会发现,仅仅能选出看得见的实体,即使你获得了湖泊的边界,你还要不断地排除湖泊内的岛屿的面积。如果岛屿中又有岛屿(这种情况经常出现在,马路包围的街区中)程序就很复杂,但是如果你能够获得湖泊的边界而且已经有了小岛连线。你就轻而易举的利用面积计算公式(标准计算公式)轻易地计算出多边形的面积。<BR>                       谈到多边形的面积我还想说一下关系数据库中的多边形数据。如果已经将多边形存储到数据库中,请想象一下如果多边形内部有空洞该如何迅速计算出它的面积,如果有岛线,很简单利用面积计算公式一次提取某一个多边形的所有节点,就可以立即计算出来。同时因为小岛连线的特殊性它并不影响整个多边形面积的精确度,因为夹缝部分面积为0。


               例子3:我想大家都有在AutoCAD 环境中使用填充的经历,还是那个例子湖泊,我要往湖泊的多边形上填充颜色,无论你使用的是AutoCAD那个版本,你会发现有两个填充相互重迭的问题存在,湖泊的最外围可以使用一个填充,内部的小岛使用另一个填充实体,能不重迭吗?AutoCAD到现在为止也没有很好的解决这个问题。包括AutoCAD 2005,当用户操作重迭的实体的时候很容易就会将显示的顺序打乱。如果出现多层重迭的现象。这种不断地调整实体的前后顺序将会让用户疯掉。那么最佳的解决方案是什么呢?小岛连线,有了它填充的边界会自动知道将内部的空洞挖出。而且打印的时候丝毫不影响效果。<BR>               此外如果你自己设计一个图形系统,你会发现如果使用岛线,多边形数据的存储结构会非常简单明了。我想你应该明白我的解释。

莫名 发表于 2004-7-2 20:45:00

AutoDesk Map 2004建立拓扑可以检测到内部有空洞的多边形,生成的拓扑信息已去除空洞,如面积。


用过AutoDesk Map 2004吗?试试吧!

LONGXIN 发表于 2005-4-2 18:04:00

同意楼上的。小岛连线完全是画蛇添足。


如果不是cad平台,那就自己再开发一个类似图案填充的图元类型出来,如果是cad平台就就更好了,用图案填充本身就可以排除孤岛。


而且用小岛连线,当孤岛关系复杂时,用程序自动处理连线时,应该怎么连又是一大难题。


用lisp在cad中计算图案填充的程序(包括有孤岛)并不困难,本人就有一例。况且用图案填充还可以用拟合曲线、圆弧、椭圆、甚至spline线等很多种线型作边界。试问楼主,当你的一个区域是有上述所有的线型组成时,你的面积如何计算?
页: [1]
查看完整版本: [分享]如何分割任意多边形?