Точка в тесте многогранника в линейном времени - PullRequest
1 голос
/ 09 октября 2011

Предположим, у нас есть трехмерный многогранник, который имеет N вершин.Как проверить, находится ли точка во времени O (n).Предполагается, что это линейный алгоритм, но мои поиски оказались безуспешными.

Ответы [ 2 ]

1 голос
/ 23 сентября 2013

Если у вас есть N точек, определяющих выпуклый многогранник (трехмерная версия многоугольника), это означает, что результирующая фигура топологически эквивалентна сфере.

Это несложно доказать, если вы посмотрите несколькоТеоремы о топологии.По сути, отсутствие дырок помещает ваш многогранник в тот же «род» геометрического объекта, что и сфера, поскольку ни у одного нет внутренних дырок.Затем вы просто сдвигаете каждую точку вершины - набор из N растяжений - на некоторое фиксированное расстояние R от заданной внутренней точки.Поскольку все эти точки теперь лежат на поверхности сферы, и вы использовали только топологически допустимые операции «растяжения» (растяжение ограничивающих граней путем перемещения их вершин), ваш выпуклый многогранник топологически эквивалентен сфере.Я опускаю формальные термины, так как они не добавляют ничего сверх путаницы.

Как только вы добавляете любые исключенные внутренние дыры в области - вы больше не эквивалентны сфере.В этой ситуации вы, вероятно, можете использовать расширенную версию того же самого.Вы проверяете, находитесь ли вы внутри «ограничивающей поверхности» многогранника, затем проверяете, находитесь ли вы внутри какого-либо из его отверстий (это тоже многогранники).Вам понадобятся дополнительные флаги или термины для обработки отверстий внутри отверстий, которые являются частью внешнего многогранника и т. Д.

0 голосов
/ 24 ноября 2011

Решение таково: поскольку многогранник топологически эквивалентен сфере, число его граней (и ребер) равно O (n) (поскольку оно эквивалентно плоскому графу, ... - требуется короткое доказательство).А простая итерация по всем граням и приведение лучей, аналогичное тестированию точки в полигоне в 2D, фактически будут выполняться в O (n), поскольку есть только O (n) граней.

...