【问题标题】:Finding the number of integer points inside a sphere of radius R and dimension D centered at the Origin [duplicate]查找以原点为中心的半径为 R 且尺寸为 D 的球体内的整数点数
【发布时间】:2016-09-21 12:07:36
【问题描述】:

我正在编写一个计算机程序/算法来计算以原点为中心的半径为 R 和维度 D 的球体内的整数点数。本质上,如果我们有一个维度为 2(圆)和半径为 5 的球体,我正在确定不等式 X^2+Y^2 ≤ 25 的所有整数解。而不是计算每个可能的整数点,有没有一种有效的方法数点数?使用对称性?

【问题讨论】:

  • @Sean Cline:这个问题是关于计算球体内的所有个整数点,大致等于它的体积。我应该认为这更多的是(离散)数学问题。如果有一个聪明的分析 (O(1)) 公式,我不会感到惊讶。
  • 为什么您需要与现有问题类似的新问题?如果需要,可以编辑旧问题,添加新想法和标签。

标签: c++ algorithm geometry computational-geometry number-theory


【解决方案1】:

假设维度是3,R是半径。对于 z = 0,可能的 x,y 坐标是半径为 R 的圆内的点,而对于任何 z,x,y 的坐标是半径为 sqrt(R * R - z * z) 的圆内的点; z 的可能值为 -r, .. 0, 1, .. r,其中 r 是小于 R 的最小整数。注意 z 和 -z 的计数相同。

当我们降到维度 1 时,我们在问我满足多少个整数 |i|

所以:

int ncip( int dim, double R)
{   
    int i;
    int r = (int)floor( R);
    if ( dim == 1)
    {   return 1 + 2*r; 
    }
    int n = ncip( dim-1, R); // last coord 0
    for( i=1; i<=r; ++i)
    {   n += 2*ncip( dim-1, sqrt( R*R - i*i)); // last coord +- i
    }
    return n;
}

【讨论】:

    【解决方案2】:

    好吧,使用对称性,您总是可以只计算正侧的所有整数解,然后反转分量。因此,如果是您的 Circle (D=2, R=5),您只需找到
    { X,Y ∈ N: X²+Y² ≤ R }。然后创建组合 (X,Y)、(X,-Y)、(-X,Y)、(-X,-Y)
    这样您就只有 (1/2)D 个解决方案可以找到。

    此外,您可以将半径为 R 的圆近似为半径为 R/√2 的正方形,因此可以自动添加小于或等于该值的所有整数组合。

    【讨论】:

      猜你喜欢
      • 2016-09-21
      • 1970-01-01
      • 2014-07-30
      • 2020-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-24
      • 2014-12-10
      相关资源
      最近更新 更多