В противном случае ищутся такие ребра, для которых значения в концах будут разных знаков. Эти ребра пересекаются плоскостью к и соответствующие точки пересечения задают разбиение множества исходных вершин на множество вершин, лежащих в положительном полупространстве, и множество вершин, лежащих в отрицательном полупространстве, при этом сами точки разбиения войдут в оба этих множества.

Рассмотрим очередное ребро многоугольника (рис. 6.2).

2

Рис. 6.2

Основные классы для рендерера. Работа с ресурсами

По отношению к плоскости тс может быть четыре различных случая (рис. 6.3).

Тогда в случае а ребро целиком попадает в результирующий многоугольник, т. е. точка у,Ч1 добавляется к списку вершин усеченного многоугольника.

Рис. 6.3

Тогда в случае а ребро целиком попадает в результирующий многоугольник, т. е. точка у,Ч1 добавляется к списку вершин усеченного многоугольника.

В случае б ребро пересекает плоскость лив усеченный многоугольник попадает только часть ребра от точки V, до точки у', и поэтому к списку вершин добавляется точка пересечения \>'.

В случае в весь отрезок отсекается и в список вершин не попадает ни одной вершины из этого отрезка.

В случае г в список добавляется как точка пересечения V , так и точка .

Отрезок, соединяющий вершины v, и vlti, можно записать в параметрическом виде как

v = tv,+(l-0v1+I, (6.1)

где параметр t принимает значения от 0 до 1.

Тогда для определения точки пересечения этого отрезка с плоскостью тс достаточно подставить уравнение (6.1) в уравнение плоскости и найти из него значение параметра.

/=f^4- (6.2)

В результате этого определяются все вершины, задающие часть многоугольника, лежащую в положительном полупространстве. Аналогичным образом строится и часть многоугольника, лежащая в отрицательном полупространстве.

Еще одним методом является определение принадлежности точки. Данная операция осуществляется методом contains и достаточно подробно описана ранее.

Еще одним знакомым методом является определение пересечения многоугольника с заданным лучом. Это делается методом intersectByRay и также происходит аналогично описанному в гл. 3.


⇐ Предыдущая| |Следующая ⇒