Я пытаюсь уменьшить аморфную форму в ряд кубоидов, чтобы затем назначить эти кубоиды как отдельные комнаты с различными функциями. Из-за необходимости платформы это кодируется в Java.
- Сначала доступный объем описывается как список позиций на расстоянии 1 метр друг от друга. По причинам, связанным с комедией c, этот список называется pendingLegos.
- Затем я проверяю каждую позицию в объеме на предмет наибольшего непрерывного кубоида, который может быть сгенерирован из него (север, восток и вверх) .
- Самый большой кубоид (или Le go, поскольку визуальное отображение комнат напоминает построение внутреннего пространства из кирпичей Le go), затем добавляется в мой список потенциальных номеров, и все содержащиеся в нем позиции удаляются из списка позиций объема. Это означает, что каждая последующая комната идентифицируется с помощью сокращающегося списка возможных позиций.
- L oop, пока максимально возможная комната не станет слишком маленькой для какой-либо значимой цели.
Подводя итог этот процесс:
while(pendingLegos isn't empty)
maxCube = null;
for-each(position : pendingLegos)
cube = new Cube(position);
while(can grow in X direction)
grow cube in X direction;
while(can grow in Y direction)
grow cube in Y direction;
while(can grow in Z direction)
grow cube in Z direction;
if(cube > maxCube || maxCube == null) maxCube = cube;
if(maxCube > minimum size)
add maxCube to rooms;
remove maxCube positions from pendingLegos;
else
empty pendingLegos
Этот метод очень хорошо работает, давая мне набор комнат, которые я могу использовать в любом данном внутреннем пространстве, но у него есть два fl aws. Менее значительным является то, что у него нет способа понять открытое пространство, которое в настоящее время я экспериментирую с методами начального расчета объема.
Самая значительная проблема заключается в том, что, хотя l oop становится легче на процессоре с каждой новой идентифицированной комнатой он всегда изначально очень тяжелый. Есть ли способ выполнить этот процесс, который является более рациональным и / или эффективным?