У меня очень большой массив с размерами (nr, nc) строк и столбцов. Я перебираю этот массив, чтобы вычислить функцию fun из постоянной записи этого массива (px, py). Расчет для этой функции важен только в постоянной области (расстояние d) вокруг этой точки. Поэтому моя цель - ускорить код и вычислять только в этом круге вокруг точки (px, py).
int i;
int j;
for(i=0; i<nr; i++){
for(j=0; j<nc; j++){
*(arr_stg+i*nc+j) = fun(i,j,px,py);
}
}
У меня также есть функция для вычисления логической «маски» (я незнать, если это правильное слово для этого). Я рассчитываю это с евклидовым расстоянием вокруг точки выборки. Таким образом, для данного расстояния, т. Е. 4, я вычисляю этот тип массива-маски:
0 0 0 0 1 0 0 0 0
0 0 0 1 1 1 0 0 0
0 0 1 1 1 1 1 0 0
0 1 1 1 1 1 1 1 0
1 1 1 1 1 1 1 1 1
0 1 1 1 1 1 1 1 0
0 0 1 1 1 1 1 0 0
0 0 0 1 1 1 0 0 0
0 0 0 0 1 0 0 0 0
Точная форма (если это ноль или единица) здесь не имеет значения, должна работать для любого видаэто nxn- "маски".
Мой вопрос: как мне изменить два цикла for, чтобы перебирать только эту маску вокруг заданной точки таким образом, чтобы я получал более быстрый код, а затем просто вычислял егодля всех i, j большого массива и не используйте те, которые находятся на расстоянии больше указанного.