3d 三维空间中半空间集合中的顶点

3d 三维空间中半空间集合中的顶点,3d,geometry,computational-geometry,3d,Geometry,Computational Geometry,有人能推荐一些好的算法,或者他们自己的方法来计算三维半空间集合的顶点吗?保证半空间是凸且有界的 到目前为止,网络搜索一直是徒劳的,qhull可以执行此操作,但我希望在这个问题上有一个更数学的倾向,而不是阅读大量的源代码-但这是最后的手段。假设所有半空间都是由一个平面定义的,所有东西都在该平面的“后面”(即,相对于有向法向量)在半空间之外,平面上或前面的所有东西都在里面,最明显的解决方案是: 对于每一对平面,获取并存储线交点 这将为您提供一组线。然后,对于每对线和平面: 如果线正好停在平面上

有人能推荐一些好的算法,或者他们自己的方法来计算三维半空间集合的顶点吗?保证半空间是凸且有界的


到目前为止,网络搜索一直是徒劳的,
qhull
可以执行此操作,但我希望在这个问题上有一个更数学的倾向,而不是阅读大量的源代码-但这是最后的手段。

假设所有半空间都是由一个平面定义的,所有东西都在该平面的“后面”(即,相对于有向法向量)在半空间之外,平面上或前面的所有东西都在里面,最明显的解决方案是:

  • 对于每一对平面,获取并存储线交点
这将为您提供一组线。然后,对于每对线和平面:

  • 如果线正好停在平面上,什么也不要做
  • 如果直线与平面相交,但还不是线段,则将其转换为延伸至交点的线段
  • 如果它已经是一条线段并与平面相交,则剪掉平面后面的部分
  • 如果直线已经是线段,并且完全位于平面的一侧,则不执行任何操作

然后收集所有线段端点的集合。

假设所有半空间都由一个平面定义,且该平面“后面”的所有东西(即相对于有向法向量)都在半空间之外,而该平面上或前面的所有东西都在里面,最明显的解决方案是:

  • 对于每一对平面,获取并存储线交点
这将为您提供一组线。然后,对于每对线和平面:

  • 如果线正好停在平面上,什么也不要做
  • 如果直线与平面相交,但还不是线段,则将其转换为延伸至交点的线段
  • 如果它已经是一条线段并与平面相交,则剪掉平面后面的部分
  • 如果直线已经是线段,并且完全位于平面的一侧,则不执行任何操作

然后收集所有线段端点的集合。

我担心这可能会非常昂贵,但在看了数学之后,这并不是真的。我发现的其他几个更“奇特”的解决方案在数学上更复杂,但速度更快。我担心这可能会非常昂贵,但在看了数学之后,这并不是真的.我发现的其他几个更“奇特”的解决方案在数学上更复杂,但速度却快得多。