2014-09-17 3 views
-1

У меня есть одномерный массив размером width * height, который содержит данные из двумерного массива по строкам, с началом координат в левом нижнем углу.Алгоритм для добавления значений в круговой границе в двумерном массиве

Я хочу классифицировать массив с помощью радиусов n, в границах которых я хочу добавить все значения массива.

Существует массив values[n+1]. значения [0], например, должны содержать сумму всех элементов массива, индексы которых находятся между (0|0) и радиусом 1. Координата радиуса 1 будет равна height/n * 1 по оси y и width/n * 1 по оси x.

Я не уверен, смогу ли я выразить то, что мне нужно.

Мой текущий (псевдо) код будет только добавлять значения в прямоугольные границы (желтый). Мне нужна сумма значений в пределах серой границы.

Спасибо за помощь!

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

+1

Если бы это было 2D-массив - знаете ли вы, как это сделать? или ваша проблема делает его круглым, даже в 2D-массиве? – amit

+0

@amit Я думаю, что у меня проблемы с круговым граничным условием. – tzippy

+0

Есть ли эллиптические кварталы или идеальные кварталы? – MBo

ответ

1

Вы можете оценить целую часть выражения

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

Это дает ряд фрагмента кольца (0 для центрального круга квартала, 1 для первого сегмента кольца и так далее)

Смежные вопросы