Страницы

Поиск по вопросам

пятница, 24 января 2020 г.

Поиск точек для многомерной сферы

#математика #алгоритм #php


Можно ли расширить данную задачу до N-мерного случая?

Даже так: является ли использование рекурсии и переменного числа аргументов здесь
оправданным?

что-то типа 

function get_dimension($point,$radius,$dimension_axis){
  for($i=floor($point[$dimension_axis]-$radius);$i<=ceil($point[$dimension_axis]+$r);$i++){
  if($dimension_axis>count($point)){
    //Операции с мегамерным массивом
  }else{
    get_dimension($point,$radius,++$dimension_axis);
  }
}

    


Ответы

Ответ 1



По идее, обобщить легко, и рекурсия (по количеству измерений) мне кажется подходящим инструментом. Я бы сделал как-то так (не тестировал и на псевдокоде, извините, не спец по php): process_points(int currdim, point currpoint, point center, double radius) { var r2 = radius * radius; var currpointR2 = 0; for (var dim = 0; dim < currdim - 1; dim++) currpointR2 += (currpoint[dim] - center[dim]) * (currpoint[dim] - center[dim]); var restR2 = r2 - currpointR2; if (restR2 < 0) return; var restR = sqrt(restR2); var min = floor(center[currdim] - restR); var max = ceil(center[currdim] + restR); for (var xx = min; xx <= max; xx++) { point newCurrPoint = currpoint; newCurrPoint[dim] = xx; if (currdim < totaldims - 1) process_points(currdim + 1, newCurrPoint, center, radius); else // last dim paint_point(newCurrPoint); } } process_points(0, center, center, r);

Комментариев нет:

Отправить комментарий