Я пытаюсь найти порядок обхода для трехмерного массива с равномерным размером n
. Порядок обхода должен сортироваться по возрастанию на расстоянии до центра куба (порядок ячеек с равными индексами произвольный).
Пример для 2d-массива:
7 4 8
3 0 1
6 2 5
В основном это расстояние в Показатель Манхэттена:
2 1 2
1 0 1
2 1 2
Обход в качестве относительных координат относительно начала координат:
[ 0, 0]
[ 1, 0]
[ 0,-1]
[-1, 0]
[ 0, 1]
[ 1,-1]
[-1,-1]
[-1, 1]
[ 1, 1]
Я знаю о некоторых способах решения этого вопроса, например, о предварительном вычислении всех индексов и их сортировке в соответствии с их расстоянием до начала координат. Однако, поскольку этот алгоритм предназначен для выполнения на графическом процессоре, существуют некоторые ограничения:
- Нет рекурсии (я знаю о возможности рекурсии в итеративный алгоритм - сохранение стека, однако, не является подходящее решение в моем опыте)
- Нет автономных вычислений (= расчет на CPU и передача результата на графический процессор). Решение должно быть таким же гибким, как и возможно
При поиске решений я наткнулся на этот вопрос, и это именно та проблема, которую я, как правило, решаю, принятый ответ, хотя и включает в себя древовидную структуру, которая не соответствует указанным требованиям: Трассировка 3D-массива в другом порядке
Я также подумал о способе создания индексов с использованием сферических координат, что, к сожалению, не дает правильного порядка. Каков подходящий алгоритм для генерирования заданного порядка обхода для 3d-массивов?
Изменить: Штормград предоставил отличное альтернативное описание для данной проблемы: "[Проблема] - это фактически преобразование адресации из одного пространства в другое. Преобразование между 1 (1,2), (1,2) (2,1)... но это больше похоже на преобразование с восходящего 1- (или, по крайней мере, квадрат) на" восходящее октаэдровое многослойное "пространство, когда" восходящий "означает" самый внутренний слой сначала "в дополнение к существующему (хотя и произвольному) порядку приращения на каждой поверхности слоя".