在具有n维的受限空间中,如何找到p点的坐标,以使它们尽可能彼此相距?

时间:2017-11-30 08:05:32

标签: algorithm

例如,在2D空间中,x [0; 1]和y [0; 1]。对于p = 4,直观地说,我将每个点放在正方形的每个角落。

但是一般的算法是什么?

2 个答案:

答案 0 :(得分:0)

编辑:如果尺寸与彼此不正交,则需要修改算法

要按照示例中的描述统一放置点,您可以执行以下操作:

var combinedSize = 0

for each dimension d in d0..dn {
    combinedSize  += d.length;
}

val listOfDistancesBetweenPointsAlongEachDimension = new List

for each d dimension d0..dn {
    val percentageOfWholeDimensionSize = d.length/combinedSize
    val pointsToPlaceAlongThisDimension = percentageOfWholeDimensionSize * numberOfPoints
    listOfDistancesBetweenPointsAlongEachDimension[d.index] = d.length/(pointsToPlaceAlongThisDimension - 1)
}   

运行你的例子,它给出了:

combinedSize = 2

percentageOfWholeDimensionSize = 1/2

pointsToPlaceAlongThisDimension = 0.5 * 4

listOfDistancesBetweenPointsAlongEachDimension [0] = 1 /(2 - 1) listOfDistancesBetweenPointsAlongEachDimension [1] = 1 /(2 - 1)

注意:减号1处理包含间隔,允许维度

的两个端点处的点

答案 1 :(得分:0)

  1. 2D案例

    2D n=2)中,解决方案是将p点均匀地放在某个圆圈上。如果您还想定义点之间的距离d,则圆圈的半径应为:

    2*Pi*r = ~p*d
    r = ~(p*d)/(2*Pi)
    

    更准确地说,你应该使用常规p点多边形的圆周而不是圆周(我太懒了)。或者,您可以根据需要计算生成点的距离和放大/缩小。

    因此每个点p(i)可以定义为:

    p(i).x = r*cos((i*2.0*Pi)/p)
    p(i).y = r*sin((i*2.0*Pi)/p)
    
  2. 3D案例

    只需使用球体而不是圆圈。

  3. ND案例

    使用 ND 超球面而不是圆圈。

  4. 所以你的问题归结为p"等距离"指向n-D超球面(表面或体积)。正如您所看到的2D案例很简单,但在3D中这开始成为一个问题。参见:

    正如你所看到的,有很多方法可以做到这一点(甚至有更多的方法甚至使用Fibonacci序列生成的螺旋),或多或少难以掌握或实现。

    但是,如果要将其概括为 ND 空间,则需要选择一般方法。我会尝试这样做:

    1. p均匀分布的地方置于界限超大球内

      每个点应具有位置,速度和加速度矢量。您也可以随机放置点数(只确保没有位于同一位置)......

    2. 对于每个p计算加速

      每个p都应缩回任何其他点(与重力相反)。

    3. 更新位置

      在ND中进行Newton D' Alembert物理模拟。不要忘记包括一些阻尼速度,以便模拟将及时停止。将位置和速度限制在球体上,这样点就不会越过它的边界,也不会向内反射速度。

    4. 循环#2,直到任何p的最高速度超过某个阈值

    5. 这或多或少会准确地将p点放在 ND 超球面的圆周上。因此,它们之间的距离d最小。如果你在np之间有一些特殊的依赖关系,那么可能会有更好的配置,但对于任意数字,我认为这种方法应该足够安全。

      现在,通过修改#2 规则,您可以实现2种不同的结果。一个填充超球面(通过将大量负质量放入表面中心)并填充其体积。对于这两个选项,半径也会不同。对于一个你需要使用表面和其他卷......

      此处用于解决几何问题的类似模拟示例:

      此处预览3D表面案例:

      simulation

      顶部的数字是用于确定模拟停止的粒子的最大abs速度,而白色线是速度矢量。您需要仔细选择加速度和阻尼系数,以便模拟速度快......