Мені потрібен метод розділити 3d-простір на фігури коробки, вирівняні по випадковій осі. На даний момент я ділю 2d простір для цілей тестування. Найбільш безпосереднім підходом я був визначити прямокутник розміром (1, 1), а потім рекурсивно розділити всі існуючі прямокутники на два нерівні прямокутники, що чергуються між віссю X та Y.
Проблема тут очевидна. Такий підхід призводить до довгих розтягуючих ліній (позначених червоним кольором)
Мені б хотілося щось більш органічно виглядати (я включив приклад)
Дивіться, немає довгих прямих ліній зверху вниз або зліва направо.
Єдине обмеження полягає в тому, що я, можливо, бажаю обмежити мінімальний розмір прямокутника, не впливаючи на деталізацію розмірів. наприклад, якщо найменша пряма частина - 1 квадратний сантиметр, ніж секунда найменша кімната не повинна бути 2 квадратних одиниць.
Тому в ідеалі алгоритм повинен відповідати всім трьом наступним обмеженням:
- Прямокутники нескінченно мало.
- Прямі розміри не є дискретним множенням найменшого розміру прямої кишки. наприклад, якщо найменша пряма частина - 3 квадратні одиниці, то більші прямої прямоти не обмежуватимуться 6, 9, 12 і т. п. квадратних одиниць, а натомість для цього може бути 3,2 або 4,7).
- Алгоритм працює в поліноміальний час (потрібно швидко обчислити).