代码改变世界

拓扑相关的封闭曲面的空间划分问题

2010-05-29 16:39  六水  阅读(760)  评论(0编辑  收藏  举报
images/tuopu.jpg


例图:亏格为2的闭合体

1.问题

今天群里有位朋友(⊙pen∫ource(OS))讨论到封闭面的空间划分的问题
原始问题:“我想要找一个数据结构能反映封闭面(下文以BF表示)
上三角面片周围一定矩形范围的其他三角面片的集合”
OS起初的办法是通过对这个BF进行空间划分,然后根据定位点搜索附近三角形即可解决问题。
其实,如果仅仅是为了解决OS提的问题,甚至可以不用空间划分,而只需
要在构造曲面的时候,让每个三角形保存一下邻接三角形列表即可。

但我们更希望通过空间划分的形式来解决这个问题,这样的办法的使用场
合应该会更加广。

2.假设

使用空间划分的方法是有前提的,
第一个问题是:
这个BF是怎么定义的?是怎么表示的?
第二个问题是:
还有它的拓扑是怎样的?(封闭面在拓扑上的分类主要是按照它的
亏格进行的,亏格是指BF上孔的个数,譬如球的亏格为0,而环的
亏格为1,而类似手扣那样的BF的亏格则为2....),BF的顶点数、边数和三角
形数分别为V 、E 和F ,其亏格(Genus)G 可定义如下:
G = ( E−F−V + 2) / 2 .

对于第一个问题,如果该BF是没有规律地定义的,是用离散方式来组织的,那空间划分就只能用普通的空间分方法了。

二,如果该BF的表示是有规律的,譬如通过B样条曲面的方式来表示的,那它
的空间划分马上变得有趣了:
这时候我脑子里迸出了个问题,对于不同亏格的曲面,我们使用什么方式来组
织它,让它更加容易进行空间划分呢?

3.讨论

我们知道,拓扑学上亏格的定义是曲面上孔的个数,或者说,是切多少刀
才能把曲面完全分成不带孔的部分
的刀数-1(要注意的是,这里的
“刀”,其实是指沿着曲面上一条封闭的曲线)。而现在,切多少刀的问题就能
描述我们面临的空间划分的问题了。

对于亏格为0的BF,显然可以通过经纬球来描述了,而空间划分可以使用球形四叉树那样的方法。
对于亏格为1的BF,譬如环,也可以使用经纬(uv)来描述,但这时候我们需
要切两刀才能完全把它分成不带孔的两部分,而切成的两部分,其拓扑其实是
跟平面一样的了。因此,环的建模可以简单地通过两个经过变换的平面来表示。
不过,环还是属于解析曲面,这样的曲面,完全可以通过解析性的方程描述。
或者,类似现在的建模软件(MAYA)那样,使用NURBES完全描述。

而对于亏格为2的BF,譬如手扣那样的曲面,就需要切三刀才能把它完全分成两部分。

 而分割后的结果是,四个跟平面拓扑一样(与平面同胚)的曲面。这
也容易使用UV的方式来描述。因此对于这类BF,开始可以先切三刀划分为四
部分,接下来便可以使用一般的平面分割方式来划分了。