计算几何笔记

老生常谈

注意精度;

二分控制次数。

凸包

三维凸包

三维凸包本质上和二维凸包一样,是一个包裹了所有关键点的最小凸多面体。

增量法

我们先考虑三维凸包的存储:

首先,在没有共面点的情况下,可以用一堆三角形来存储;若有共面,则加入扰动。

其次,每个三角形的三条边都有方向,边会按照 a-b,b-c,c-a 的顺序来存储,取决于 a、b、c 的顺序。

第三,对于每条边,它必然被两个三角形包含,而且两个三角形中这条边的方向恰好相反。

于是,我们每次加入一个点的时候,枚举每个面,判断一下这个点在哪些面的上方,然后对这些面的每一条边都打上带方向的标记,而当一条边被两个方向都标记的时候,说明相邻的两个面都被看到了,这条边也就没用了,只有一个方向被标记的边就会是新的凸包上的边。然后注意一下新加入的边的顺序。

不难发现面数总共是 \(O(n)\) 级别的,总复杂度 \(O(n^2)\)

更高明的做法

不会。

posted @ 2021-03-26 21:31  FakeDragon  阅读(37)  评论(0编辑  收藏  举报