最紧密的锥体适合一组方向

时间:2013-01-03 12:10:08

标签: 3d geometry data-fitting

给出3D中的一组单位方向 d_1,...,d_n

如何找到它们周围最紧的锥形?

E.g。如何找到另一个单位向量 m ,以及表示角度的标量值 alpha ,以便:

foreach i,AngleBetween( m d_i )< alpha

alpha 是最低的。

注意补充:方向可以跨越半个空间。在具有“锥形”的这种情况下,我们指的是从锥形顶点开始并且在距锥形轴的给定角度内的半线组。

2 个答案:

答案 0 :(得分:1)

如果你的方向组都在原点的一半空间内,那么你可以计算单位半径球面上矢量尖端的凸包,这会在该球体上产生一个凸多边形,然后找到最小的圆包围那个多边形。您可以通过投影到合适的平面来避免球面计算。

我意识到这是一个抽象的观点,你可能需要更具体的建议,但它仍然可能会有所帮助:凸面船体+最小限制圈。

如果你的方向超过半空间,那么你需要在这种情况下定义“锥形”的含义。

答案 1 :(得分:0)

这是线性编程问题。

找到一个,p最大化cos(a)受制于:
px * d1x + py * d1y * pz * d1z> = cos(a)
px * d2x + py * d2y * pz * d2z> = cos(a)
...
px * dnx + py * dny * pz * dnz> = cos(a)

我会研究LP算法。与此同时,我已经解决了一个非常类似的问题,可能是一个跳跃点:https://github.com/VictorDavis/GeoConvexHull。你是对的,一旦找到凸包,你就可以找到最小的外接圆。事实证明,证明同一半球中的n个点是非平凡的。也许这个算法可以定制,以回答你的“最小锥”问题。