三维凸包最经典的算法是:增量法。
在这本书:"Computational Geometry in C" (Second Edition) by Joseph O'Rourke., 中文名《计算几何》
这本书中有完整的增量法求取凸包的代码。
下载的地址:http://maven.smith.edu/~orourke/books/ftp.html
我这里想说明的是,那本书中给出的代码中顶点类型为int型。起初我想int类型有了,改成float型是比较简单的,但是直接改过以后结果始终不对,甚至怀疑是算法的问题。。。后来看了原书中的解释,才知是作者故意使用int类型计算的,因为int计算效率高,而且整个凸包算法中实际计算的也就是一个函数:VolumeSign函数。
这段代码中,作者故意使用了double计算,最后再转化为int类型结果。
所以当顶点为float型时,可以将float型扩大适当的倍数成了整数。注意只要上面的那个函数中double不越界就可以。最后再将所得凸包的顶点缩小相应的倍数。
注意:这里使用整数代替浮点数,速度大大提高,但是精度会有所损失。。。