При преобразовании 3D-модели в набор точек вы выбросили информацию, необходимую для поиска форм пересечения.Пройдите по графу связности ребер-граней вашей 3D-модели, чтобы найти точки пересечения ребер-плоскостей по порядку.
Предполагая, что у вас есть или можно построить топографию 3d-модели (некоторое количество вершин, ребра между вершинами,грани, ограниченные ребрами):
- Перебирайте список ребер, пока не найдете тот, который пересекает тестовую плоскость, добавьте его в список
- Выберите одну из граней, имеющих этот ребро
- Выполните итерации по другим краям этой грани, чтобы найти следующее пересечение, добавьте его в список
- Повторите для другой грани, которая разделяет эту грань, пока вы не вернетесь к начальной кромке
Вы создали упорядоченный список ребер, которые пересекают плоскость - тривиально линейно интерполировать каждое ребро, чтобы найти точки пересечения по порядку, которые формируют форму пересечения.Обратите внимание, что этот процесс предполагает, что полигоны граней являются выпуклыми, что в вашем случае они.Если ваш объем вогнутый, у вас будет несколько дискретных форм пересечений, и поэтому вам нужно повторять этот процесс, пока все ребра не будут проверены.
Есть некоторый Java-код, который делает это здесь ,и довольно изящное тестовое приложение здесь .
Управление:
- 1-5 для изменения тестового объема
- q и w для измененияколичество плоскостей запросов
- a, s и d для изменения скорости сканирования плоскостей запросов
- перетащите левой кнопкой мыши, чтобы повернуть представление
- щелкните правой кнопкой мыши-drag для поворота плоскостей запроса