【问题标题】:Calculate equidistant point with minimal distance from 3 points in N-dimensional space计算 N 维空间中与 3 个点的最小距离的等距点
【发布时间】:2014-11-06 01:47:57
【问题描述】:

我正在尝试以任意维度对Ritter's bounding sphere algorithm 进行编码,但我被困在创建一个球体的部分,该球体的边缘将有 3 个给定点,或者换句话说,一个将被定义的球体在 N 维空间中减少 3 个点。

该球体的中心将是距(定义)3 个点的最小距离等距点。

我知道如何在 2-D 中解决它(由 3 个点定义的三角形的外圆心),并且我已经看到了一些 3D 的矢量计算,但我不知道 ND 的最佳方法是什么,如果可能的话。

(如果我走错了方向,我也会感谢有关 ND 中最小边界球计算的任何其他建议。)

【问题讨论】:

  • 这似乎更像是一个数学问题,而不是编码/编程问题。这在Mathermatica 中可能会更好
  • 该链接没有提到由三个点给出的球体,而是一个包含一个球体和一个球体外部点的球体。新球体的圆心沿旧圆心与外点的连线,该点的中点与球体上的对跖点。
  • 题目与内容不一样。我认为你需要找到一个等距的点,也可以最小化距离。尝试编辑问题以更清楚地说明您真正想要做什么。
  • @george 你是对的。对不起。
  • @YvesDaoust 你有任何证据证明那将是最小边界球心吗?

标签: geometry computational-geometry


【解决方案1】:

我的 Bounding Sphere 算法仅在 3 维中计算接近最优的球体。

Fischer 有一个精确的最小边界超球体(N 维)。请参阅他的论文:http://people.inf.ethz.ch/gaertner/texts/own_work/seb.pdf

他的 (C++/Java) 代码:https://github.com/hbf/miniball

杰克·里特 jack@houseofwords.com

【讨论】:

    【解决方案2】:

    如果我做对了:

    想要的点p 是三个具有相同半径r 的超球体之间的交点,其中超球体的中心是您的点p0,p1,p2,而半径r 是所有可能解决方案中的最小值。在 n-D 中,任意点定义为 (x1,x2,x3,...xn)

    求解以下方程:

    |p-p0|=r
    |p-p1|=r
    |p-p2|=r
    

    其中p,r 是未知数,p0,p1,p2 是已知数。这导致3*n 方程和n+1 未知数。所以得到所有非零的r 解决方案并选择最小的。为了正确计算,从每个球体中选择一些非平凡的方程(0=r),形成n+1=方程和n+1未知数的系统并求解。

    [注释]

    为了简化处理,您可以将方程式设为以下形式:

    (p.xi-p0.xi)^2=r^2
    

    只有在找到解决方案后才使用sqrt(r^2)(忽略负半径)。

    还有另一种更简单的方法:

    您可以计算点p0,p1,p2 所在的平面,因此只需在该平面内找到这些点的u,v 坐标。然后在(u,v) 坐标上以2D 解决您的问题,然后将找到的解决方案形式(u,v) 转换回您的n-D 空间。

    n=(p1-p0)x(p2-p0); // x is cross product
    u=(p1-p0); u/=|u|;
    v=u x n; v/=|v|; // x is cross product
    

    如果我的记忆对我有用,那么转换 n-D -> u,v 是这样完成的:

    P0=(0,0);
    P1=(|p1-p0|,0);
    P2=(dot(p2-p0,u),dot(p2-p0,v));
    

    其中P0,P1,P2 是平面(u,v) 坐标系中的2D 点,对应于n-D 空间中的点p0,p1,p2

    转换回来是这样完成的:

    p=(P.u*u)+(P.v*v);
    

    【讨论】:

    • 哇。谢谢你。这很有帮助!我会努力实现的!
    猜你喜欢
    • 1970-01-01
    • 2014-02-13
    • 1970-01-01
    • 1970-01-01
    • 2014-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    相关资源
    最近更新 更多