在二维数组内的圆形边界中添加值的算法

时间:2014-09-17 16:08:13

标签: c algorithm

我有一个大小为width * height的一维数组,它包含逐行的二维数组数据,坐标原点位于左下角。

我想用n半径对数组进行分类,在其边界内我想要将所有数组值相加。

存在数组values[n+1]。例如,values [0]应包含索引位于(0|0)和半径1之间的所有数组元素的总和。 半径为1的coordninate在y轴上为height/n * 1,在x轴上为width/n * 1

我不确定我是否可以表达我的需要。

我当前的(伪)代码只会在矩形边界(黄色)中加起来。我需要的是灰色边界内的值的总和。

感谢您的帮助!

    int n = 5;
    int[] array[width*height];
    int[] values[n+1];
    int* p = array[0];
    int i = 0;
    int bandwith = width /(n+1);
for(int i= 0; i< n; i ++)
{ 
   for (int nRow = 0; nRow < height; ++nRow){
            for (int nColumn = 0, nOff = 0; nColumn < width; ++nColumn){

                if(nColumn < (i+1)*bandwidth && nColumn > i*bandwidth
                && nRow < (i+1)*bandwidth && nRow > i*bandwidth)
                 {
                  values[i] += p[nOff++];
                 }
            }
            p += width;
    }
    i++;
}

enter image description here

2 个答案:

答案 0 :(得分:1)

您可以评估表达式的整数部分

v = sqrt(y*y+x*x) / bandwidth

这会给你一些环形片段(中心圆四分之一为0,第一个环段为1,依此类推)

答案 1 :(得分:0)

由于圆周周围的距离是2 *π* r,如果将圆分成n个相等的部分,则将有n个弧长度为http://www.algebra.com/algebra/homework/Circles.faq.question.336647.html的切片。