3.9 Самый общий подход к изображению невидимых линий.
Наиболее общий подход при решении проблемы
сокрытия невидимых линий мы только наметим. Мало шансов, что кому-то
удастся реализовать его на "Спектруме" в коммерческой программе, разве
что только в виде эксперимента. Но, как известно, мир персональных
компьютеров "Спектрумом" открывается, но не заканчивается и знать
принципы общего подхода достаточно полезно.
IW7
Этот подход состоит в том, что каждая грань
нашего тела разбивается на воображаемые треугольники (это принцип
декомпо зиции), после чего для каждой стороны каждой грани решается вопрос о том, как она расположена относительно каждого иэ таких треугольников. При этом применяется принцип пирамиды.
Предположим, что из какой-то k-ой грани мы
взяли треугольник АБС и теперь решаем вопрос, как он расположен
относительно j-ой стороны какой-то m-ой грани. Пусть это будет отрезок
KL. Теперь построим бесконечную пирамиду, вершина которой находится в
точке О, иэ которой производится наблюдение, а ребра которой проходят
через вершины нашего треугольника (OA, OB и ОС) - см. рис. 53.
Рис. 53 Принцип пирамиды
Вопрос видимости отрезка KL, таким образом,
сводится к тому, чтобы определить его положение относительно пирамиды
ОАВС. И здесь возможны следующие случаи:
1- KL не проходит через пирамиду, значит для данного треугольника этот отрезок видим.
2. KL полностью лежит внутри пирамиды за треугольником (невидим);
3. KL полностью лежит внутри пирамиды перед треугольником (видим).
4. KL пересекает пирамиду перед треугольником (видим).
5. KL пересекает пирамиду за треугольником
(видим, но частично). Зная координаты всех точек А,В,С,К,L,О несложно
рассчитать, какая часть отрезка KL видима, а какая нет.
6. KL пересекает и пирамиду и треугольник (видим частично) .
Остается только выяснить, какой же случай из
шести возможных произошел у нас. Это делается с помощью серии иэ
нескольких тестов. Они проводятся с помощью математического аппарата иэ
аналитической геометрии. Тесты эти стандартные, все исходные данные для
них в программе уже есть (это координаты вершин тела) и потому
оперативную память они почти не расходуют, но каковы затраты времени.
Вы можете догадаться. В принципе, считают, что зависимость здесь
квадратичная, т.е. если количество ребер в Вашем объекте увеличить в
два раза, то скорость работы уменьшится в четыре раза. Конечно,
существуют разнообразные приемы для повышения производительности, но
это уже ухищрения программистов, свои для каждого конкретного случая.