【发布时间】:2016-09-28 13:07:41
【问题描述】:
假设四个 4D 点 [1/3, 1/6, 1/3, 1/6], [0, 0, 1/2, 1/2],[0, 0, 0, 1],和 [0, 0, 2/3, 1/3] 被给出。如何在 Python 中计算它们的凸包的以下属性?
1) 极值点集
2) 凸包在不同坐标轴上的投影,即x轴,y轴,...。
【问题讨论】:
假设四个 4D 点 [1/3, 1/6, 1/3, 1/6], [0, 0, 1/2, 1/2],[0, 0, 0, 1],和 [0, 0, 2/3, 1/3] 被给出。如何在 Python 中计算它们的凸包的以下属性?
1) 极值点集
2) 凸包在不同坐标轴上的投影,即x轴,y轴,...。
【问题讨论】:
我不能专门针对 Python 说话,但您想要的算法是 Jarvis March (aka gift-wrapping method). 从找到一个已知的极值点 A 开始(只需通过数值比较坐标)。然后,将此点与集合中的每个其他点 B 配对,直到找到一个使得集合中的所有其他点都位于 AB 的一侧。这意味着 B 是一个极值点,因此将 A 替换为 B 并重复该过程。最终结果是极值点和凸包。
注意复杂度为 O(nh),其中 h 是最终找到的外壳顶点数。 Graham scan 效率更高,但不能超越三个维度。
【讨论】: