Алгоритм Робертса
Наиболее известные алгоритмы
Алгоритм является исторически первым. Он требует, чтобы грани были выпуклыми многоугольниками. Алгоритм переборного типа, работает с ребрами, т.е. больше подходит для каркасных изображений. Ребра, смыкающие 2 невидимые грани, не рассматриваются, т.к. они заведомо невидимы. Каждое оставшееся ребро каждого объекта анализируется на взаимоположение со всеми гранями каждого объекта. Возможны случаи:
· грань не закрывает ребро;
· грань полностью или частично закрывает ребро;
· грань и ребро пересекаются.
Первый случай наблюдается в 2 вариантах:
· ребро находится в том же полупространстве относительно грани, что и наблюдатель - рис а);
· ребро полностью расположено в полупространстве, не содержащем наблюдателя, но проекции грани и ребра не пересекаются и проекция ребра не содержится в проекции грани ( не лежит внутри) - рис. б).
![]() | |||||||||
![]() | |||||||||
![]() | ![]() | ![]() | |||||||
а) б) в) г) д)
Во втором случае ребро полностью расположено в полупространстве, не содержащем наблюдателя. Проекция ребра полностью лежит внутри проекции грани - рис. в, г). Если ребро полностью закрыто, оно исключается из дальнейшего рассмотрения. Для частично закрытых ребер производится разбиение, получаем 2 видимых подребра, которые включаются в список для дальнейшего рассмотрения.
В третьем случае ребро пересекается с плоскостью, содержащей грань - рис. д). Аналогично второму случаю ребро разбивается на части, из которых видимы не более 2, далее рассматриваем только видимые подребра. Разбиение делается на 2 части по точке пересечения, рассматриваем отдельно обе части, т.е. сводим к предыдущим случаям.
Если плоскость, несущая грань, и ребро пересекаются, ребро разбивается на две части по точке пересечения, каждая часть ребра рассматривается отдельно.
Временные затраты алгоритма пропорциональны квадрату числа граней всех объектов.