从许多3D平面中查找AABB-形成凸包

时间:2019-07-04 10:50:20

标签: algorithm language-agnostic convex-polygon

我有一些3D平面信息。当所有平面连接在一起时,它将形成3D凸包。

enter image description here

这里是输入示例。
每个3D平面均由该平面上的一个点及其法线表示。
所有法线指向内部:-

- (-1,0,0)              with normal = (1,0,0)
- ( 1,0,0)              with normal = (-1,0,0)
- (0,-1,0)              with normal = (0,1,0)
- (0,1,0)               with normal = (0,-1,0)
- (0,0,-1)              with normal = (0,0,1)
- (0,0,1)               with normal = (0,0,-1)
- (0.142,-7.18,10.12)   with normal = (0.001,0.31,-0.95) 
- note: some planars can be redundant (contribute nothing) e.g. the last one

问题:如何从中计算AABB?
 上例中的解决方案是((-1,-1,-1),(1,1,1))

(起初,我要重心,但我意识到that is a Hard problem
  AABB对我来说应该足够好。 )

我的较差解决方案是使用Constructive solid geometry查找所有船体顶点,然后对其进行MIN&MAX,但性能太差了。

实际上,我想在两个凸包重叠时找到3D包的中心点。
 此信息对于物理引擎中更准确的碰撞响应很有用。

1 个答案:

答案 0 :(得分:1)

这是线性规划的经典问题。给定一组线性不等式(在您的情况下以平面表示,例如ax + by + cz + d> = 0)和一个线性函数(例如f(x,y ,z)= x),找到一个在满足所有不等式的同时最小化函数的点AABB是针对函数x,-x,y,-y,z和-z的6个此类问题的解决方案。 >

有多种方法可以解决此问题,其中最著名的是单纯形算法,还有许多现成的库(包括一些利用GPU的库)。