Один из устойчивых методов, решающих обе эти проблемы, был разработан Мартином Ньюэллом (Martin Newell). Этот метод вычисляет компоненты тх, ту, тг нормального вектора m по следующим формулам:

N-\

тх=И \У1 ~ Лех,(,) ) ( Zi + Z„ex,(/) ) > /=0

1=0

т«=Ё(*'-*о«(о)(и+Я«1(о)'

(=0

где N- число вершин грани, (xt, у{, z) - координаты г'-й вершины, next(y) = (j + l)modAT- индекс «следующей» после у-й вершины при обходе грани. Эта формула обеспечивает «круговой» переход от (N- 1)-й вершины к нулевой. При таком алгоритме для каждого ребра требуется только одно умножение на каждый компонент нормали, причем не нужно никакой проверки на коллинеарность. Этот результат выводится в тематическом задании 6.2 и там же приведен его код на С++. Вектор т, вычисленный ио методу Ньюэлла, может быть направлен внутрь полигона или наружу от него. Кроме того, в этом тематическом задании доказывается, что если вершины полигона обходятся (с ростом г) против часовой стрелки при взгляде на полигон снаружи, то вектор m указывает направление наружу от этой грани.

Глава 6. Моделирование поверхностей полигональными сетками Пример 6.2.2

Дан полигон с вершинами Р0 = (6,1,4), Рг - (7, 0,9) и Р2 = (1, 1, 2). Найдите нормаль к этому полигону по методу Ньюэлла. Решение Прямое использование векторного произведения дает следующее:

((7,0,9) - (6,1,4)) х ((1,1,2) - (6,1,4)) = (2, -23, -5).

Применение метода Ньюэлла дает тот же самый результат: (2, -23, -5).

Практические упражнения

6.2.1. Использование метода Ньюэлла Для трех вершин (6, 1, 4), (2, 0, 5) и (7, 0, 9) сравните нормаль, полученную по методу Ньюэлла, и ту, которая получается с помощью обычного векторного произведения. Затем с помощью метода Ньюэлла найдите (пх, пуУ пг) для полигона с вершинами (1,1,2), (2,0,5), (5,1,4) и (6,0,7). Является ли этот полигон плоским? Если да, то найдите его истинную нормаль, используя векторное произведение, и сравните эту истинную нормаль с результатом метода Ньюэлла.

6.2.2. Случай неплоского полигона


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