我有一个大小为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++;
}
答案 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的切片。