Нахождение самого большого кубоида в объеме, но дешево - PullRequest
1 голос
/ 02 марта 2020

Я пытаюсь уменьшить аморфную форму в ряд кубоидов, чтобы затем назначить эти кубоиды как отдельные комнаты с различными функциями. Из-за необходимости платформы это кодируется в Java.

  1. Сначала доступный объем описывается как список позиций на расстоянии 1 метр друг от друга. По причинам, связанным с комедией c, этот список называется pendingLegos.
  2. Затем я проверяю каждую позицию в объеме на предмет наибольшего непрерывного кубоида, который может быть сгенерирован из него (север, восток и вверх) .
  3. Самый большой кубоид (или Le go, поскольку визуальное отображение комнат напоминает построение внутреннего пространства из кирпичей Le go), затем добавляется в мой список потенциальных номеров, и все содержащиеся в нем позиции удаляются из списка позиций объема. Это означает, что каждая последующая комната идентифицируется с помощью сокращающегося списка возможных позиций.
  4. 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 становится легче на процессоре с каждой новой идентифицированной комнатой он всегда изначально очень тяжелый. Есть ли способ выполнить этот процесс, который является более рациональным и / или эффективным?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...