【问题标题】:Sphere that surely encompass given list of points [points are with x, y and z co-ordinate]肯定包含给定点列表的球体[点与 x、y 和 z 坐标]
【发布时间】:2011-04-21 17:26:09
【问题描述】:

我正在尝试找到 surly 包含给定点列表的球体。 点将具有 x、y 和 z 坐标[点在 3D 中]。

实际上,我正在尝试根据给定的点列表通过查找 MinX、MaxX、MinY、MaxY 和 MinZ 和 MaxZ 等计算找到新的三个点,并进行一些操作并找到新的三个点

我将从这三个点绘制球体。

我还将在球体直径上取所有这 三个点,这样我就有了一个独特的球体。

是否有任何标准方法可以找到给定点列表的包围球?

【问题讨论】:

  • 那你是三分还是N分?为什么要取三个点并将它们放在直径上?
  • @ maxim1000,看到我更新了我的问题
  • 顺便说一句,唯一定义一个球体需要4个点。
  • 如果我们在球体的直径上取三个点,那么三个点就足够了
  • 您可以通过将两条边的垂直平分线相交来围绕三角形构造一个外接球。但是,我强烈建议您改用 Gärtners 设备 - 它更强大(而且代码不多 - 检查他的源代码中的 Miniball_b 内容)

标签: math geometry computational-geometry


【解决方案1】:

是的,标准算法是Welzl's algorithm(假设您想要minimal球体围绕您的点)。特别是Gaertner 的改进版本非常有用、健壮且数值稳定!它也很好地处理了所有退化的情况。

算法的核心是(随机)排列点以找到位于球体边界上的 1-4 个点。它基本上是一个聪明的试错算法。从这些点中,您可以通过找到与所有这些点具有相同距离的点来找到中心。 Gärtner 的版本使用改进的数字设备来找到中心。此外,它采用了一个额外的旋转步骤,这可能使算法在大量输入点上工作得更好。

如果你想要的只是一个围绕三个点的球体,我建议你仍然使用 Gärtners“设备”来计算三角形的外接球。否则,该方法可能很容易退化(即当三角形非常平坦时)。

【讨论】:

  • 您可能还想看看github.com/hbf/miniball,它在高维度(比如高达 10,000)中效果特别好。对于 2D 和 3D,Bernd Gärtner's 实现可能是最快的。对于更高维度,前面提到的 Github 项目(Bernd、Martin 和我)中的算法会快得多。对于更高的维度,您可能需要使用“核心集”算法。
【解决方案2】:

您需要 3 分还是任意数量的分?

如果您只需要 3 个点的答案,则每对点定义一条线段。取最长的线段。取一个以该线段中间为中心的球体,其半径是线段长度的一半。有两种情况。

  1. 第三个点在初始球体内。如果是这样,那么你有最小的球体。
  2. 第三个点在初始球体之外。然后Find Circum Center of Three point of Triangle [Not using Compass] 的解决方案将为您提供包含这 3 个点的最小球体的中心。

如果您需要任意数量的点,我会使用某种迭代逼近算法。由于您似乎不需要那个,所以我不会详细说明。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-04
    • 1970-01-01
    • 2014-12-02
    • 2011-12-12
    • 1970-01-01
    • 2019-04-10
    • 2016-09-07
    • 1970-01-01
    相关资源
    最近更新 更多