三维凸包

4 评论69次阅读2008.03.28 18:07; 作者:Felicia 

amath

三维凸包

Felicia
Mar 28, 2008

1 三维凸包的复杂度

定理 1
设`P`为包含`n`个顶点的任意凸多面体。则`P`中所含的边不会超过`3n – 6`条,所含的面不会超过`2n – 4`张。
证明:该凸多面体`P`可看做平面图。在与`P`对应的图中,每张面都是至少由`3`条边围成的,而且每条边都与两张面相关。因此我们得到`2n_(e) <= 3n_(f)`。代入欧拉公式`n - n_(e) + n_(f) = 2`,得到:`n + n_(f) -2 <= 3n_(f) / 2`。于是有`n_(f) <= 2n - 4`,再代入欧拉公式得到`n_(e) <= 3n - 6`。

因此我们有如下结论:
推论 1
`n`个点的三维凸包的边数为`O(n)`,面数为`O(n)`。

2 三维凸包的算法

计算三维凸包的算法有很多种,包括:随机增量法,卷包裹法,Graham扫描法等。其中随机增量法实现起来很简单,尤其适合信息学竞赛的应用。下面给出随机增量算法:

  1. 在`P`中找出4个不共面的点`p_1,p_2,p_3,p_4`,构成一个四面体,作为初始凸包。
  2. 将其余各点随机排列,按照以下规则加入凸包(假设加入的点是`p`):
    1. 将凸包看作实体,确定从`p`能够看到的面。
    2. `p`的可见面与不可见面的交界称为地平线,将`p`与地平线上的每个点连接,生成若干个新的面。
    3. 删去原先从`p`可见的面。

3 随机增量算法的演示程序

endamath

相关文章

  • 评论 (4)
  • 引用通告 (0)
发表评论 引用通告

  • liruqi | 回复 1F

    三月 28th, 2008 at 22:37

    Demo 是不是LiZhiXu大牛做的?

  • Rainco | 回复 2F

    三月 28th, 2008 at 23:19

    不错。。。
    ps:演示程序很炫很强大~~

  • Rainco | 回复 3F

    三月 28th, 2008 at 23:20

    不错。。。
    ps:程序演示很炫很强大

  • Felicia | 回复 4F

    四月 19th, 2008 at 12:32

    演示程序可能导致浏览器挂掉,所以暂时去掉了

暂无引用通告