计算等距点与N维空间中3个点的最小距离

时间:2014-09-12 00:14:08

标签: geometry computational-geometry

我正在尝试以任意维度对Ritter's bounding sphere algorithm进行编码,而我仍然坚持创建一个球体,它在其边缘有3个给定点,或者换句话说,就是一个球体。由N维空间中的3个点定义。

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

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

(我也很欣赏有关ND中最小边界球计算的任何其他建议,以防我走向错误的方向。)

2 个答案:

答案 0 :(得分:2)

所以,如果我做对了:

通缉点p是同一半径r的3个超球体之间的交点,其中超球体的中心是您的点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空间。

plane u,v coordinates

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 2D 点在与(u,v)空间中的点p0,p1,p2对应的平面的n-D坐标系中。

转换回来就像这样:

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

答案 1 :(得分:1)

My Bounding Sphere算法仅计算3维的近似最佳球体。

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

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

Jack Ritter jack@houseofwords.com