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

Geometry 在N维空间中以与3个点的最小距离计算等距点,geometry,computational-geometry,Geometry,Computational Geometry,我试着在任意维度上编码,我被困在创建一个球体的部分,这个球体的边缘有3个给定的点,或者换句话说,一个球体由N维空间中的3个点定义 该球体的中心将是距离(定义)3点的最小等距点 我知道如何在2-D(由3个点定义的三角形的外心)中求解,我也看过一些3D的矢量计算,但我不知道N-D的最佳方法是什么,甚至不知道这是否可能 (我也很感激关于ND中最小边界球计算的任何其他建议,以防我走错方向。)如果我做对了: 想要的点p是相同半径的3个超球体之间的交点r,其中超球体的中心是您的点p0、p1、p2,半径r是所

我试着在任意维度上编码,我被困在创建一个球体的部分,这个球体的边缘有3个给定的点,或者换句话说,一个球体由N维空间中的3个点定义

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

我知道如何在2-D(由3个点定义的三角形的外心)中求解,我也看过一些3D的矢量计算,但我不知道N-D的最佳方法是什么,甚至不知道这是否可能

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

如果我做对了:

想要的点
p
是相同半径的3个超球体之间的交点
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
未知数的系统,并对其进行求解

[notes]

为了简化处理,您可以使用以下形式的方程式:

(p.xi-p0.xi)^2=r^2
只有在找到解后才使用
sqrt(r^2)
(忽略负半径)

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

|p-p0|=r
|p-p1|=r
|p-p2|=r
您可以计算点
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));
p=(P.u*u)+(P.v*v);
其中,
P0,P1,P2
n-D
空间中与点
P0,P1,P2
相对应的平面坐标系中的2D

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
转换回的操作如下所示:

P0=(0,0);
P1=(|p1-p0|,0);
P2=(dot(p2-p0,u),dot(p2-p0,v));
p=(P.u*u)+(P.v*v);

我的边界球算法只计算一个近似最优的三维球体

Fischer有一个精确的最小边界超球体(N维)。参见他的论文:

他的(C++/Java)代码:

杰克·里特
jack@houseofwords.com

这似乎更像是一个数学问题,而不是一个编码/编程问题。这可能更好,因为链接没有提到由三个点给出的球体,而是一个包含球体和一个位于后者外部的点的球体。新球体的中心沿着旧中心和球体上的外部点、点的中点和反点之间的直线。问题的标题与内容不同。我认为你需要找到一个等距点,它也使距离最小化。试着编辑问题,以便更清楚地说出你真正想做的事情。@george你是对的。抱歉。@YvesDaoust你有证据证明那是最小的边界球中心吗?哇。非常感谢。这很有帮助!我会努力实现它!