Страницы

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

суббота, 16 марта 2019 г.

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

Можно ли расширить данную задачу до 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); } }


Ответ

По идее, обобщить легко, и рекурсия (по количеству измерений) мне кажется подходящим инструментом. Я бы сделал как-то так (не тестировал и на псевдокоде, извините, не спец по 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);

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

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