Text
                    Е. А. Никулин
КОМПЬЮТЕРНАЯ ГЕОМЕТРИЯ
И АЛГОРИТМЫ
МАШИННОЙ ГРАФИКИ
Геометрические основы компьютерной графики
Аффинные и проективные преобразования
Математические модели поверхностей и объектов
Геометрические задачи визуализации
УЧЕБНОЕ ПОСОБИЕ

Е. А. Никулин КОМПЬЮТЕРНАЯ ГЕОМЕТРИЯ И АЛГОРИТМЫ МАШИННОЙ ГРАФИКИ Санкт-Петербург «БХВ-Петербург» 2003
Никулин Е. А. Компьютерная геометрия и алгоритмы машинной графики. — СПб.: БХВ-Петербург, 2003. — 560 с.: ил. В книге приведено максимально полное изложение геометрических и алгоритмических основ современной компьютерной графики: математи- ческие модели графических элементов на плоскости и в пространстве, фун- даментальные законы геометрической оптики и основанные на них алго- ритмы построения оптических эффектов, методы геометрических преобра- зований, анализа и синтеза моделей линий, поверхностей и объектов, геометрические задачи визуализации — комплекс алгоритмов 2d- и 3d- отсечения и удаления. Материал сопровождается большим числом иллюст- раций, блок-схем алгоритмов и примеров их реализации. Для студентов вузов и специалистов, изучающих компьютерную графику и занимающихся разработкой новых алгоритмов и прикладных графических программ Группа подготовки издания: Главный редактор Зав. редакцией Редактор Компьютерная верстка Корректор Дизайн обложки Зав. производством Екатерина Кондукова Григорий Добин Нина Седых Натальи Смирновой Наталия Першакова Игоря Цырульникова Николай Тверских Рецензент: кафедра вычислительной техники Нижегородского государственного техни- ческого университета (зав. кафедрой член-корреспондент РАН, профессор В. В. Кондратьев)
Содержание Введение................................................................1 Основные обозначения и соотношения......................................5 Глава 1. Геометрические основы компьютерной графики.....................9 1.1. Графические элементы на плоскости................................12 1.1.1. Модели прямой линии на плоскости............................13 1.1.1.1. Неявное уравнение прямой................................13 1.1.1.2. Нормальное уравнение прямой..............................15 1.1.1.3. Параметрическая функция прямой..........................16 1.1.1.4. Уравнения прямой, проходящей через две точки............17 1.1.1.5. Уравнения прямой в отрезках.............................18 1.1.2. Взаимное положение графических элементов на плоскости.......18 1.1.2.1. Коллинеарность точек.....................................18 1.1.2.2. Взаимное расположение прямых............................19 1.1.2.3. Взаимное расположение точки и прямой.....................19 1.1.2.4. Построение прямой, наименее удаленной от совокупности точек.............................................21 1.1.2.5. Пересечение двух прямых..................................24 1.1.2.6. Уравнения пучка прямых и биссектриса угла...............25 1.1.2.7. Тесты свойств графических элементов на плоскости........27 1.1.2.8. Тесты ориентации точки относительно полигона............32 1.1.2.9. Алгоритмы пересечения на плоскости......................42 1.1.2.10. Площадь и геометрический центр полигона................48 1.1.2.11. Алгоритмы генерирования случайных полигонов............51 1.1.3. Квадратичные и параметрические кривые.......................54 1.2. Графические элементы в пространстве.............................60 1.2.1. Модели плоскости в пространстве.............................62 1.2.1.1. Неявное уравнение плоскости.............................62 1.2.1.2. Нормальное уравнение плоскости..........................63 1.2.1.3. Параметрическая функция плоскости.......................64 1.2.1.4. Уравнения плоскости, проходящей через три точки.........66 1.2.1.5. Уравнения плоскости в отрезках..........................66 1.2.1.6. Модели линии в пространстве.............................67 1.2.2. Взаимное положение графических элементов в пространстве.....69 1.2.2.1. Коллинеарность точек....................................69 1.2.2.2. Компланарность точек....................................69
IV Содержание 1.2.2.3. Точка и прямая............................................70 1.2.2.4. Точка и плоскость.........................................70 1.2.2.5. Построение плоскости, наименее удаленной от совокупности точек..............................................71 1.2.2.6. Взаимное расположение двух прямых.........................73 1.2.2.7. Взаимное расположение прямой и плоскости..................74 1.2.2.8. Две плоскости.............................................75 1.2.2.9. Пучок плоскостей и биссекторная плоскость.................76 1.2.2.10. Пересечение плоскостей...................................77 1.2.2.11. Модель полиэдра..........................................77 1.2.2.12. Тесты свойств графических элементов в пространстве.......80 1.2.2.13. Тесты ориентации точки относительно полиэдра.............83 1.2.2.14. Алгоритмы пересечения в пространстве.....................85 1.2.3. Квадратичные и параметрические поверхности....................89 1.3. Основные задачи геометрической оптики.............................99 1.3.1. Пересечение луча с поверхностью..............................100 1.3.2. Отражение луча от поверхности................................106 1.3.3. Преломление луча на поверхности..............................107 1.3.4. Прямая и обратная трассировка лучей...........................110 1.3.5. Лучевые методы построения оптических эффектов.................112 1.3.5.1. Тень.....................................................116 1.3.5.2. Отражение................................................121 1.3.5.3. Преломление..............................................128 Глава 2. Геометрические преобразования..................................139 2.1. Аффинные преобразования..........................................140 2.1.1. Основные понятия и соотношения...............................140 2.1.2. Элементарные аффинные преобразования.........................144 2.1.2.1. Перенос..................................................144 2.1.2.2. Масштабирование..........................................144 2.1.2.3. Сдвиг....................................................145 2.1.2.4. Вращение.................................................148 2.1.2.5. Табличный расчет тригонометрических функций..............149 2.1.3. Сложные аффинные преобразования..............................154 2.1.3.1. Методы расчета матрицы сложного преобразования...........155 2.1.3.2. Кинематический метод построения объектов.................170 2.1.3.3. Кинематическая задача перемещения в пространстве.........182 2.2. Проективные преобразования.......................................194 2.2.1. Ортографические проекции.....................................196 2.2.2. Аксонометрические проекции...................................197 2.2.3. Косоугольные проекции........................................207 2.2.4. Центральные (перспективные) проекции.........................211 2.2.5. Проективные алгоритмы сложных преобразований.................221 2.2.5.1. Проецирование пространственных линий на плоскость........223 2.2.5.2. Стереографические проекции...............................228
Содержание V 2.2.5.3. Картографические проекции..............................231 2.2.5.4. Построение сцены с подвижным наблюдателем.............242 2.2.5.5. Проективные алгоритмы построения оптических эффектов...247 Глава 3. Математические модели поверхностей и объектов...............261 3.1. Методы моделирования поверхностей.............................261 3.1.1. Методы изображения поверхностей...........................262 3.1.1.1. Выбор проекции изображения............................263 3.1.1.2. Каркасные поверхности.................................264 3.1.1.3. Точечные поверхности..................................268 3.1.1.4. Модели освещенности и закрашивание поверхностей.......271 3.1.2. Кинематические поверхности................................278 3.1.2.1. Поверхности вращения, переноса и комбинированные......282 3.1.2.2. Линейчатые поверхности и их развертки..................289 3.1.2.3. Нелинейчатые поверхности..............................307 3.1.3. Кусочно-определенные поверхности..........................324 3.1.4. Сплайны...................................................329 3.1.4.1. Сплайновые кривые.....................................330 3.1.4.2. Сплайновые поверхности................................339 3.1.5. Фрактальные множества.....................................347 3.1.5.1. Фрактал Мандельброта и алгоритмические фракталы.......348 3.1.5.2. Геометрические фракталы...............................353 3.1.5.3. Свойства фракталов....................................370 3.1.6. Графические поверхности...................................376 3.2. Модели объектов в пространстве................................379 3.2.1. Каркасные модели. Платоновы тела..........................381 3.2.2. Граничные модели..........................................393 3.2.3. Сплошные модели...........................................395 Глава 4. Геометрические задачи визуализации..........................405 4.1. Логические операции со списками...............................405 4.1.1. Объединение списков отрезков............................408 4.1.2. Пересечение списков отрезков............................411 4.1.3. Исключение списков отрезков.............................413 4.2. Методы отсечения..............................................416 4.2.1. Регулярное плоское отсечение отрезка......................420 4.2.2. Произвольное плоское отсечение отрезка....................423 4.2.3. Произвольное плоское отсечение полигона...................429 4.2.4. Объемное отсечение отрезка................................432 4.2.5. Объемное отсечение полигона и полиэдра....................434 4.2.6. Логическое конструирование ЗФобъектов.....................442 4.2.7. Дополнительные задачи отсечения на плоскости..............448 4.2.7.1. Отсечение выпуклого полигона полуплоскостью...........448 4.2.7.2. Расчет ядра произвольного полигона....................452 4.2.7.3. Пересечение выпуклых полигонов........................453
VI Содержание 4.2.1.4. Отсечение проекции выпуклого полигона..................454 4.2.7.5. Выпуклая полигональная оболочка массива точек..........461 4.2.7.6. Полигонализация массива точек..........................464 4.2.7.7. Разрезание невыпуклого полигона........................468 4.2.7.8. Триангуляция полигона..................................472 4.2.8. Дополнительные задачи отсечения в пространстве.............484 4.2.8.1. Отсечение выпуклого полиэдра полупространством.........484 4.2.8.2. Сечение выпуклого полиэдра плоскостью..................493 4.2.8.3. Расчет ядра полиэдра...................................495 4.2.8.4. Пересечение выпуклых полиэдров.........................496 4.2.8.5. Выпуклая полиэдральная оболочка массива точек..........498 4.3. Методы удаления................................................504 4.3.1. Предварительная обработка моделей объектов.................509 4.3.1.1. Выбор мировой системы координат........................509 4.3.1.2. Построение охватывающих оболочек.......................513 4.3.1.3. Разбиение граней.......................................523 4.3.1.4. Отбраковка нелицевых граней и нормировка векторов......530 4.3.2. Удаление невидимых линий...................................533 4.3.3. Удаление невидимых граней..................................539 Заключение............................................................545 Список литературы ....................................................549
Введение В основании бесконечно развивающегося здания компьютерной графики крае- угольными камнями лежат фундаментальные дисциплины — аналитическая гео- метрия и оптика, скрепленные раствором — искусством программирования. Возникнув из потребностей рынка, развития информатики и вычислительной техники, компьютерная графика изучает методы построения изображений раз- личных геометрических объектов и сцен. Главными этапами построения изображения являются: 23 моделирование как искусство применения методов математического описания объектов и сцен, природа которых может быть самой различной: обычные геометрические фигуры и тела в двух- и трехмерном пространстве; естествен- ные явления природы — горы, деревья, облака и другие объекты; огромные массивы чисел, полученных в различных экспериментах, и многое другое; 71 визуализация (отображение) как искусство построения реалистичных изобра- жений объемного мира на плоском экране дисплея ЭВМ, заключается в пре- образовании моделей объектов и сцен в статическое изображение или фильм — последовательность статических кадров. В отличие от плоских изображений реальных трехмерных объектов, которые на фотографиях автоматически выглядят натурально благодаря действию в приро- де оптических законов, синтезированное компьютерное изображение будет по- хоже на реальное лишь при мастерском владении как методами моделирования геометрических форм, так и средствами их достоверной визуализации. Таким образом, компьютерную графику можно рассматривать как искусство создания реалистичной иллюзии действительного мира. Эта сторона ее применения нашла наиболее яркое воплощение в системах виртуальной реальности — комплексах аппаратных и программных средств имитации окружающей среды с помощью визуальных, акустических, тактильных и других эффектов. С другой стороны, методами компьютерного синтеза стало возможным создание и нереальных, фантастических изображений и эффектов, без чего не обходится ни одна популярная компьютерная игра или кассовая голливудская кинолента. Подлинное второе дыхание компьютерная графика придала рекламному бизнесу благодаря умению создавать анимированные, т. е. оживленные, персонажи рек- ламируемых товаров. Из более серьезных областей применения компьютерной графики можно назвать: □ системы автоматизированного проектирования (САПР), в которых осущест- вляется интерактивное взаимодействие конструктора и синтезированного с помощью компьютера изображения создаваемого изделия или сооружения;
2 Введение □ автоматизированные системы научных исследований (АСНИ), в которых осуществляется визуализация результатов экспериментов в виде трехмерных статических или динамических изображений, интерпретирующих огромные массивы первичных данных; □ распознавание и обработка изображений в системах искусственного зрения, авиационной и космической картографии, медицинской томографии и т. д. В качестве исходного материала могут быть отсканированные изображения, космические снимки, данные локации и т. п. Компьютерное преобразование этих данных в зримые геометрические образы помогает достаточно просто понимать суть происходящих процессов людям, далеким от вычислительной техники. Таким образом, интерес к машинной графике проявляют представители самых различных специальностей: программисты компьютерных игр, конструкторы, технологи, физики, биологи, медики, дизайнеры, кинорежиссеры, художники- мультипликаторы, клипмейкеры и др. Неудивительно поэтому, что постоянно ощущается острый дефицит литературы, раскрывающей возможности примене- ния научных методов в современной компьютерной графике. К такого рода из- даниям и относится настоящая книга. Наиболее близким к ней по духу является фундаментальный тандем книг [25, 26] по основам машинной графики. К удач- ным изданиям последнего времени хотелось бы отнести также [5, 18. 23] и осо- бенно [36]. Глубоко уважаемый автор последней книги, как и большинство других авторов, отстаивает "подход программиста" при овладении знаниями в области компью- терной графики. Цель его книги — научить приемам решения простейших задач трехмерной графики, не останавливаясь на детальном исследовании излагаемых алгоритмов и оптимальных методов их реализации. Конечно, можно успешно водить автомобиль, не зная в деталях, что происходит под капотом. Но компьютерная графика— не массовое увлечение, а удел спе- циалистов своего дела, знающих предмет изнутри. Основное содержание на- стоящей книги составляет детальное изложение методов и алгоритмов реали- стичного изображения как статических, так и динамических объектов и сцен. Автор глубоко убежден в том, что гораздо интереснее и важнее понимать и уметь самому реализовать скрытые закономерности изображения сложных объ- ектов, чем с восхищением наблюдать, как эти изображения создаются чужими, пусть и более совершенными графическими программами. Автор сознательно не приводит текстов программ на каком-либо алгоритмиче- ском языке, т. к. мода на языки программирования преходяща (сохранившиеся кое-где книги с программами на раритетных ныне языках Basic, Fortran и Algol [20,24,31] не вызывают ничего, кроме умиления), стиль работы каждого про- граммиста уникален, а алгоритмы, изложенные на понятном для всех языке формул и блок-схем, универсальны и существенно более долговечны. Книга при- звана вооружить читателя удочкой— методами, алгоритмами и особенностями их реализации, а не готовой рыбкой — текстами программ; побудить его рабо- тать своей головой, а не использовать чужие решения.
Введение 3 По аналогичной причине книга не является инструкцией пользователя какого- нибудь популярного графического пакета. Более того, она не содержит ни одно- го названия подобных программ, простое упоминание которых лет через пять вызовет лишь снисходительную улыбку читателя по причине их безнадежной древности. Единственное исключение сделано уникальной программе MathCAD [22], которую автор использовал для создания геометрически достоверных ри- сунков и решения многочисленных примеров, иллюстрирующих работу алго- ритмов. И снова читатель будет лишен удовольствия сравнить свое искусство программирования в среде MathCAD с авторским, поскольку в книге сознатель- но не приведено ни одного листинга конкретной программы. Этому есть еще одно объяснение. Курс "Компьютерная графика", читаемый ав- тором на протяжении ряда лет в Нижегородском государственном техническом университете, предполагает выполнение лабораторных работ, где излагаемые в книге алгоритмы программируются в среде MathCAD. Для того чтобы доста- вить студентам удовольствие от самого процесса получения самостоятельного решения, тексты программ не включены в содержание книги. Автор выражает благодарность студентам факультета информационных систем и технологий Нижегородского государственного технического университета за роль подопытных кроликов, которую они доверчиво играли в процессе изучения курса, являясь одновременно экспертами методов и алгоритмов, излагаемых в книге. Нет границ признательности автора к членам своей семьи, в течение ряда лет терпеливо наблюдавших спину своего мужа и отца, работающего за компь- ютером над созданием и бесчисленными исправлениями этой книги. Спасибо всем неравнодушным за моральную поддержку!

Основные обозначения и соотношения S — символ, обозначающий начало алгоритма или примера. S — символ, обозначающий конец алгоритма или примера R" — евклидово пространство размерности п х°, у° и z° — ортогональные векторы единичной длины (орты), направлен- ные по осям декартовой системы координат xyz. f, h и р — фронтальная (ху), горизонтальная (xz) и профильная (yz) координат- ные плоскости декартовой системы координат. К = [их Уу]- Vxx° + УуУ° G R2 — вектор в плоскости ху с координатами Vy и модулем (длиной) |и| = ^Vx + Vy . V = \Кх Vy Vz ]= Vxx° + Vyy° + V:z° G R3 — вектор в пространстве xyz с коор- динатами Vx, Vy, И. и модулем | V |= -Jk2 + Vy + Vz . О„ e R" — нулевой вектор или блок вектора размерности п. О„х„, g R"x"' — нулевая матрица или блок матрицы размерности п х т. V = [v 1] G R”+l — расширенный вектор V, дополненный координатой, равной единице. V = [V О] G R”+l — расширенный вектор V, дополненный координатой, равной нулю. - V —нормированный вектор Иединичной длины. И|| И7 и V# W— соответственно, параллельные и непараллельные векторы V и W. VlWii V JJV — ортогональные и неортогональные векторы Vи W. Z.VWили Z(V,IV) — угол между векторами Vи W.
6 Основные обозначения и соотношения V о W = Kv • JVX + Vy • Wy + V. • W. — скалярное произведение векторов V и W. Другое выражение для скалярного произведения V ° W = |И] • | - cos(ZVW) по- зволяет найти косинус угла между векторами Vv,W: cos(z VW) = И т ИИ Vo W- 0 — шест ортогональности векторов Vи XV. V°W = ±1 — тесты параллельности (при +1) и антипараллелыюсти (при -1) векторов V и W. । । / ч— V°W ( —\— рги^И =|И| cos(ZVW)W =-— W = [V ° W)W — проекция вектора V на вектор W. И рг/уИ =К-ргд,К = K-(k<>7v)/V — проекция вектора Vе R3 на плоскость П, имеющую вектор нормали N. N = f^xw= Vx = Nxx° + Nyy° + Nzz° — векторное произведение векто- И7, ров V е R3 и W е R3, имеющее координаты и модуль |Л'| = |IZ] jW] sin(ZVJV). Отсюда получаем значение синуса угла между векторами в пространстве: sin(zrfr)=iL-r-!r. и-и |ИхИ/| = 0— тест параллельности (антипараллельности) векторов I'eR3 и W е R3. {/л pi —Рп} — ломаная линия (полилиния), заданная списком точек в порядке их соединения pi -> pi^> ... -> рп. {pi pi...Р„Р>}— многоугольник (полигон), заданный списком точек-вершин в порядке их обхода по замкнутому контуру pi —>pi -> ... -+р„^> pi. V/(r)= —-----вектор градиента скалярной функции/векторного аргумента V. dV Нпе(а, Ь) — функция рисования отрезка прямой линии ab на плоскости ху. diagfTV/, । ... М„п \ — квадратная матрица М е R"*" с диагональными элемента- ми Ми и недиагональными элементами = j.
Основные обозначения и соотношения 7 £„=diag[l ... 1] — единичная их/1-матрица. G R(«+1H"+1) М = О|Х„ ! 1 — расширенная матрица М, дополненная нижней диагональной единицей. и tr(A/)= ^Мц — стед квадратной матрицы М е R"x". /=1 rang(A/) — ранг матрицы М, равный числу ее линейно независимых строк или столбцов. г , [1, если выполняется условие cond-, {cond j= { [О, если не выполняется условие cond. if (cond : a, b) = а при cond ФО b при cond = О — условный оператор. sgn(x) = if(x >0:1, if(х<0: -1,0))= 1 при х > 0 0 при х = 0 — знак действительного числа х. -1 при х < 0 mod(«, b) — остаток от деления действительного числа а на действительное чис- ло Ь * 0. Знак остатка равен знаку числа а. Дробная часть числа х равна mod(x, 1). [хJ — округление числа х до ближайшего целого числа m < х. fx"| — округление числа х до ближайшего целого числа М > х. [_x + 0.5j или [х-0.5"| — округление числах до ближайшего целого числа. md(x) — случайное число, равномерно распределенное в интервале (0, х). Слу- чайное число в интервале (а, Ь) равно а + tnd(b - а). Случайное целое число в ин- тервале [/', /л] генерируется как |_« + rnd(m +1 - z?)J. L = {/1,..., /„} — список п скалярных переменных. Lp - {pi, ...,р„} — список п точек, элемент которого есть вектор координат точки. Ls - {«1 bi,..., а„ Ь„} — список п отрезков, элемент которого есть пара векторов концевых точек отрезка. Lm = {Li,.... L,„} — группа m списков, элемент которого есть список типа L или Lp. Гт = {Ci,..., Г„,} — массив m групп списков, элемент которого есть массив спи- сков типа Lm. size(S) — функция расчета числа элементов структурированного объекта 5. sort(L) — функция сортировки элементов списка (вектора) L по критерию с. С

Глава 1 Г еометрические основы компьютерной графики Реалистичность восприятия человеком сложного компьютерного изображения определяется умением разработчика математической модели изображаемого объекта или процесса достоверно повторить на экране его развитие в простран- стве и во времени. Модель включает в себя систему уравнений и алгоритмов их реализации. Математической основой построения модели являются уравнения, описывающие форму и движение объектов. Все многообразие геометрических объектов является комбинацией различных примитивов— простейших фигур, которые в свою очередь состоят из графических элементов — точек, линий и по- верхностей. Положение точки в R” задается радиус-вектором p = [pj р% ... р„], имеющим п координат/>i и разложение Р = [р\ Р2 ••• Pn\=T,Piei (11) 1=1 по п линейно-независимым базисным векторам е\ -е- еп. Совокупность базисных векторов и единиц измерения расстояний вдоль этих векторов составляет систе- му координат (СК). В пространствах размерностей п < 3 вместо цифр использу- ются синонимы в виде буквенных обозначений координат. Например, первой координате можно сопоставить букву х, второй — букву у, а третьей — букву z. Если при этом векторы е{ = х°, е2 = у° и = z° нормированы и взаимно орто- гональны, то xyz является декартовой СК — наиболее распространенной систе- мой координат. Для описания формы графических объектов, задания расположения объектов в пространстве и их проекций на экране дисплея используются различные СК, наиболее удобные в каждом конкретном случае. Перечислим системы, приме- няемые в настоящей книге, и кратко охарактеризуем их назначение: 3 неподвижная мировая система координат (MCK) xyz содержит точку отсчета (начало координат) и линейно независимый базис, благодаря которым стано- вится возможным цифровое описание геометрических свойств любого графи- ческого объекта в абсолютных единицах;
10 Глава 1 П экранная система координат (ЭСК) x>y,Z:, в которой задается положение проекций геометрических объектов на экране дисплея. Проекция точки в ЭСК имеет координату z3 = 0. Тем не менее, не следует отбрасывать эту координа- ту, поскольку МСК и ЭСК часто выбираются совпадающими, а, кроме того, вектор проекции [хэ у-} о] может участвовать в преобразованиях, где нуж- ны не две, а три координаты; а система координат сцены (СКС) хс ус Zc. в которой описывается положение всех объектов сцены — некоторой части мирового пространства с собствен- ными началом отсчета и базисом, которые используются для описания поло- жения объектов независимо от МСК; □ объектная система координат (ОСК) хо уо zo, связанная с конкретным объек- том и совершающая с ним все движения в СКС или МСК. По умолчанию будем полагать, что все координаты задаются в МСК. В R2 наиболее распространены ортогональная декартова (х,у) и полярная (г, <р) системы (рис. 1.1, а), связанные друг с другом следующими соотношениями: Рис. 1.1 В R3 наиболее распространены ортогональная декартова (х, у, z), цилиндрическая (р, у, <р) и сферическая (г, <р, \р) системы (рис. 1.1,6), связанные друг с другом сле- дующими соотношениями координат: □ декартова СК с цилиндрической СК: x = psin(<p), z=rcos(<p), I----- v (1.3, а) p = Vx2+z2, tg(<p)=-; П декартова СК со сферической СК: x = rsin(<p)sin(v), y' = rcos(v), - =rcos(<p)sin(ip), /~2 2 2 ( \ x ( \ Vx2 +z2 (1-3,6) r=Vx +/+* , tg(<p)=-, tg(v) =--------------; z У
Геометрические основы компьютерной графики 11 23 цилиндрическая СК со сферической СК: p = rsin(v) _y = rcos(y), Г2 2 / \ Р (1-3, в) /• = Vp +у ’ tg(v)=-- У Для единообразия терминов и алгоритмов мы будем работать в правой декарто- вой СК, оси которой ориентированы в пространстве так, что вращения ортов х°—>у°, у° —> z° и z° —>х° происходят в положительном направлении, т. е. против часовой стрелки с точки зрения наблюдателя, находящегося на конце третьего свободного орта. Взаимосвязь координат графического элемента может быть описана неявным .равнением f(p) - 0 и параметрической функцией p(t). Частным случаем неявного описания является явная форма, в которой одна из координат выражена через другие. Это возможно лишь для некоторых простейших линий и поверхностей. Не все графические элементы могут быть описаны неявными функциями. Наи- более универсальным является параметрическое описание каждой из п коорди- нат графического элемента соответствующей функцией времени, угла поворота или других параметров. Целью настоящего краткого экскурса в вычислительную геометрию, не претен- дующего на исчерпывающую полноту и строгость, является систематизация формул, необходимых для работы с графическими объектами, приведение их к алгоритмическому виду. Это отличает компьютерную графику от обычной, в которой свойства и взаимосвязь графических объектов визуально воспринима- ются глазами человека и интеллектуально интерпретируются его мозгом. С ме- тодами решения задач классической геометрии можно познакомиться, например, в [6,7]. Компьютерная или вычислительная геометрия оперирует не с рисунками, а с числами (координатами точек, векторов, матрицами преобразований, списками данных) и отношениями между ними, выраженными также в цифровой форме. Исходная информация, обработанная специальными алгоритмами, преобразу- ется в другие цифровые данные, интерпретируемые как искомый результат — модель объекта, его экранное изображение, отношения между объектами сцены и т. п. Подробное изложение основ вычислительной геометрии приведено в [24, 29]. Рассмотрим основные соотношения между графическими элементами на плоско- сти R2 и в пространстве RA Все основные формулы будут записаны в координат- ной и векторной формах. Векторная форма компактнее координатной и пред- почтительнее для понимания и программирования алгоритмов, хотя и требует несколько больших машинных ресурсов— объема памяти и времени счета. Уве- личение ресурсов объясняется наличием в векторах и матрицах фиксированных элементов (единиц и нулей), с которыми иногда выполняются бесполезные арифметические операции. Выше приведены основные обозначения и соотношения векторной алгебры. Са- мые трудоемкие матричные операции — обращение квадратной п х «-матрицы
12 Глава 1 М и расчет ее определителя — рекомендуется выполнять с максимально возмож- ной точностью простым в программировании рекуррентным алгоритмом Левер- рье—Фаддеева [10]: а, = Li+l = ML, - a,E„ V/ = 1, п, , ' (1-4) =—, |л/| = (-1)"_1осп. аи 1.1. Графические элементы на плоскости Точка на плоскости имеет две степени свободы. Расстояние между двумя пючка- мир]=[х] <Р|]и р2 = [х2 У21=Ь Отравно: |Р| _ Рг|= -х2 У + (У1 _ У2 Y — в декартовой СК, Vr<2 +г2 ~ 2г]Г2 cos(<P] - ф2 ) — в полярной СК. (1.5) Линия на плоскости имеет одну степень свободы. Уравнения линии в неявной (НФ) и параметрической (ПФ) формах имеют следующий вид: НФ: f (х, у) = 0 или f(p) = 0; (1.6, а) ПФ: р(0 = [4) Я')]- С1-6’6) В любой регулярной (гладкой и некратной) точке на линии р0 = [х0 ^0]= p(t0) возможна линеаризация кривой (рис. 1.2), т. е. проведение к ней касательной пря- мой, уравнения которо! Nx(x-x0) + i НФ’ ' N - #(*,>') 1 имеют вид: VyG’->’o) = 0 N _#(Х’У [«"(р-р»)=о; (|.7>я) Wo p(‘)=po +^; или _ dp(t) (1-7,6) co.Xo d* Po ен к линии и по свойству градиента на- х dx х(/)=х0 ПФ: х dt Вектор нормали N = [/V ’ у ’ dv Хо,Уо у _v(z)= -ИО + ) у _ <Й) х ' у d' хо>Хо х TVj,] ортогонал правлен в ту сторону, где f(p) > 0. При замене уравнения линии на -f(p) = 0 на- правление нормали меняется на противоположное. Направляющий вектор линии V ~[кх Гу] начинается в точке ро и направлен по касательной к р(1) в сторону увеличения I. Для перехода от одной формы (1.7) к
геометрические основы компьютерной графики 13 другой необходимо выбрать одно из двух ортогональных направлений нормали относительно направляющего вектора. Из условия ортогональности N о V= 0 => Nx Vx + Ny Vy = О получаем способ быстрого преобразования V N или N -> Г: □ координаты исходного вектора переставляются местами; J у одной из координат полученного вектора меняется знак. Рис. 1.2 Например, если дан вектор К = [1 2], то после перестановки координат он ста- новится равным [2 1], а после изменения знака, например, у первой координаты получим вектор W = [-2 1], направленный влево от V. Проверка показывает, что векторы V и N ортогональны: No V=(-2)- 1 + 1 -2 = 0. Для единообразия изложения материала примем правую ориентацию нормали, означающую, что при движении точки по линии вектор N направлен перпенди- кулярно вправо от вектора V. Таким образом, связь векторов нормали и направ- ения прямой будет следующей: **]• <18) 1.1.1. Модели прямой линии на плоскости Рассмотрим способы задания прямой на плоскости в различных формах. 1.1.1.1. Неявное уравнение прямой Неявное уранение прямой задается тремя коэффициентами А, В и D, составляю- щими вектор F = [а В о]: НФ: Ах + By + D = 0 или [р 1]° Т = р ° F = 0 . (1-9)
14 Глава 1 Хотя бы одно из чисел А или В должно быть ненулевым. Если оба коэффициента А * 0 и В * о, то прямая проходит наклонно к осям координат и пересекается с ними в следующих точках (рис. 1.3. я): — D А — D В О При А = 0 и В * 0 уравнение By + D = 0 описывает горизонтальную прямую, а уравнению Ах + D = 0 при А * 0 и В = 0 соответствует вертикальная прямая. От- метим ограниченность "школьного" способа приведения неявного координатно- го уравнения к явному виду у(х)=-—х- — В В и построения линии по точкам в желаемом интервале л g [xmm, Хтах]. Этот способ неприменим для вертикальных прямых с коэффициентом В = 0 и единственной координатой л = -D / А всех точек таких прямых. Прямая f{p)=p°F = Q проходит через начало координат при /(О?) = £) = (). Благодаря ее свойству разделять пространство плоскости на два подпространст- ва с противоположными знаками f(p), неявное уравнение позволяет с минималь- ными вычислительными затратами (за два умножения и два сложения) опреде- лить по условию f(q) — 0 принадлежность произвольной точки q прямой линии, а также ориентацию двух точек а и b относительно прямой (рис. 1.3, а). П при (Z>) > 0 точки лежат по одну сторону от прямой; П при f(a) -f(b) < 0 — по разные стороны от прямой. Для построения прямой по уравнению Ах + By + D = 0 необходимо и достаточно иметь либо две несовпадающие точки ро и р\, через которые она проходит, либо точку ро и направляющий вектор V, с помощью которого вторая точка вычисляется как р\-ро+ V. Сравнивая формулы (1.9) и (1.7, я), заключаем, что координатами вектора нормали можно принять коэффициенты неявного уравнения А и В: # = [л в]. Тогда по (1.8) получаем направляющий вектор неявной прямой У = [-В А]. Рассмотрим два способа выбора точки = [х0 jq]. 1. Первое, что приходит на ум — выбрать ее в том месте, где прямая пересекается с осью х при А * 0 или с осью у при А - 0 (только для горизонтальной прямой): p0=if А: О А О В (1.10, а) Несмотря на легкость понимания, этот способ не самый лучший для про- граммирования из-за наличия альтернативы выбора точки в зависимости от коэффициента А.
Геометрические основы компьютерной графики 15 2. Вычислим ближайшую к началу координат точку ро (рис. 1.3, а) методом наи- меньших квадратов (МНК) путем решения экстремальной задачи |/?|2 - р ° р -» min с ограничением р о N + D = 0. Для этого составим функцию Лагранжа Щр, X) = 0.5(р ° р) + к(р ° N + £>). Из условий ее экстремума ЭЗ(р,Л) ЭЗ(М) .. n п —- = л + XN = От , — = p°N + D = 0 др Р 2 ЭЛ получим и оптимальное решение Ро =77^7^ = 2 D (1.10,6) NoN а1+ Вл ' Данное решение безальтернативно по сравнению с (1.10, а), более удобно в программировании и эффективнее в вычислении. Поэтому далее будет ис- пользоваться преимущественно оно. Таким образом, координатная и векторная параметрические формы прямой, заданной вектором С = [л В £>], принимают вид х{() = --AD--- Bt А +В или p(t)= - - [И в]+[-£ A]t. (Ill) А2 + В2 1.1.1.2. Нормальное уравнение прямой Нормапьное уравнение прямой {/?о, N}, заданной точкой ро и вектором нормали N, выводится из условия ортогональности векторов N и р-ро для всех точек р, принадлежащих прямой (рис. 1.3, б): НФ: Nx(x-xo) + ^(y-j'o) = 0 или (p-po)°N = O; (1.12,а) ПФ: х(/) = хо - Ny t, y(t) - j'o + Nx t или p(t) - po + Vt, (1.12,6) r = [-^. aJ. Сравнивая (1.12, a) c (1.9), получим зависимость вектора неявного уравнения от параметров нормального уравнения: F = [w -р0о^. (1.13)
16 Глава 1 Неявная функция f(p) = (Р-ро) 0 N позволяет оценить положение точки р относительно прямой не только по знаку возвращаемого ей значения, но также и относительно направления нормали: П при f(a) > 0 точка а лежит в том полупространстве, куда направлена нор- маль, а угол Z(« - ро, N) острый; П при f(b) < 0 угол Z(b -ро, N) тупой, а точка b и нормаль находятся по разные стороны от прямой (рис. 1.3, б). 1.1.1.3. Параметрическая функция прямой Параметрическая функция прямой {ро, V), проходящей через точку ро в направле- нии вектора V(см. рис. 1.3, б), и эквивалентное ей уравнение в НФ будут иметь вид: ПФ: x(l) - хо + Vj, y(t) = уо+ Vyt или p(t) = ро+ Vf, (1.14, а) НФ: VyX- + D = О, D =-fyo + f = ^-p0‘>4 (1.14,6) где N = [ку -Кх]. Параметрическая форма удобна для задания и построения час- тей прямой — отрезков и лучей. Для этого в (1.14, д) необходимо указать преде- лы изменения параметра I. Например: П бесконечный интервал -оо < t < оо не ограничивает протяженность бесконеч- ной прямой', Рис. 1.3
'еометрические основы компьютерной графики 17 □ задание / > 0 дает луч, выходящий из точки ро в бесконечность в направлении вектора К; □ конечный интервал to < t < h определяет отрезок прямой между точками ро + Vto иро + Vt\. Благодаря левой ориентации направляющего вектора V относительно вектора нормали N, эквивалентная нормальной форме функция f(p)={р - Ро)° Н “ vx]= Р ,/° позволяет определить положение точки относительно направления движения по прямой: □ при f(a) > 0 точка а лежит справа, так что угол Z(<7 -ро, V) положительный; □ при f(b) < 0 угол Z(Z> -ро, Г) отрицательный, а точка b лежит слева от прямой. 1.1.1.4. Уравнения прямой, проходящей через две точки Неявная форма уравнения прямой, проходящей через две точки Д = [«д ау] и Ь = [лх /Гу] (рис. 1.3, в), выводится из условия принадлежности прямой этих то- чек и точки р = [х >]: НФ: = 0. (1.15, а) Выбрав направление движения по прямой от точки а к точке Ь, получим направ- ляющий вектор V - b - а и параметрическую модель линии: ПФ: х(/) = д, + (bx - ax)t, y(t) = а} + (by - ay)t или p(t) = а + (b- a)t. (1.15,5) Условие существования прямой очевидное: 1Р]# 0, т. е. а * Ь. При изменении параметра от t = 0 до t - 1 движение точки происходит внутри отрезка ab от точки а до точки Ь. Ниже рассматриваются свойства плоских мно- гоугольников (полигонов), определяемые ориентацией векторов нормалей к их сторонам. С учетом принятого соглашения (1.8) внешняя ориентация нормалей к сторонам полигона обеспечивается при его обходе против часовой стрелки. Соответствующая данному способу задания прямой функция /(р) = позволяет определить нахождение точки р относительно движения по прямой от л до Ь. При f(p)> 0 точка р лежит справа от прямой, а при f(q) < 0 точка q нахо- дится от нее слева. р-а Ь-а
18 Глава 1 1.1.1.5. Уравнения прямой в отрезках Неявное уравнение прямой в отрезках и hy, одновременно не равных нулю и отсекаемых прямой на осях х и у (рис. 1.3, г), получим из уравнения (1.9) при D - -1 с учетом соотношений Л, = -D /А v\hf = -DIB: T~ + T~~i=0 =>М + Л^’-Л.Д = 0=>F = [ft>, hx -hx/iy]. (1.16,д) r/r П,, Выбрав на прямой две точки а = о], 6 = [о hyJ, получим ее направляющий вектор V = b-a = [-hx Лу] и координатные параметрические функции прямой в отрезках: ПФ: x(t) = Av(l - /), y(t) = hyt. (1.16,5) 1.1.2. Взаимное положение графических элементов на плоскости Рассмотрим некоторые полезные формулы, тесты и алгоритмы, описывающие свойства и взаимное расположение точек, прямых и полигонов на плоскости. Для получения необходимых результатов активно используются тесты ортого- нальности и параллельности векторов, приведенные в перечне основных обозна- чений и соотношений. 1.1.2.1. Коллинеарность точек Три точкир,, р-. ир, коллинеарны, т. е. лежат на одной прямой (рис. 1.4, а), если X! х2 х3 J1 У2 Уз 1 =0 или Pl~Pl P3~Pl (1-17, д) Обобщение (1.17, а) на произвольное число точек р\ 4- рп: Pi Р1~Р\ rang Р2 = 2 или rang РЗ~Р\ -Рп. _Рп ~ Р\ _ (1.17,6)
геометрические основы компьютерной графики 19 Точка р лежит на отрезке ab при нулевом угле между векторами р - а и b-р\ (р-а) о (b-р) = |/з-о| • |6-р\. (118) Значение параметра I, соответствующее положению точки p-a + (b- a)t на трямой относительно ее отрезка ab, вычисляется с помощью скалярного произ- ведения: (р-а) ° (b - а) - (b-a)l о (Ь-а) - \Ь- д|2 • I, откуда (р-а)о(й-а) ‘-(Ь-аУ(Ь-аУ <119) 1.1.2.2. Взаимное расположение прямых Лее прямые совпадают (рис. 1.4,6), если V, НФ: Fi x Fi = О з ; ПФ: I 1Z2 = 0 n- P2O~PlO = 0 Лее прямые параллельны (рис. 1.4, в), если НФ: = 0; ПФ: ?1 = 0 w2 V2 Расстояние между параллельными прямыми равно: ^ = |ргм(р20 -Pio)| = |(P2O -pio)o?/i|; ПФ: Р20~ РЮ И |Р20 - Р10 “ РГГ (Р20 “ Р10 = |Р2О “/’IO -((Р20 -Р1О)°П) Pi|. Лее прямые ортогональны (рис. 1.4, г), если НФ: м о № = 0; ПФ: Ki о V2 = 0. (1.20) (1.21) (1-22, а) (1.22,6) (1.23) 1.1.2.3. Взаимное расположение точки и прямой Уравнения перпендикуляра, опущенного из точки q = \gx qy \ на прямую, заданную э НФ или ПФ (рис. 1.4, д), выглядят следующим образом: НФ: Ny(x-q,)-Nx(y-qy) = 0^>Nj_=[Ny -aJ, Fj_ = (1-24,0) ПФ: px(t) = q + N t илиp±(f) = q + Vj, где = [ly ~TXJ. (1-24,6)
20 Глава 1 Расстояние от точки q до прямой равно: НФ: (125,«) ПФ: q-_Po v = \я - Ро - РГг (<7 - Ро )| = \я - Ро - ((? ~ Ро)° (1-25,6) d = Зеркальное отражение точки q от прямой лежит на перпендикуляре к прямой на расстоянии 2d от q в сторону, противоположную проекции вектора q-po на нормаль N (рис. 1.4,6): Нф: ‘7, = <7-2ргЛг(9-ро)=<7-2((д-ро)°^)л?; (1.26,д) ПФ: / = ?-2(9-р0-рги(9-р0)) = 2р0-9-2((<7-р0)ои)г. (1.26,6) & Пример 1.1. Отразить треугольник pi р-> рз с вершинами р\ = [о о], р2 = IP 11 и р3 = [2 О] от прямой линии, проходящей через точки а = [3 0] и b = [2 2] (рис. 1.5). Решение. Находим направляющий вектор прямой И = 6-о = [-1 2], по формуле (1.8) нормаль N = [2 1] и квадрат ее длины 2УоУ=5. Пусть ро = а, тогда по (1.26, а) последовательно для точек р\,р-з ирз вычисляем отраженные точки Pi = Pi ~ 2(p,-a)oN NoN N: p{ = [0 0]-0.4([-3 0]° [2 1] )[2 1]=[4.8 2.4],
еометрические основы компьютерной графики 21 Р2=[0 1]-0.4([-3 1]о[2 1])[2 1]=[4 з], Рз = [2 0]-0.4([-1 0]о[2 1] )[2 1]=[з.6 0.8]. □ 1.1.2.4. Построение прямой, наименее удаленной от совокупности точек Рассмотрим интересную задачу, связанную с понятием расстояния от точки до -рямой линии. Допустим, в R" (здесь при решении задачи на плоскости ху будем зюлагать п = 2) задано m > 2 произвольных точек pi ч-рш. Сформируем из них матрицу (1.27) Lp™ Так как в общем случае точки не коллинеарны, то не существует ни одной прямой ^(р) = 0, для которой все числа с/, = f (рд обращаются в ноль. Другими словами, асстояния |с/,| / |Л] от точек р, до прямой с нормалью N, вычисленные по (1.25, а) и пропорциональные с/„ не могут быть одновременно все нулевыми (рис. 1.6). Рис. 1.6
22 Глава 1 Построим аппроксимирующую прямую {ро, N}, наименее удаленную от совокупно- сти точек ph путем решения экстремальной задачи т ^d, —> min . i=l С целью уменьшения неопределенности зададим ограничение |7V| = 1, поскольку ориентация прямой линии зависит лишь от направления, а не от длины вектора нормали. При выполнении данного ограничения числа г/, являются алгебраиче- скими, т. е. со знаками, расстояниями от точек до прямой. Из пяти рассмотрен- ных выше способов описания прямой линии выберем неявную форму (1.9) с век- тором F = pV £>], имеющим минимальное число скалярных параметров, равное трем при п = 2. При таком выборе вектор d е R"' расстояний от точек до прямой принимает вид d = FPr = h'Pv + D [1 ... 1], m а квадрат его длины равен |j|2 = dd'{ = [nP{ + D |1 = NP^PN^+ID ^p, N1+mD2 = NPTPNT+2mD(NoC)+mD2, где точка с = 1 -Yp. m ,=1 (1.28) есть геометрический центр массива точек /?,. Задача аппроксимации решается методом наименьших квадратов путем минимизации функции Лагранжа s(/v,DA)=|d|2+^|2-iJ= (]29 = NPrPNT + 2mD{N ° с)+ mD2 + 2.(/\WT -1). Из условий ее экстремума 1 — = NpTp + mDc + XN = 2 dN - — = m(NoC)+mD = 0, — = MVT-1=O .2 dD V 7 dA (1.29,6)
"еометрические основы компьютерной графики 23 * свойства произведения скалярного произведения двух векторов на третий вектор (а о b) • с = a (bTc) следует, что D = -N°c, N(pTP-mcIc + XEn)=On. (1.29, в) Сравнение выражений для коэффициента D в (1.29, в) и (1.13) убеждает, что все ~рямые, доставляющие экстремум S(N, D, X), проходят через точку ро - с. Второе соотношение в (1.29, в) представляет собой однородную систему линей- ных алгебраических уравнений относительно координат вектора N. Она имеет нетривиальное решение 7V> О„ при нулевом определителе матрицы ХЕ„ - М, где Л/=/псгс-РтРе R"x". (1-29, г) Следовательно, множитель Лагранжа X есть одно из п собственных чисел • значений), a N— соответствующий ему нормированный собственный вектор матрицы М. Количество собственных значений квадратной матрицы равно ее размерности. В случае п = 2 симметричная матрица М имеет две действительные .ебственные пары {Xi, 2V1} и {Хг, N?}, причем при Xi * Хг [см. 9, 13, 32]. Это означает, что прямые, доставляющие экстремум функции 3(Л\ D, X), орто- гональны. Вычисление собственных чисел и векторов матрицы — хорошо отра- ботанная процедура вычислительной математики, например, в [10,27,32]. Сле- дует обратить внимание на нормирование собственных векторов в том случае, ясли алгоритм их вычисления не делает эту операцию сам. Возникает закономерный вопрос: какой из полученных векторов N\ или Nz сле- дует выбрать в качестве нормали искомой прямой? Ответ очевиден: тот, чья _рямая доставляет минимум функции Лагранжа (1.29, а). Ведь условия (1.29,6) _ают лишь экстремальные значения, которые при D = -N о с и [IV] = 1 равны S = NprpNr о с)2 = -NMN'V = -l.NN1' = -X > 0. Этсюда следует, во-первых, что все собственные числа матрицы М не положи- -ельны, во-вторых, что минимум функции Лагранжа доставляет собственная _ара {X, N} с максимальным значением X = max{Xi, Хг) и соответствующим ему з ектором N— нормалью искомой прямой {с, N}. Для удобства построения найденной прямой линии можно перейти от ее нор- мальной формы (1.12, а) к параметрической форме (1.14, а) с вектором 1 =["А\ Ли- ставшаяся собственная пара матрицы М с минимальным собственным числом лает максимум функции Лагранжа и ортогональную (при Xi * Хг) прямую (на тис. 1.6 она изображена пунктиром), пересекающуюся с оптимальной прямой в точке с. & Пример 1.2. Построить прямую линию, наименее отклоненную от точек ₽-. = [1 2], р2=[2 1], Рз = [з l],P4 = h 1]ир5=[2 2] (см. рис. 1.6).
24 Глава Решение. Из заданных точек составим матрицу (1.27) и найдем их центр (1.28): 1 2 2 1 Р = 3 с_ Pl+P2 + ft + P4+P5._[Lg 14] 1 1 2 2 Вычислим по (1.29, г) матрицу М и ее собственные параметры: М =5 1-4] 1 2 3 I 2~[ Г1 2 3 1 2 2 1112 2 1112 -2.8 0.6 0.6 -1.2 2.1 =-3,2.2 = -1, Nj =[-0.949 0.316], = [0.316 0.949]. Отделив максимальное значение К = 2.2, получим параметры неявной формы ис- комой прямой: W = [0.316 0.949], D = -N-> с = -1.897. Таким образом, аппроксимирующая прямая описывается неявным уравнением 0.316л+ 0.949^- 1.897 = 0 или параметрическими функциями л(/) = 1.8 - 0.949/, у(/) = 1.4 + 0.316/. Алгебраические расстояния от точек до этой прямой равны dt =0.316. di = -0.316, di = Q,d^- -0.632 и ds = 0.632, а минимум функции Лагранжа состав- ляет -Omin — I. Для сравнения на рис. 1.6 построена пунктирная прямая, соответствующая соб- ственной паре {2.1, М}. Расстояния от нее до заданных точек равны dt =0.949, di = -0.316, //з = —1.265, //4 = 0.632 и ds = 0, а значение функции Лагранжа Зшах = 3 > 3min, что подтверждает правильность решения задачи. □ 1.1.2.5. Пересечение двух прямых Важнейшей задачей геометрии на плоскости является расчет точки д пересечения двух прямых (рис. 1.7, а), который в зависимости от формы их задания выполня- ется следующим образом: TVj]= ho0М Р20о^2]=> НФ: (1.30, а) => q = hо ° Pio ojV2l гГ wJ] ;
Геометрические основы компьютерной графики 25 ПФ: рю+ Vltl =Р2О+ V2t2=> [1, t2 ] = (р20 ” Р\ О) 'Г| Г' .-У1. (1.30,6) => q= рю + Viti. Условия существования решений в (1.30) I ^7 М2 | * 0 или У\ -V2 *0 равносильны непараллельности прямых. Введем функцию вычисления угла между векторами V и W ang(y,iv) = if d = И IV *0: sgn(</), 1 -arccos И<>1Г (131) как угла кратчайшего вращения от V к W. По свойству скалярного произведения векторов модуль угла равен arccos^о (v)e [о, л], а правильный знак определяет- ся по ненулевому знаку определителя d матрицы, построенной на этих векторах. При <7=0 векторы Vи Wлинейно зависимы, а знак sgn(<7) = 0 в (1.31) игнориру- ется. Это может быть в двух случаях: Л при параллельности векторов угол между ними нулевой, a arccos(l) = 0; □ при антипараллельности векторов угол между ними развернутый, а по (1.31) получим arccos(-l) = л. Таким образом, угол пересечения двух прямых находится с помощью функции (1.31) как у = ang(Ni,Nl) или у = ang(Vt, Иг). (1-32) 1.1.2.6. Уравнения пучка прямых и биссектриса угла Уравнения пучка прямых, заключенных между двумя прямыми (рис. 1.7, б), выво- дятся следующим образом: НФ: ^А„Ы=(1-Х)л0>)+Л/20,); /2V’)=Po^2 (1.33,0) ПФ: Pt(f)= Рю (|-30’б) < \ я Р2\Ч~ Р20 + ^21 РА+10=Я+Ул+1^ (1.33, б) Изменение параметра пучка в интервале 0 < X < 1 дает такие промежуточные прямые, что вращение векторов N^+t и f\+i происходит по кратчайшим углам от начальных положений Nt и Vi до конечных положений ТУг и Иг. Уравнение (1 33, б) можно также рассматривать как параметрическую (с параметром X) мо-
26 Глава 1 дель прямой линии, соединяющей точки исходных рг = q + 12/ при фиксированном значении параметра I. прямых р\ = q + Г1/ и Рис. 1.7 На основе этой трактовки несложно и без вычисления углов решается задача построения дуги окружности радиуса г. заключенной в створе между векторами Ki и Иг, выходящими из точки q (рис. 1.7,в). Точки дуги Jx+i, соответствующие параметру X е [0, 1], вычисляются по формуле = q + Vw, в которой нормируемый вектор lx+i находится по (1.33,6). Для изображения дуги в виде ломаной линии, состоящей из N отрезков между точками di и di, можно разбить диапазон изменения параметра К на У равных интервалов (рис. 1.7, в построен при N - 5), сформировать набор значений X = i / N Vi = 0, N, рассчитать векторы Kx+i и точки дуги Jx+t, после чего соединить эти точки от- резками прямых. Уравнения биссектрисы угла между двумя прямыми получим по уравнениям (1.33) с параметром X = 0.5 только при |7Vi| = |Уз| или |Г1| = |Кг|, т. е. когда тре- угольник с вершиной в точке q и сторонами Г, и Гг является равнобедренным, у которого биссектриса совпадает с медианой. В противном случае можно ис- кусственно создать равнобедренный треугольник со сторонами |Гг|Г1 и |Г||р2 равной длины |К|| • |К2|. В результате параметры биссектрисы можно найти по формулам Гб«с = |7V2|Fi + IM|Г2, Рбис(/) = q + Гб.,с/, Гбис = ] г2| И1 + IF1|И2. (1.34)
Геометрические основы компьютерной графики 27 Расчет биссектрис бывает необходим, например, при построении окружности, вписанной в треугольник (рис. 1.7, г). Как известно, ее центр лежит в точке пере- сечения любых двух биссектрис внутренних углов этого треугольника. При по- строении биссектрисы внутреннего угла следует учитывать направления под- ставляемых в (1.34) векторов сторон треугольника: они должны либо оба выходить из вершины, либо оба в нее входить. При несоблюдении этого правила по (1.34) будет построена биссектриса дополнительного угла треугольника, а окружность окажется вневписанной. Итак, допустим, что вершины треугольника находятся в точках a, b и с. Вычис- лив векторы сторон Ki = b - a, Иг = c-b, Из = а-с, найдем по (1.34) направляющие векторы биссектрис двух внутренних углов Ва = | Из| И -1И||Из, В„ = |И1|Иг -1Иг|Иь Тогда центр вписанной окружности о лежит на пересечении параметрически за- данных прямых {а,В„} и {Ь,В,,} и может быть вычислен методом (1.30,6), а ее радиус г есть расстояние от точки о до прямой {а, И|}, вычисляемое по (1.25, 6). 1.1.2.7. Тесты свойств графических элементов на плоскости Рассмотрим вначале тесты, основанные на свойстве сепарабельности прямой f(p)-0 разделять плоскость на два подпространства с противоположными зна- ками функции f(p). □ Тест ориентации точки р = [х у] относительно прямой заключается в про- верке знака числа ftp), для вычисления которого в зависимости от способа задания прямой в разд. 1.1.1 используется соответствующая функция nf ♦, где означает варьируемый третий символ "F", "TV", "V" или "2" в имени функ- ции: nfF(f,p)=poF ; nf Ntpo, N,p) = tp -po) ° M (1.35, a) (1.35,6) nfV(p0,V,p) = P-PV V (1.35, в) nf2(a,b,p) = p-a b-a (1.35, г) Все точки q справа от прямой, т. е. со стороны ее нормали, дают значения ка- ждой из этих функций nf * > 0, а слева — nf * < 0. Для доказательства данного факта подставим, например, в функцию (1.35,6) точку q = ро + Vt + XN, пра- вую при X > 0 и векторе V ± N (рис. 1.8): nfNtpo, W, 9) = (И/ + ХЛЭ о W = (Ио Д')/ + Л) = 0 • / + Л|ЛП2 > 0.
28 Глава 1 Рис. 1.8 Так как значение f (q) не зависит от коэффициента t, отсчитываемого вдоль направляющего вектора V, то линии постоянных уровней f (р) проходят па- раллельно прямой и также являются прямыми. Как следствие, получим рас- стояние от точки q до прямой, равное и совпадающее с (1.25, а) Ввиду простоты вычисления функция f (р), реализуемая на практике одной из функций nf * в (1.35), идеально подходит для сортировки точек относительно прямой линии на правые, левые и лежащие на ней. Тест ориентации точки от- носительно прямой применяется в алгоритмах, связанных с обработкой то- чек, вершин полигонов, а также во многих других задачах вычислительной геометрии. □ Тест пересечения прямой линии f(p) = 0 с полигоном Р = {ptp2 — рпР\}, имею- щим произвольное направление обхода вершин, выполняется с помощью сле- дующей функции: crossl(f, Р) = {3 1 <J <i<n -.ftp,) f(pj) < 0}. (1.36) Прямая пересекает полигон, если существует хотя бы одна пара вершин, ле- жащих от нее по разные стороны (рис. 1.9, а). Обсудим некоторые подходы к реализации теста в виде конкретного алго- ритма, стремясь получить его наиболее эффективным в смысле минимальной трудоемкости. Следует ясно понимать, что нужно сравнивать положение относительно пря- мой линии не только смежных вершин полигона р, и р,+), а всех различных пар вершин {р„р7}, т. к. прямая может, пересекая полигон только в вершинах, не пересечь ни одного ребра внутри (рис. 1.9, б). Свойство сепарабельности позволяет по разным знакам чисел /(р,) и f(p) обнаружить вершины р, и р7, лежащие по разные стороны от пересекающей полигон прямой. Если же не
еометрические основы компьютерной графики 29 найдется ни одной пары разносторонних вершин, то прямая и полигон не пе- ресекаются. Число всех пар из и вершин полигона равно n (и + 1) / 2. Если решать задачу алгоритмизации теста (1.36) "в лоб" (с двумя вычислениями f(p) для каждой пары вершин), то при больших значениях и (например, когда некоторая замкнутая кривая аппроксимируется полигоном с числом сторон порядка не- скольких тысяч) трудоемкость теста будет пропорциональной п2, т. е. недо- пустимо большой. Уменьшения этой зависимости до линейной можно дос- тичь с помощью специальных приемов. Рассмотрим некоторые из них: • во внешнем цикле i = \,n вычисляем значения Si=f(p}. Во внутреннем цикле j = l, i-l V/ > 1 анализируем знак произведения 5,^ (заметим, что число Sj = f(p]) уже вычислено). При SjSj < 0 тест немедленно завершается, возвращая 1 — признак пересечения прямой с полигоном. После нормаль- ного окончания внешнего цикла алгоритм возвращает 0 — признак отсут- ствия пересечения либо касания прямой с полигоном; Рис. 1.9
30 Глава 1 • в цикле z = l, п вычислим значения s,=f(p,), а затем сделаем сортировку вектора л. Результат тестирования возвращается числом res = sgn($i s„). При res = -1 крайние элементы si и s„ имеют разные знаки, что означает пересечение прямой с полигоном. По сравнению с предыдущим алгорит- мом данный вариант теста способен различить касание (res — 0) и отсутст- вие пересечения прямой с полигоном (res = 1). В качестве недостатка отме- тим наличие операции сортировки, трудоемкость лучших методов которой оценивается зависимостью п log(zz) < п2 [13, 24]; • наилучший, по мнению автора, алгоритм теста пересечения представлен блок-схемой на рис. 1.9, в и использует три флажка, сигнализирующих о наличии вершин полигона слева (флажок /), справа (флажок г) и точно на прямой (флажок е). Вначале все флажки сбрасываем в ноль. В цикле i = 1, п вычисляем значение 5 = f(pd и устанавливаем в единицу один из флажков: I при 5 < 0, е при 5 = 0 или г при 5 > 0. Тут же по условию / • г 0 проверяем наличие любой пары вершин полигона по разные стороны от прямой. Если это условие выполняется, то тест немедленно завершается, возвращая 1 — признак пересечения прямой с полигоном. После нормального окончания цикла обхода вершин алгоритм возвращает значение е- 1, равное 0 при касании или -1 при отсутствии пересечения прямой с полигоном. □ Тест выпуклости полигона Р = {pt ...рпр}}'. conv2(P) = {sgn(«/2(p,_|,p„^,+l)) = const] Vz =1, и, гдеро =р„,p„+i =pt. (1-37) У выпуклого (convex) полигона все углы Ар^р^-ц одного знака. Другими словами, при обходе выпуклого полигона по замкнутому контуру в произ- вольном направлении каждая вершина р,+, расположена относительно ребра p,_i р, одинаково для всех значений г. слева при положительном направлении обхода и справа при отрицательном (рис. 1.10, а). Благодаря свойству сепа- рабельности в процессе обхода невыпуклого полигона рано или поздно обяза- тельно произойдет инверсия знака числа 5 = nf2(pi_f,pi,pn.l) по сравнению со знаком числа c = nf2(p„,px,pi) в начальной вершине pf, как показано на рис. 1.10, б. Блок-схема теста выпуклости приведена на рис. 1.10, в. По сравнению с (1.37) алгоритм conv2 стал способен определять наличие у полигона развернутого угла при вершинер, по нулевому значению nf2(pi_t,pl,pM) = 0. Определенная блок-схемой функция conv2 возвращает 1 для выпуклого поли- гона, 0 для невыпуклого и -1 для полигона, имеющего хотя бы одну вершину с развернутым углом. □ Тест самопересечения полигона Р = {р, ...р„р^\ self test(р) = В i?е [1, п - 2], j е [z + 2, п -1 + {z > 1}]: {fijftjvx < о}П {/>/,,/+1 <0} где п > 3, afj = zz/2(p„pf+l,py) — значение НФ (1.35, г) прямой отрезка PiP,+i в точке р}. Полигон является самопересекающейся замкнутой ломаной линией,
метрические основы компьютерной графики 31 если у него существует хотя бы одна пара пересекающихся отрезков. Два от- резка PiPi+l и PjPj+\ пересекаются друг с другом, если концы одного находятся по разные стороны от прямой другого и наоборот. Интервалы изменения ин- дексов i и j выбраны так, чтобы были протестированы все пары не смежных ребер полигона: • индекс i перебирается в интервале от 1 до и - 2; • при / = 1 индекс j перебирается в интервале от 3 до п — 1; • при i > 1 индекс j перебирается в интервале от i + 2 до и. Рис. 1.10 Функция self_test возвращает I при наличии самопересечения полигона и О при его отсутствии. Для того чтобы тест был способен обнаруживать не только "чистые" пересечения несмежных ребер, но и их касания, используемое в нем логическое условие должно быть записано немного сложнее: <о}п{б, Дж < о}и{4 АЛ1 < о}п <о}.
32 Глава 1 1.1.2.8. Тесты ориентации точки относительно полигона Рассмотрим тесты ориентации точки q = [x у] относительно полигона Р= {pt ...p„pt}. О Выпуклый тест conv! _ test{f], Р) = -1, если sgn(/}) = const Vz = 1, л; 1, если 31 < j < i < п: fifj< 0; (1.38) 0, если не ±1 определяет внутреннее положение точки дВНу относительно выпуклого полиго- на при одинаковых знаках чисел f = ч/Цр^р^Цыц}, вычисленных по (1.35, г) для всех ребер p,pt+\ (рис. 1.11,а). Любую внешнюю точку q»m тест обнаружи- вает по разным знакам чисел / и у", соответствующих ребрам р,р^+1 и PjPj+i (рис. 1.11,6). Как и в тесте cross!, здесь также нужно сравнивать положение точки q не только относительно соседних ребер полигона p,p,+i и р/+|А+2> а всех различных пар ребер р,р,+| и PjPj+i Наконец, все точки, не идентифици- рованные как внутренние или внешние, считаются граничными точками qrp. Тесты cross! и conv!_test имеют много общего и фактически являются двойст- венными формами общего метода обработки точек и прямых на основе свой- ства сепарабельности прямой. Схожесть тестов наглядно иллюстрируется блок-схемой алгоритма conv!_test, изображенной на рис. 1.11, в. В соответствии со знаком числа 1, возвращаемым тестом для внешних точек, назовем внешнее подпространство полигона положительным. Внутреннее пространство полигона будем считать отрицательным согласно знаку воз- вращаемого значения -1. Все точки <уГр на границе полигона (в вершинах или на ребрах) дают значение conv!_test(qrf>, Р) = 0. Если тест (1.38) проводится в экранной системе координат, то все расчеты яв- ляются целочисленными и максимально быстрыми. Рис. 1.11, а, б
еометрические основы компьютерной графики 33 Рис. 1.11, в □ Габаритный тест gab2_test(q, Р)={х< pxmin }U {х > pxmax } U г . г г (1-39,0) U V < Pjmin J U V7 > Pjmax J определяет по возвращаемому значению gabl_test - 1 гарантированную не- принадлежность точки q произвольному полигону Р путем сравнения ее коор- динат с габаритами полигона— минимальными и максимальными коорди- натами его вершин р, V/ = 1, п: /\rnin = min {р,Л.} , /\rnax = ГПаХ {р,Л} , p,,min = ГШП , р;тах = ГПаХ {р0,} . (1.39, б) Полностью габаритный тест задачу ориентации не решает, возвращая значе- ние 1 только для тех внешних точек qme, которые расположены вне габарит- ного прямоугольника (рис. 1.12, а). Результат gabl_test = 0 означает, что точ- ка находится внутри габаритного прямоугольника, но не может быть однозначно идентифицирована как внешняя, внутренняя либо граничная. Тем не менее, благодаря своей простоте габаритный тест применяется во мно- гих алгоритмах для быстрого обнаружения заведомо непересекающихся гео- метрических объектов, что освобождает от необходимости решения трудоем- ких задач внешнего и внутреннего отсечения.
34 Глава 1 Точечный тест (1.39) легко обобщается, как показано на рис. 1.12, б, на слу- чай полигона Q - ... q,„ q{\ с габаритными координатами (7Л-тт — Hiin{^,4}, qxmm = max{r/,A}, qymin — , ^max = max {<5^}: gab! _ poly(Q,P} = {<7xmax < Pxmin }U {<7xmin > Рутах }U U {?ymax < Pymin }U {vyrnin > Рутах }• (1.40) □ Угловой тест основан на вычислении и анализе алгебраической суммы углов б, = £(Vh Г/+1) между смежными векторами = p.-q, соединяющими точку q с вершинами р„ при обходе произвольного полигона Р по замкнутому контуру в произвольном направлении. Тест основан на следующем опыте: наблюда- тель, просматривающий вершины полигона из внутренней точки qBKy, совер- шает вокруг себя полный оборот (рис. 1.13, а), а из любой внешней точки ^вне — ни одного оборота (рис. 1.13, б). Воспользуемся для вычисления угла между двумя векторами функцией ang, определенной в (1.31) и возвращающей радианную меру угла. Тогда при всех ненулевых векторах Г, радианный вариант углового теста примет вид п ^ang(yhyi+x) i=l О < Я => Чине ® 2л > л => <7ВНу е Р. (1.41) В связи с неизбежными погрешностями, возникающими при суммировании углов, вычисляемых с помощью приближенной функции ang, в (1.41) нельзя сравнивать результат ни с нулем, ни с 2л: он всегда будет хоть на немного, но отличаться от этих чисел. Предлагается взять пороговое значение, равное л: оно ни при каких погрешностях не даст неверного результата тестирования. Граничная точка qvp обнаруживается по следующим признакам: • если при расчете векторов будет получен нулевой вектор длиной |Г,] = 0, то тестируемая точка совпадает с вершиной д;
геометрические основы компьютерной графики 35 • если при расчете углов 8, будет получен развернутый угол с модулем |8j = л, то тестируемая точка лежит на ребре р, (рис. 1.13, б). Резюмируя сказанное, получим алгоритм rad_test(q, Р) радианного углового теста ориентации точки q относительно произвольного полигона Р (рис. 1.13, в). Поскольку для вычисления угла б, нужна лишь пара смежных векторов Vj и К;+1, то при обходе вершин полигона можно вычислять текущий вектор Г, а в конце цикла запоминать его в векторе W для использования в следующей итерации, экономя тем самым память компьютера. Алгоритм воз- вращает 1 для внешних точек, -1 для внутренних и 0 для граничных. Рис. 1.13 Ввиду важности места, занимаемого угловым тестом в задачах компьютерной графики, обсудим как явные, так и скрытые недостатки алгоритма rad_test: • необходимо нормировать все ненулевые векторы Vh что связано с опера- циями вычисления квадратного корня и деления, которые относятся к не-
36 Глава 1 целочисленным операциям с плавающей точкой, выполняющимся гораздо медленнее операций с целыми числами; • вычисление угла в (1.31) тригонометрической функцией arccos произво- дится путем суммирования бесконечного степенного ряда до сходимости по точности, предусмотренной компилятором используемого языка про- граммирования. Этот итерационный процесс с плавающей точкой также не отличается высоким быстродействием; • вычисления с плавающей точкой приводят к накоплению погрешностей при суммировании степенных рядов и углов в (1.41). В связи с этим обна- ружение граничной точки q е р^р,+\ с помощью сравнения |8,| = л на прак- тике должно быть заменено условием ||8,|-л|<е, где е — экспериментально подобранная минимальная константа, надежно поглощающая ошибки округления; • при малом € необходимо иметь число л с максимально возможной точно- стью, а не как обычно задают Р1= 3.1415926. Фактически это означает, что если константа л отсутствует в используемом языке программирова- ния, то она должна вычисляться с машинной точностью. Для этого можно воспользоваться абсолютно, но медленно сходящимся степенным рядом к=0 (-1)* 2k +1 Модифицируем радианный угловой тест так, чтобы расчет углов 8, с высокой точностью стал не обязателен. Будем считать углы в целочисленных октан- тах. Руководствуясь неравенствами на рис. 1.14, сопоставим вектору Г = [х у] октантный угол 1 < v < 8 и функцию вычисления октантного угла oct(V), возвращающую 0 при х = у - 0 и целое число ve {1, 2,..., 8} при |Р] * 0. Как и в радианном тесте, получение нулевого значения v, = oct(pt-q) означает принадлежность точки q границе полигона в его вершине р, и немедленное за- вершение теста с возвращением нуля. 5 хсу<0 о 8 J у -х<у<0 0<х<-у у<х<0 Рис. 1.14
Геометрические основы компьютерной графики 37 При q *р, Vz = 1, п вычислим приращения октантных углов Д, = v,+1 - Vj на пе- реходах р,-»р,+|. Для получения кратчайших угловых приращений необхо- дима коррекция величин и знаков октантных углов с |Д,| > 4: • если Д, > 4, то Д, = Д, -8; (1.42, а) • если Д, < -4, то Д, = Д,- + 8; (1-42, б) • если Д,,= ±4 и/= nf2(Pi,pi+l, q) * 0, то Д,, = -4sgn(/). (1.42, в) Поясним коррекцию в (1.42, в). Значение |Д,| = 4 возможно в трех случаях рас- положения точки q в окрестности ребра PiPi+\, при которых угол Ap,qpi+[ близок к развернутому или равен ему: • точка находится точно на ребрер,р,+| (на границе полигона Р, рис. 1.15, а). Этот факт устанавливается проверкой f— 0 и завершает тест, возвращая 0; • при/> 0 точка лежит справа от отрезкаpjpi+l, а Д; = -4 (рис. 1.15, б); • при f < 0 точка лежит слева от отрезка р, р,+1, а Д, = 4 (рис. 1.15, в). Обозначим за oct_cor(q, а, Ь) функцию вычисления октантной меры угла Z.aqb и его коррекции по (1.42). Тогда целочисленный октантный тест, аналогичный радианному тесту (1.41), принимает вид " / \ (0=>q£P; |±8s(p (1.43) Точка q является внешней относительно полигона Р, если суммарный октант- ный угол поворота вектора Vt при обходе вершин р, по замкнутому контуру ра- вен нулю. Точка лежит внутри полигона, если этот угол ненулевой. Наконец, точка находится на границе полигона, если либо при oct(pi -q) = 0 она совпада- ет с вершинойр„ либо при |Д,| = 4 и и/2(р„р,+1, q) = 0 она лежит на ребрер,р,+1. Обозначим за oct_test(q, Р) функцию октантного углового теста ориентации точки q относительно плоского полигона Р = {р, ...p^}, возвращающую -1 для точки внутри полигона, 1 — вне полигона и 0 — на его границе. Блок- схема октантного теста построена на рис. 1.15, в. Пунктиром выделена часть алгоритма, в которой происходит вычисление и коррекция приращения ок- тантного угла по (1.42). Рис. 1.15, а, б, в
38 Глава 1 Рис. 1.15, г & Пример 1.3. Определить ориентацию точек эд =[4.5 з], q2=[2.5 Л и <?3 =[1.5 1.5] относительно невыпуклого полигона Р = {ptpz.-.pi} с верши- нами эд = [1 2], р2 = [2.5 0.5], рз = [2 2.5], р4 = [4 0.5], р5 = [5 4], Рб = [3 3] и р7 = [1.5 4.5] (рис. 1.16). Решение. Для первой тестируемой точки эд = [х] ] вычислим октантные углы векторов Vt = р,- qx и их приращения: Vi -5, V2 = 6, vs = 5, 1’4 = 6, vs = 2, V6 = 5, г? = 4, V8 = 1’| = 5; А, = 1, Дг - -1, Дз = 1, Д4 = -4, Дз = 3, Дб = -1, Д7 = 1. Без коррекции приращения угла на ребре pups сумма октантных приращений равна нулю, что не соответствует внутреннему положению точки. Подставив координаты точки в функцию прямой (1.35, г) ребра p4ps n/2(p4,ps, эд) - 3.5Х| - j, - 13.5 = -0.75 < 0, получим по (1.42, в) скорректированное значение Д» = 4 и скорректированную сумму 5 = 8. Согласно (1.43) точка q{ лежит внутри полигона.
еометрические основы компьютерной графики 39 Для второй точки qi октантные углы и их приращения равны: i’i = 4, V2 = 7, и = 3, V4 = 8, vs = 2, V6 - 2, v? = 3, vg = v, = 4; Ai = 3, Д2 = -4, Аз = 5 = -3, Ад - -6 = 2, As = 0, Аб = 1, A? = 1. Значение функции прямой для ребрар2рз в точке q2 nfl(p2,pi, qi) - 2x2 + 0.5^2 - 5.25 = 7.75 > 0 положительно, поэтому Аг = -4, а сумма приращений октантных углов s = 0. Из (1.43) следует, что точка q2 является внешней. Наконец, для точки qi на первом же ребре pt р2 получим приращение октант- ного угла Д( = 8 - 4 = 4. Подставив координаты этой точки в функцию ребра Р\Рг nf2(px,pi, qi) = 1.5хз + 1.5>'з- 4.5 = 0, заключаем, что точка qi принадлежит границе полигона. □ С помощью суммирования углов можно алгоритмически определить направ- ление обхода вершин полигона. Установим граничную точку в середине последнего ребра p„pt и вычислим алгебраическую сумму углов вращения векторов Е, = Pj-qr? при обходе вершин отр, дор„ (см. рис. 1.13, б). Если общее направление обхода вершин полигона против часовой стрелки, то этот суммарный угол равен л [рад] или +4 октанта. При обходе вершин по часовой стрелке, т. е. в отрицательном направлении, знак суммарного угла отрицателен.
Глава ’ 40 Отсюда получаем два варианта теста dir_test(P) направления обхода веришь полигона Р ~ {pt Р„Р{}, возвращающего знак направления обхода (1— против часовой стрелки, либо -1 — по часовой стрелке): • радианный тест направления обхода cftr_tetf(p)=sgn -<7гр,Р,+1 “«ftp) ; (1.44, а> • актантный тест направления обхода ( н~\ dir _ test (р) = sgn oct _ cor (1.44.6) гораздо более эффективный, чем радианный тест, благодаря целочис- ленным и не итерационным вычислениям. □ Лучевой тест ориентации точки q относительно произвольного полигона Р заключается в выпускании из этой точки в произвольном направлении V луча p(t) -q + И \/l> О и подсчете числа его пересечений с ребрами полигона. Па- раметры пересечения луча с отрезками р, + (д,+,- д,)т V0 < т < 1, непараллель- ными вектору V, находятся по следуемой из (1.30, б) формуле к ' v г' — V/ = \,п. _Р/-Р1+Г (1.45) Анализ параметрических пар {г„ xj дает следующие критерии ориентации точки относительно полигона: • точка является внутренней, если число пар {/, > 0,0 < т, < 1} нечетно (рис. 1.17, а); • точка является внешней, если число таких пар четно, в том числе и равно нулю (рис 1.17,6); • точка лежит на границе полигона, если найдется хотя бы одна пара {/, = 0,0<т,< 1} (рис. 1.17,в). Особенности лучевого теста: • неопределенность числа пересечений при прохождении луча точно через вершину р, при х, = 1 или вершину /?,+| при х, = 0 (рис. 1.17, а, б). Необходи- мо повторить тест заново с другим направлением луча К; • требуется расчет по (1.45) (с плавающей точкой и вычислением обратной матрицы) параметров пересечений луча со всеми ребрами полигона. Обозначим за ray2_lesl(q, Р) функцию лучевого теста ориентации точки q от- носительно плоского полигона Р, возвращающую результат: • -1, если точка находится внутри полигона; • 0, если точка на границе полигона; • 1, если точка вне полигона.
еометрические основы компьютерной графики 41 Блок-схема алгоритма лучевого теста приведена на рис. 1.17, г. Направление луча задается вектором V = [cos(<p) sin(<p)] единичной длины со случайным углом <р - rnd(2n), равномерно распределенным в интервале (0, 2л). Парал- лельность луча и /-го ребра PiPi+l устанавливается тестом (1.21) по нулевому значению определителя обращаемой в (1.45) матрицы. Расчет четности числа пересечений луча с ребрами полигона ведется с помо- щью флажка f, устанавливаемого сначала как для внешней точки в 1 и инвер- тируемого при каждом пересечении ребра лучом. В результате после завер- шения обхода полигона возвращаемое значение f автоматически будет равно 1 для внешней или -1 для внутренней точки. Рис. 1.17
42 Глава ' 1.1.2.9. Алгоритмы пересечения на плоскости П Перенесение отрезка прямой линии ab с отрезком cd. Когда в (1.30, б) ищется пересечение не бесконечных прямых, а их отрезков то кроме проверки непараллельности прямых необходимы дополнительные проверки 0 < г < I и 0 < т < 1 принадлежности точки их пересечения одновре- менно обоим отрезкам. Составим алгоритм расчета точки q и параметров t и * пересечения отрезков ab и ed, возвращающий признак пересечения: • -1, если прямые отрезков параллельны (не пересекаются) или совпадают (точка пересечения не определена); • 0, если непараллельные отрезки не пересекаются; • 1, если отрезки касаются или пересекаются. При непараллельности отрезков возвращаются значения параметров и точке пересечения прямых, на которых лежат эти отрезки. При возвращении значе- ния cross_segm = 1 эта точка одновременно является точкой пересечения от- резков. & cross_segm(ab, cd, t, т, q) V с — d { V=b-a, M = И матрица направляющих векторов если |М| = 0, то возврат -1; [г т]=(с-а)л/ 1; q = а + Г[; возврат {О < t < 1}П{О < т < 1}; ю И тест параллельности прямых // параметры пересечения прямых И точка пересечения прямых И тест пересечения отрезков Максимальная трудоемкость алгоритма составляет 11 операций сложе- ния/вычитания и 10 операций умножения/деления. Сравним эти затраты со вторым вариантом того же алгоритма, основанным на использовании неяв- ных функций (1.35, г). & cross_segm(ab, cd, t, т, q) {fa~nf 2(C d, a), f, = nf 2(c, d, b)', // НФ точек а и b относительно cd fc = nf 2(a, b, c), fd = nf 2(a, b, d)\ И НФ точек с и d относительно ab если f. = fd, то возврат -1; // тест параллельности прямых f f t = ———, т = ———; // параметры пересечения прямых fa-fb fc-fd q - a + (b- a)t; // точка пересечения прямых возврат {faft, < 0}П {fefd - тест пересечения отрезков }О
геометрические основы компьютерной графики 43 Несмотря на кажущуюся простоту второго варианта, его трудоемкость вдвое выше— 41 арифметическая операция, в числе которых 27 сложений/вы- читаний и 14 умножений/делений. Далее с именем cross_segm будем свя- зывать более эффективный первый вариант функции расчета пересечения от- резков. □ Пересечение отрезка ab с полигоном Р = {рх ... рпр\}. Требуется отсечь от отрезка те его части, которые находятся вне полигона (рис. 1.18, а). Здесь мы рассматриваем задачу внешнего отсечения отрезка вы- пуклым полигоном. Другие варианты отсечения обсуждаются в конце этой главы и в гл. 4. Рис. 1.18 На рис. 1.18,6 построена блок-схема алгоритма clip2_cross(ab, Р) отсечения отрезка ab выпуклым полигоном Р, основанного на расчете пересечений пря- мой {а, Ь}, несущей отрезок, с отрезками PiPj+x — сторонами полигона. Алго- ритм возвращает через аргумент ab неотсеченный фрагмент отрезка внутри полигона, а сама функция clip2_cross возвращает признак видимости отрезка ab в "окне" полигона Р: • 0, если отрезок находится вне полигона и целиком им отсекается; • 1, если отрезок весь или частично расположен внутри полигона.
44 Глава 1 Работа алгоритма начинается с инициализации счетчика пересечений к = 0 и вычисления направляющего вектора отрезка V=b-a. Далее выполняется обход ребер полигона PtPt+i Vi = 1, п и расчет пересечений с ними не самого отрезка ab, а несущей его прямой a + (b - a)l с помощью функции cross_segm. Если возвращаемое ею значение не отрицательно и прямая пересекает ребро (это обнаруживается по условию 0 < т < 1), то счетчик пересечений к инкре- ментируется, а параметр I сохраняется в переменной оА.. По достижении двух пересечений (к = 2) дальнейший обход выпуклого полигона прекращается. Концевые точки неотсеченного отрезка [«, Л] рассчитываются с помощью табл. 1.1 в зависимости от значений = Z, и а2 = tj параметра /, при которых прямая пересекла ребра PtPi+\ и р}р1+\. Две ячейки {о|<0,о2>1} и {о, > 1, о2 < 0} соответствуют внутреннему положению отрезка, при котором он не отсекается. В ячейках {о, < 0, о2 < 0} и {о, > 1, о2 > 1} формируются от- резки [а, а] и [Ь, Ь} нулевой длины, которые обрабатываются алгоритмом как полностью отсеченные с возвращением нуля. Остальные ячейки таблицы со- ответствуют частичному отсечению отрезка ab и стягиванию его внешних концевых точек на границу полигона — в точки а + Ео( и а + Ро2. Таблица 1.1 о2 < 0 0 < о2 < 1 а2 > 1 о( < 0 [а, а] [а, а + Ра2] М 0 <о( < 1 [а, а + PcJ [а + Vcst,a + ЕО|] [а + Го,, Л] о( > 1 [«,*] [а + Го,, Л] [М] Естественное завершение цикла обхода вершин полигона означает, что пря- мая отрезка ab либо касается полигона, либо не пересекает его вовсе (рис. 1.18, а). В обоих случаях алгоритм завершается возвращением нуля. Возможно и второе решение задачи отсечения отрезка полигоном на основе выпуклого теста ориентации точки (1.38). Оно представлено на рис. 1.19 блок-схемой алгоритма clip2_test(ab, Р) отсечения отрезка ab выпуклым поли- гоном Р = {р{ ...p„pt}, работающего следующим образом. & Шаг 1. Инициализируем список L= {0, 1}, в который будем записывать значения параметра t е [0, 1] положения точек на прямой p(t) - а + (b - a)t. Начальный состав списка соответствует концевым точкам отрезка а = р(0) и Ь=р(1). Шаг 2. Рассчитываем не более двух пересечений отрезка ab с отрезкамиPiPi+\, i= 1,2,... Значения параметра пересечения t добавляем в список L. Шаг 3. Сортируем список L по возрастанию, после чего точки qk = p(Lk) раз- бивают отрезок ab на непересекающиеся фрагменты общим числом не более трех.
''еометрические основы компьютерной графики 45 Рис. 1.19 Шаг 4. С помощью выпуклого теста ориентации conv2_test определяем внеш- нее либо внутреннее положение каждого фрагмента [%, %+|]са/> относи- тельно полигона по его средней точке (рис. 1.18, а) =a+Lk+Lk+ly к 2 2 Внутренний фрагмент, удовлетворяющий условию corv2_test{mk, Р) = -1, воз- вращается через аргумент ab наряду с признаком отсечения clip2_test = 1. При отсутствии внутреннего фрагмента отрезок отсечен полигоном целиком, а возвращаемый признак отсечения равен нулю. □ Из-за наличия теста ориентации conv2_test алгоритм clip2_test имеет ббльшую трудоемкость по сравнению с алгоритмом clip2_cross, но его идейная основа лучше приспособлена для решения других задач отсечения: • при внутреннем отсечении отрезка выпуклым полигоном (рис. 1.20, а) от- бор неотсеченных фрагментов выполняется по условию их внешней ори- ентации conv2_lest(mlc, Р) = 1. Число таких фрагментов может быть от нуля (весь отрезок лежит внутри полигона) до двух (средняя часть отрезка эк- ранируется полигоном); • при отсечении отрезка невыпуклым полигоном необходимо вместо вы- пуклого теста conv2_test использовать угловые rad_test, oct_lest или луче- вой ray2_test тесты для определения ориентации средних точек фрагмен- тов относительно произвольного полигона. При внешнем отсечении (рис. 1.20, б) отбираются фрагменты, средние точки которых лежат внутри полигона, а при внутреннем (рис. 1.20, в)— фрагменты со средними точ- ками вне полигона.
46 Глава 1 Рис. 1.20 □ Пересечение полигона А = {а, ... anat] с полигоном В = {Л| ... Ь„, Л,}. Требуется найти общую часть полигонов, принадлежащую как А, так и В. т. е. их логическое произведение А &.В. Здесь мы рассматриваем пересечение только выпуклых полигонов. Логические операции с произвольными полиго- нами детально изучаются в гл. 4. Общие принципы расчета пересечения поясним на примере выпуклых поли- гонов А = {«! а2 аз 04 at} и В = {/>, Ь2 Ьз b4 bsbt}, изображенных на рис. 1.21, а. • Сначала функцией clip2_test(aiOn.l, В) X/i = l,n выполняем внешнее отсече- ние ребер полигона А полигоном В, который в этой операции играет роль отсекателя. В результате получаем список отрезков Ls = {qx а2, а2 q2, q3q4}. • Далее функцией clip2_test(bjbj+l, A) = выполняем внешнее отсечение ребер полигона В отсекателем А и добавляем в список Ls новые отрезки 6| ?2,<7l ^4И93&,. • Из элементов полученного списка Ls = {q, а2, а2 q2, q3 q4, q2, q} q4, q3 *,} собираем замкнутый контур соединением отрезков друг с другом совпа- дающими концами. Берем первый отрезок q, а2, а среди оставшихся элемен- тов списка Ls ищем отрезок, любой из концов которого совпадает с точкой а2. Этот отрезок а2 q2 образует с qt а2 цепочку С = {qt а2 q2}. Среди оставших- ся элементов Ls находим продолжение цепочки — отрезок b} q2. После его присоединения к концу С точкой q2 цепочка принимает вид С = {q} а2 q2bt}. Продолжая процесс поиска и присоединения отрезков до полного исчерпа- ния списка Ls, получим окончательный вид замкнутого контура С= {?! a2q2b} q3q4qx}. Если полигоны А и В не пересекаются, то после обоюдного внешнего отсече- ния их ребер список Ls остается пустым, вследствие чего и результат опера- ции А & В пуст.
еометрические основы компьютерной графики Рис. 1.21 Аналогичным образом формируется объединение полигонов А + В (рис. 1.21, б). • Выполнив внутреннее отсечение ребер полигона А отсекателем В, получим список отрезков Ls = , q2 аз, аз ш, ш q3, qtat}. • В результате внутреннего отсечения ребер полигона В отсекателем А до- полняем список Ls отрезками q2 b2, Ь2 Ьз, Ьз qt, qt bt, bt bs и bs qs. • Из одиннадцати отрезков полученного списка Ls формируем замкнутый контур С = {«1 qt Ьз b2 q2 аз at q3 bs bt qtat}. Если полигоны А и В не пересекаются, то их объединение состоит из двух фрагментов, при сборке которых нужно после присоединения очередного от- резка к имеющейся цепочке сравнить ее новый конец с началом. При совпа- дении этих точек первый фрагмент собран. Из оставшихся в списке Ls отрез- ков собираем второй замкнутый контур. Описанный метод сборки нескольких фрагментов из общего списка их ребер применяется при вычислении исключения A -i В полигона В из полигона А (рис. 1.21, в). • Выполнив внутреннее отсечение ребер полигона А отсекателем В, получим список отрезков Ls = {a, q}, q2 аз, аз at, at цз, qt а,}. • Внешнее отсечение ребер полигона В отсекателем А дополняет список Ls отрезками b} q2, ср qt nq3bx. • Из восьми отрезков полученного списка Ls - {а, <?|, q2 аз, аз at, at q3, qta},bx q2, qx qt, q3 b\} собираем первый замкнутый контур С\ = {«1 qx qtaj. Из пяти отрезков, оставшихся в списке Ls= {q2a3, аз at, atq3, btq2, q3bt}, формируем второй фрагмент С2= {q2 аз at q3 b} q2}.
48 Глава 1 Если весь полигон А лежит внутри полигона В, то первые два этапа отсече- ний дают пустой список Ls, вследствие чего и результат операции A -i В пуст. 1.1.2.10. Площадь и геометрический центр полигона Рассмотрим методы вычисления площади S и геометрического центра g полигона Р = {р, ...р„Р\}. О Простейшим полигоном является треугольник {abca} (рис. 1.22). Его площадь может быть найдена несколькими способами [13]: • расчет по формуле Герона 5Д =7л(А-| a-fe|)(A-|fe-c|)(A-|c-a|), требует вычисления длин его сторон |я - Ь\, - с|, |г - а| и полупериметра ^_|а-Л| + |Л-с|+|с-а| 2 ценой четырех итерационных приближенных вычислений квадратного корня. Все эти затраты делают формулу Герона наименее эффективным инструментом расчета площади треугольника; • известная из тригонометрии формула S& = 0.5|Л - а| • |с - а| • sin(Zbac), равносильная половине произведения длины стороны ab на длину высо- ты, опущенной на нее из вершины с, также включает приближенные вы- числения длин векторов У= Ь-а, №=с-аи синуса угла между ними; • сравнение последнего выражения с нормой векторного произведения векторов Г = \Кх ^у о]е ХУ и ~ К Wy о]е ху позволяет записать его в виде Рис. 1.22
Геометрические основы компьютерной графики 49 Введем функцию алгебраической площади треугольника {abca} o(a,b,c)=0.5 b-a с-a = 0.5«f2(a,c,fc), (1.46) сводящуюся к неитерационному вычислению с помощью функции nf2, опре- деленной в (1.35, г), половины значения НФ вершины Ъ относительно сторо- ны ас. Знак алгебраической площади о(«, Ь, с) совпадает как с ориентацией точки b относительно прямой {а, с}, так и с направлением обхода вершин треугольника {abca}. Окончательное выражение площади треугольника принимает следующий вид: S& = |а(а, Ь, с)|. (1-47, а) Геометрический центр треугольника расположен в точке пересечения его ме- диан и делит каждую из них в отношении 2:1. Отсюда получаем 2( Ь + с А а + Ь + с —°J=—5—• (!-47,<Э □ Выпуклый полигон {/?, ...p„pt} после разрезания диагоналями, проведенными из вершины pt (рис. 1.23), представляет собой объединение (п-2) непересе- кающихся треугольников {р\Р2р^Р\} -5- {Р\Рп-\РпР\}, площади которых S, и геометрические центры gi вычисляются по (1.47): Представляя совокупность треугольников системой точечных масс S,, закреп- ленных в точках g, [15], получим площадь и геометрический центр выпуклого полигона: (1.48, б) я-1 л-1 ^SiSi S=2Si,g = ^— 1=2 d Рис.1.23
50 Глава 7 □ Площадь невыпуклого полигона можно вычислить по (1.48,6), выполнив его триангуляцию — разрезание на непересекающиеся треугольники (рис. 1.24, а). Задача триангуляции произвольного полигона достаточно сложна. Некото- рые алгоритмы триангуляции рассматриваются в гл. 4. Между тем, после не- большой модификации метод (1.48) может работать и с невыпуклыми поли- гонами (рис. 1.24, б): Рис. 1.24 Знаки площадей о, треугольников {р, р,р,¥} р,} совпадают с направлениями их обхода. Фрагменты треугольников, лежащие вне полигона, суммируются в (1.49) с противоположными знаками четное число раз, в результате чего их площади взаимно сокращаются. Фрагменты треугольников внутри полигона суммируются с противоположными знаками нечетное число раз. Таким обра- зом, алгебраическая площадь полигона включает площади только внутрен- них фрагментов и только однократно. Геометрический центр полигона также является взвешенной алгебраической суммой центров треугольников с учетом знаков их площадей. Знак алгебраической площади полигона совпадает с общим направлением обхода его вершин. Вот мы и получили самый быстрый тест направления об- хода полигона dir to/(/J)= sgn л-l ' > А'+1’А') I (1.50) имеющий трудоемкость 8л - 15 арифметических операций. По эффективности тест (1.50) даст сто очков вперед полученным в (1.44) радианному и октант- ному тестам направления обхода полигона.
гнеметрические основы компьютерной графики 51 1.1.2.11. Алгоритмы генерирования случайных полигонов 3 процессе создания и отладки алгоритмов компьютерной графики необходимы образцы различных графических объектов, служащие исходными данными для моделирования. Принципиально различаются два типа данных: П задаваемые вручную и позволяющие добиться верного решения задачи при заранее известном ответе. Сложность ручного задания заключается в искус- стве заранее предвидеть все нюансы задачи, поставить нужные цифры в нуж- ное место так, чтобы за минимальное число испытаний пройти по всем вет- вям алгоритма и добиться его правильной работы; □ задаваемые случайно и позволяющие увеличить объем и статистическую дос- товерность работы алгоритма. При большом числе испытаний со случайны- ми исходными данными и хорошо продуманной системой диагностики рано или поздно должны быть обнаружены все имеющиеся в алгоритме ошибки вычислительного характера. Имея в распоряжении функцию rnd(x)— генератор равномерно распределенных случайных чисел (РРСЧ) в интервале (0, х), можно построить генераторы других —ипов случайных равномерно распределенных данных: □ а + rnd(b -а) — генератор РРСЧ в интервале (a, by, □ [п + md(m +1 - w)J — генератор целых РРСЧ в интервале [л, т]; □ Г; = а + rnd(b - a) Xfi = 1, и — генератор случайного вектора V е R”, элементы которого есть РРСЧ в интервале (a, by □ К = [cos(<p) sin(<p)] — генератор единичного вектора на плоскости со случай- ным углом направления <р = глб/(2л); □ V = [sin(<p)sin(v) cos(v) cos(<p)sin(y)] — генератор единичного вектора в трех- мерном пространстве со случайными углами места <р = rnd{2n) и азимута V - rnd{n) (см. рис. 1.1,6). Разработаем два алгоритма генерирования случайных полигонов — системы слу- женного количества (не менее трех) случайных точек на плоскости, последова- ~ельно соединенных друг с другом не пересекающейся замкнутой ломаной лини- ей со случайным направлением обхода вершин. Т Случайный произвольный полигон строится следующим методом (рис. 1.25, а). 2D Шаг 1. Из заданной точки Т как из центра проводим лучи под углами 0° < ср < 360° к оси х. Начальное значение угла ф( = 0°, а последующие углы рассчитываем путем приращения фл+1 = Фл + Дфл на случайные значения Дф„ = rnd(&). Максимальное приращение углов 120° < © < 180° выбираем с таким расчетом, чтобы минимальное число лучей было равно трем.
52 Глава 1 Шаг 2. Вдоль лучей откладываем расстояния r„ = a + rnd(b - a), генерируемые как РРСЧ в интервале (а, Ь). Таким образом, получаем верши- ны полигона Рп=Т+^kos(<p„) sin(<p„)],п = 1,2,... ШагЗ. Генерируем РРСЧ d = rnd(2), равновероятно принадлежащее как ин- тервалу (0, 1), так и интервалу [1, 2). При d> 1 нумеруем вершины полигона Р в обратном порядке. Шаг 4. Возврат Р. □ Воплощая описанный метод в алгоритм, получаем функцию rpoly(T,a,b,®) генерирования случайного произвольного полигона (рис. 1.25, б). и=0, <р=0 >360 n=n+\,r=a+rnd(b-a) — p„=7’+/-[cos(q>) sin(<₽)] <p=<p+rnt/(0) md(2) б Рис. 1.25 Автором проведен статистический анализ числа сторон генерируемых поли- гонов в зависимости от параметра © е {90°, 120°, 150°, 180°} на выборке в 10 000 испытаний. Процентное соотношение n-угольников приведено на рис. 1.26. Соотношение положительного и отрицательного направлений об- хода оказалось очень близким к 1 : 1. П Случайный выпуклый полигон строится следующим методом (рис. 1.27, а). & Шаг 1. Размещаем первую вершину полигона р} в исходной точке Т и за- даем начальный угол ср, = 0°. Очередную вершину рл+|, п - 1,2,... получаем путем проведения из предыдущей вершины ря луча под углом фл+| = фл + Аф,
^метрические основы компьютерной графики 53 со случайным приращением Д<р„ = rnd(&) и откладывания вдоль этого луча расстояния rn = a + rnd(b - a), генерируемого как РРСЧ в интервале (а, Ь). Максимальное приращение углов 90° < © < 180° выбираем с таким расчетом, чтобы минимальное число лучей было равно трем. Рис. 1.26 □ 90 120 □ 150 180 Шаг 2. Полученную точку <1 = Рп + гп 1СО8(фл ) sin (фи Я тестируем, начиная со значения п = 2, на пригодность быть вершиной выпук- лого полигона, т. е. на попадание в заштрихованную область. Точка q долж- на, во-первых, лежать левее прямой {Т,рг}, во-вторых,— правее прямой {рп, Г}. Только при одновременном выполнении этих условий сохраняем точ- ку q как очередную вершину полигона рл+|. Шаг 3. По окончании цикла генерируем РРСЧ d = rn</(2), равновероятно при- надлежащее как интервалу (О, I), так и интервалу [I, 2). При d> I переставля- ем вершины полигона Рв обратном порядке. Шаг 4. Возврат Р. О Воплощая описанный метод в алгоритм, получаем функцию rcpoly(T,a,b,@) генерирования случайного выпуклого полигона (рис. 1.27, б). Гистограммы числа сторон генерируемых полигонов в зависимости от пара- метра © е {90°, 120°, 150°, 180°} на выборке в 10 000 испытаний приведены на рис. 1.28. Соотношение положительных и отрицательных направлений обхо- да оказалось практически равным.
54 Глава 1 Рис. 1.27 Рис.1.28 □ 90 120 □ 150 180 1.1.3. Квадратичные и параметрические кривые Кривые второго порядка (квадратичные кривые) на плоскости описываются ко- ординатным уравнением в НФ f (х, у) — Ах2 + By2 + 2Еху + 2Gx + 2Jy + D = 0 (1.51, а)
Геометрические основы компьютерной графики 55 или в векторном виде /(р)= PFpT = °, где F = A E\G Е__В_ | J G j]D ^1 Al Ai D A=^11- (1.51,6) Вектор нормали к кривой в точке ро е f(p) вычисляется по (1.7, а) путем диффе- ренцирования (1.51): Для любой квадратичной кривой три величины 1}=А+В,12 = |Fn| = АВ-Е2, h = И (1.53, а) называются инвариантами, не изменяющими значения относительно невырож- денных преобразований переноса и вращения, изучаемых в гл. 2. Число A G В J G D +J D /2 - = I}D-G2-J2 (1.53,6) есть полуинвариант относительно преобразования вращения. Знание легко вы- числяемых инвариантов и полуинварианта позволяет быстро определить тип и каноническое уравнение кривой по уравнениям (1.51) и табл. 1.2. Таблица 1.2 11 /3 Невырожденные кривые с 1з * 0 Вырожденные кривые с/з = 0 -^-<0 /1 Действительный эллипс Точка вырожденного эллипса 12 *0 N -с + сч К 1 <3 2 -1 = 0 о II ГЧ N -0 + сч К 1 Q Центральные кривые с Z2*0 -^->0 /1 Мнимый S W W шлипс 2 + 1 = 0 /2 *0 К | Q Г ипербола 2 / \2 -И -1 [b J = 0 Две асимптоты вырожденной гиперболы Z \2 Z ч2 (*] _fz] =0
56 Глава 1 Таблица 1.2 (окончание) Л — Невырожденные кривые с h * 0 Вырожденные кривые с/., = () Нецентральные кривые с 11 = о Парабола , \2 М -z=o 1J /2<0 Две параллельные прямые / \2 (-1 -1=0 1° J Г2 =0 Мнимая прямая / л2 [-) +1=0 1 a J Г2 >0 Одна двойная прямая (-1 +1=0 \а J Неявная форма непригодна для построения кривых и используется для анализа их свойств по инвариантам и расчета пересечений. Исключением являются редкие случаи функций, явно выраженных через одну из координат. Рассмотрим взаимное расположение квадратичной кривой и прямой линии. Под- ставим параметрическое уравнение прямой p(t) -q + Vt в неявное векторное уравнение (1.51,6): f21 ^2Т1 D [q + Vt 1]т= 0 => => (<у + Vt)Fx t(q + Vt)T + 2(g + +0=0. Раскрыв скобки, получим квадратное уравнение at1 + 2bt + с = О с коэффициентами a = VFxxVT, b — (qFxx+F2X)FT, c = qFxlqT + 2qF2X+D. В зависимости от их значений и дискриминанта d = Ьг-ас (1.54) (1.55, а) (1.55,6) (1.55, в)
Геометрические основы компьютерной графики 57 возможны следующие решения задачи пересечения прямой с квадратичной кри- вой (рис. 1.29): □ при {а >0} прямая (1) пересекает кривую в двух различных точках Pi = q + Vtt и р2 = q + Vt2 с параметрами -b-Jd -b+Jd h =-------<ti =-----; (1.56, a) a a П при {а*0}П{</ = 0} прямая (2) касается кривой в единственной точке р, = q + Vtt с параметром -6 г1- —; (1.56,6) □ при {а = 0 }П {б *0} прямая (3) пересекает кривую в единственной точке Р\= q+ Vtt с параметром '|=^Ь (1.56,6) □ при {а = о}Г) {б = 0}П {с = О} прямая касается вырожденной нецентральной кри- вой (прямой линии) в бесконечном множестве точек; □ в остальных случаях прямая (4) не имеет с кривой ни одной общей точки. Рис. 1.29 Параметрическая (Ъорма как самая гибкая и универсальная наиболее распро- странена для описания и построения геометрических объектов благодаря разно- образию выбора функций, задающих движение точки по направлениям ее степе- ней свободы. Параметрическая функция p(t) квадратичной кривой может быть получена следующими способами.
58 Глава 1 □ Заменой аргументов хну канонического уравнения из табл. 1.2 функциями одного параметра (например, t) на основе известных тождеств cos2(/) + sin2(z) = 1, ch2(/) - sh2(/) = 1. Простейший пример— окружность единичного радиуса. Ее каноническое уравнение х2 + у2 - 1 = 0 допускает подстановку x(t) = sin(0, y(t) = cos(Z). □ Суперпозицией одновременных движений точки вдоль координатных осей из заданного начального положения. Например, сложение гармонических коле- баний по осям координат л(0 = cos(/), y(j) - sin(z), записываемое в векторной форме как с(/)= cos(r)x° +sin(t)y° =[cos(/) sin(t)] VO < t < 2л , (1.57) дает вращение точки по окружности единичного радиуса из начального по- ложения л(0) - 1, у(0) = 0 (рис. 1.30, а). Направление вычисленного по (1.7, б) вектора скорости и(г)= [~sin(t) cos(ОН 4) ортогонально влево от вектора с{1) соответствует вращению точки против часовой стрелки. Вращательное движение является основой для построения более сложных транс- цендентных кривых: фигур Лиссажу, спиральных, циклических и полярных. П Фигуры Лиссажу образуются суперпозицией разночастотных колебаний вдоль ортов СК: x(t) - cos(co47), y(l) = sin(co,z) или p(t)= [cos(coJt.r)sin(coJ,/)j. На рис. 1.30, б изображена такая фигура, построенная при соЛ = 4, со, = 7 в ин- тервале изменения параметра t е [0, 2л]. Рис.1.30
Геометрические основы компьютерной графики 59 □ Спиральные кривые описываются моделью p(t) = r(t)c(t) и образуются враще- нием точки по дуге монотонно изменяющегося радиуса г(/). Примеры: • спираль Архимеда (рис. 1.31, а) имеет равномерно увеличивающийся радиус r(t) = го + Г]/; • спираль Бернулли (рис. 1.31,6) образуется при экспоненциально изменяю- щемся радиусе r(t) = roer,t; • радиус параболической спирали, изображенной на рис. 1.31, в, описывается зависимостью r(t) = r0 +rt-Jt . Параметры го — г(0) и rt задают начальный радиус и характеристику его из- менения за один оборот спирали, т. е. за приращение t на 2л. Рис. 1.31 □ Простейшие циклические кривые описываются векторной параметрической функцией /’(О - Ри(0 + rc(tol), (1.58) где pu(t) — траектория переносного движения центра окружности радиуса г, по которой одновременно вращается точка с угловой скоростью со. На рис. 1.32, а изображена циклическая кривая при pa(t) = 3c(t), г = 2, со = 3.5 и t е [0, 4л]. П Многие известные трансцендентные кривые [8, 13] задаются полярной функци- ей г(ср). После подстановки t = (р, х(Г) = r(/)cos(/), y(i) = r(/)si n(/) получим параметрическую функцию кривой p(t) - r(t)c(t). Например: • улитка Паскаля (рис. 1.32,6) описывается следующими соотношениями в неявной, полярной и параметрической формах: (х2 + у2 - ах)2 - Ь2(х2 + у2) = О, г(ф) = а cos(cp) + Ь, p(t) = (а cos(cp) + £)<?(/);
60 Глава 1 • трисектриса (рис. 1.32, в) описывается соотношениями л'2(х - а + b) + j2(.v + Ь) - О, г(<р)= acos(<p)~ Ь cos(<p) , р(/)= acos(r)- Ь cos(/) Рис. 1.32 1.2. Графические элементы в пространстве Точка в пространстве имеет три степени свободы. Расстояние |/л-р2| между двумя точками р\ и ргв разных системах координат вычисляется следующим об- разом: П в декартовой СК </ = V(xi + (У1 -Л'г)2 +(Z1-Z2)2 □ в цилиндрической СК = ^Р? +Р2 _2p|P2cos((P] -фг)+ G1 ~У1У ’> □ в сферической СК d = -J/F+,F~2,l,2(sin(Wl)s'n(W2)+Cos(W|)cos(V2)cos((P| -Фг))4"^! ~У2? Поверхность имеет две степени свободы. Уравнения поверхности в неявной и па- раметрической формах имеют следующий вид: НФ: f(x, у, z) = 0 или f(p) = 0; (1.59, о) ПФ: р(/,т)= [х(/,т) y(t,t) z(/,t)]. (1.59,6)
геометрические основы компьютерной графики Любая реальная поверхность ограничена в пространстве либо в силу своей замкнутости (например, сфера, эллипсоид или тор), либо благодаря системе не- равенств, наложенных на ее координаты или параметры: НФ: z) > 0 или у(р) > 0; (1.60, а) ПФ: т) > 0. (1.60, б) Особенность ограниченной поверхности в том, что при расчете ее пересечения с другим графическим объектом могут быть получены точки или линии, лежащие на поверхности (1.59), но не удовлетворяющие условиям (1.60). Следовательно, результат пересечения должен всегда тестироваться по всем необходимым услови- ям существования. В регулярной точке поверхности р0=[х0 -о]= p(fo,^o) функция p(t, т) не- прерывно дифференцируема по своим аргументам и обладает свойством [13] , ,2 ,, 2 xt yt + zt хт Ут Ут -т d(x,j)/d(/,T) Э(>’,с)/3(/.т) 3(z,x)/3(/,T) *0. Точки поверхности, в которых частные производные д(х,у) d(y,z) d(z,x) d(t,T) ’ д(1,т) ’ равны нулю или не существуют, называются особыми. Эти точки образуют ребра (линии самопересечения поверхности или пересечения двух поверхностей) и вер- :иины (точки пересечения трех поверхностей), где производные не определены. В регулярной точке поверхности ро существует единственная касательная плос- кость (рис. 1.33), описываемая координатными и векторными уравнениями в неявной и параметрической формах: Рис.1.33
62 Глава 1 ЛГх(^-^о)+Л'^6/->’о)+ЛГг(г-го)=О fw°(p-po)=o *х=Л|х у , , Ky=fy\ , ^=/;ix v / PV=V/G’)L 'ХО’ГО’*О Л zlx0,y0,Z0 '*0>Л0’гС ^0 ПФ: (1.61, я) x(t,т)= х0 + Fxt + ИСт,Vx = x.'l , Wx = xJ \ / U X X X tlpo’ X T|po yfa)=y0 +Vyt+WyT,Vy =y't\Po,Hx =^|po. z(z,t)=z0 +rzt + Wzr,Vz =z't\po,^z =z;|po p(z,r)= p0 +rt + WT; = p'A , w = P'x\ ; O-61-6) 'W 'Po VxW *O3. Вектор нормали N = N TV,] направлен в ту сторону поверхности, где f(p) > 0. Направляющие векторы И± N и W± N должны быть непараллельны. Они составляют с нормалью уу = КХ1Е = уг W, wz vx wx vx wx vy Wy (1.62) правую тройку векторов. Это означает, что вращения И—> W, fV-yNnN-yV происходят в положительном направлении, т. е. против часовой стретки с точки зрения наблюдателя, находящегося на конце третьего свободного вектора. 1.2.1. Модели плоскости в пространстве Рассмотрим способы задания плоскости в различных формах. 1.2.1.1. Неявное уравнение плоскости Неявное уравнение плоскости задается четырьмя коэффициентами А, В, С и D, составляющими вектор F = [а ВС !>]: НФ: Ах + By + Cz + D = 0 или [р l]oF = poF = 0. (1.63) Хотя бы одно из чисел А, В или С должно быть ненулевым. Если все коэффици- енты А * 0, В 0 и С 0, то плоскость проходит наклонно ко всем осям коорди- нат, пересекаясь с ними в точках (рис. 1.34, а) , D , D , D пх =---, п.=---, А_ =---. х А у В ‘ С Но, например, при >4=0, и CV 0 уравнение By + Cz + D - 0 описывает плоскость, параллельную оси х и ортогональную координатной плоскости yz- при А *0, В = 0 и С = 0 уравнению Ах + D = 0 соответствует плоскость, ортого- нальная оси х и параллельная плоскости yz. Плоскость /(/>)= Р ° У - 0 проходит через начало координат при f (Оз) = D = 0. Благодаря ее свойству разделять пространство на два подпространства с проти-
~еометрические основы компьютерной графики 63 воположными знаками f (р), неявное уравнение позволяет с минимальными вы- числительными затратами — за три умножения и три сложения — определить по Условию f(q) = 0 принадлежность плоскости произвольной точки q, а также ори- ентацию двух точек а и Ь относительно плоскости: □ при f(a)f (Ь) > 0 эти точки лежат по одну сторону от плоскости; □ при f(a) f(b) < 0 — по разные стороны от плоскости. Для перехода от неявного описания плоскости к следующему нормальному опи- санию необходимо найти любую ее точку ро и вектор нормали N. Сравнивая (1.63) с (1.61, а), заключаем, что координатами вектора нормали можно принять коэффициенты неявного уравнения А, В и С: # = В с]. Приведем два способа получения точки р0 = [х0 у0 z0]. 1. Выберем ее в месте пересечения плоскости с осью координат, соответствую- щей ненулевому коэффициенту в (1.63): 0 — 0 , 0 0—1. п . В J [ С JJI (1.64,67) Несмотря на легкость понимания, этот способ не самый лучший для про- граммирования из-за наличия альтернативы выбора точки в зависимости от коэффициентов А и В. 2. Вычислим ближайшую к началу координат точку ро путем решения МНК- задачи |р|2-р °р -> min с ограничением р ° N + D = 0. Аналогично (1.10,6) решение имеет вид в с]- <‘М0 1.2.1.2. Нормальное уравнение плоскости Нормальное уравнение плоскости {ро, А}, заданной точкой ро и вектором нормали .V, совпадает с (1.12, а) и выводится из условия ортогональности векторов N и ”-ро для всех точекр, принадлежащих плоскости (рис. 1.34,6): НФ: Nx(x - хо) + Ny(y - >о) + Nz(z - zo) = 0 или (p- ро) ° N =0. (1 -65) Зависимость вектора неявного уравнения от параметров нормального уравнения совпадает с (1.13): F = [7V-P00./V]. (1.66) С помощью функции f(p)-(p-po)°N (1.67)
64 Глава 1 можно определить ориентацию точки р относительно плоскости: □ при f(a)>0 точка а лежит в том полупространстве, куда направлена нор- маль, а угол Z(o -ро, N) острый; □ при f(b) < 0 угол Z.(b-ро, N) тупой, а точка b и нормаль находятся по разные стороны от плоскости. Рис. 1.34 Таким образом, плоскость является двусторонней границей, разделяющей про- странство R3 на положительное и отрицательное полупространства в соответст- вии со знаком функции ftp). Назовем сторону плоскости, обращенную в поло- жительное полупространство, лицевой, а обратную сторону — нелицевой. 1.2.1.3. Параметрическая функция плоскости Параметрическая функция плоскости {ро, V, И7}, заданной точкой ро и направле- ниями линейно независимых векторов К и W (рис. 1.35, а), имеет следующий вид: ПФ: х(/,т) = х0 + Vxt + Wxi; y(t,T) = yG+Vyt+ WyT или p(t,i) = po + Vi + tVi; z(t,T) = z0 + Vzt + W,t. (1.68) Условие линейной независимости направляющих векторов эквивалентно усло- вию их непараллельности V х W* Оз. Параметрическая форма удобна для задания как всей бесконечной плоскости, так и ее полубесконечных и конечных частей. Для этого в (1.68) задаются соот- ветствующие интервалы изменения параметров t и т. Например: □ бесконечные интервалы -оо</<оои-а><т<ооне ограничивают протяжен- ность бесконечной во всех направлениях плоскости', П задание бесконечного -оо < t < х и полубесконечного т > 0 интервалов опре- деляет полуплоскость, находящуюся от прямой ро + Vt по одну сторону с век- тором W\
Геометрические основы компьютерной графики 65 □ бесконечный -оо < t < х и конечный 0 < т < 1 интервалы задают полосу шири- ной \W\, протяженную вдоль вектора К; □ конечные интервалы 0 < f < 1 и 0 <т< 1 определяют параллелограмм между четырьмя точками ро,ро + V,po + IV и ро + V+ IV; □ конечные интервалы 0 < г < 1 и 0<т<| дают треугольник с вершинами в точ- ках ро, ро + V и ро + V + W. Переход от параметрического описания плоскости {ро, Г, И7} к нормальному no, N} и неявному {У7} описаниям заключается в вычислении по (1.62) вектора нормали N, а по (1.66) — вектора F: N=VxW,F = [N (1-69) Ортогональность векторного произведения V х W к векторам-сомножителям озволяет использовать его в качестве нормали. Эквивалентная (1.67) функция ZGO = (Z7 — Ро) ° (И х ИО (1.70) определяет ориентацию точкир относительно плоскости {ро, V, И7}: □ при /(<?)> 0 точка а лежит в положительном полупространстве, откуда вра- щение от вектора V др вектора W выглядит положительным (против часовой стрелки). При этом угол /.(а -ро, N) острый; Э при f(b) < 0 угол Z.(b -ро, N) тупой, а точка b находится в отрицательном по- лупространстве (с нелицевой стороны плоскости). Более сложной является неоднозначная обратная задача выбора подходящих направляющих векторов на основе единственного вектора нормали (рис. 1.35,6). Выберем произвольный вектор Н, не параллельный N, например, любой из коор- динатных ортов co°#2V, где со е J7}, и по свойству ортогональности векторов в векторном произведении получим желаемое решение: Н = if ()V || х° : у°, х°), V=HxN*Oi, W=Nx Г* Оз. (1-71) Рис. 1.35
66 Глава 1 1.2.1.4. Уравнения плоскости, проходящей через три точки Неявная форма уравнения плоскости, проходящей через три точки а, b и с (рис. 1.36,«), выводится из условия принадлежности плоскости этих точек и точ- ки р = [х >>]: Выбрав направляющие векторы плоскости V-b-aw W = с- b, получим пара- метрическую модель плоскости, проходящей через три точки: ПФ: p(t) = а + (b - a)l + (c-b)t. (1.72,6) Условие существования плоскости следующее: |7V] * 0 или (Ь - а) х (с - Ь) * Оз. Это означает, что три точки не должны лежать на одной прямой. Эквивалентная (1.70) функция f(p) = (p-a)°((b-a)x(c-b)) (1 73) позволяет вычислить ориентацию точки р относительно плоскости {«, Ь, с} При ftp) > 0 точка р лежит в положительном полупространстве, откуда обход тре- угольника {abca} выполняется против часовой стрелки. Ниже рассматриваются свойства многогранников (полиэдров), обусловленные ориентацией векторов нормалей к их граням. С учетом принятого соглашения (1.8), внешняя ориентация нормалей к граням полиэдра обеспечивается при обходе его граней против часовой стрелки, если смотреть на каждую грань из внешнего полупространства. 1.2.1.5. Уравнения плоскости в отрезках Неявное уравнение плоскости в отрезках hx, hy и h., одновременно не равных ну- лю и отсекаемых плоскостью на осях л, у и z (рис 1.36, б), получим аналогично (1.16): нф: 'Г+й“ + 'Г_1 =° F = hxhy -hxhyhz\. (1.74,а) Пу Выбрав на плоскости точки a=[hx 0 0], 6 = [о hy б], с = [0 0 hz], получим ее направляющие векторы r=b-a = [-hx hy б], W =c-b = [о -hy Лг],
'еометрические основы компьютерной графики 67 я по (1.72, б) — координатные и векторную функции: ПФ: х(/.т) = Лх(1-/); = или p(t)=[hx(\-t) hy(t -i) h,x] (1.74,6) z(t,i) = hzx. 1.2.1.6. Модели линии в пространстве Линия в пространстве имеет одну степень свободы и является либо пересечением ^вух поверхностей, либо кинематическим следом движения некоторой точки в -ространстве. Соответственно, имеем две формы модели пространственных линий'. НФ: {/iG0= 0}n{/2G,)= °); ПФ: /?(/)= [x(z) 4) 4)1 Неявная форма требует решения системы нелинейных уравнений относительно координат х, у, z точки р и для практического применения неудобна. Парамет- рические функции прямой линии в пространстве в векторном виде полностью совпадают с (1.14,«) и (1.15, б): p(l) = ро+ Vt и р{1) = ро + (b- а)1. В координатном виде они дополняются аппликатами z(t) - zo + V.t и z(l) = zo + (b, - a.)l. Получим уравнения прямой как линии пересечения двух плоскостей (рис. 1.37). Рис. 1.37
68 Глава 1 (1 75) П В неявной форме плоскости заданы векторами F(=[^ О]] и F2=\n2 D2], Прямая их пересечения p(t) =ро + Vt имеет неизвестные элементы ро и V. Для их нахождения запишем систему двух уравнений плоскостей (1.63): [р 1]Н _°1 D2. Полученное векторное уравнение эквивалентно недоопределенной системе двух скалярных уравнений с тремя неизвестными, не имеющей единственного реше- ния. Прямоугольная матрица |tV|T N2 ]е R3x2 не обращаема. Получим бли- жайшее к началу координат МНК-решение, минимизируя функцию Лагранжа 3(р, Л) = 0.5(р о р) + Л о <р(р>), в которой X е R2 — вектор множителей Лагранжа, а <р(р)=рк ]+[Р) D2] есть соответствующая (1.75) векторная функция связи координат точки р. Диф- ференцируя 5(р, Л) по векторным аргументам, получим систему уравнений ^1' Л2. ^2 Подставляя решение первого уравнения д%(р,Л)/др = p + Л dQ{p,X)/dX = p[V|T = o3; ]+[d, d2]=o2. (1.76) p = -A во второе, получим вектор множителей Лагранжа А = Ь1 *2]] • Подстановка его в первое уравнение (1.76) дает МНК-решение уравнения (1.75): К Ро = -[d, Я,]! hT №>r] N2. (1.77) = -[/?! Г>2] Щ o/V, о TV2 N\°N2 n2 ° n2 n2 Если обе плоскости заданы в НФ элементами {рю, N\} и {рж,№}, то в (1.77) следует подставить D\ ~ -рю ° Ni и D2- -ртя ° №. Направляющий вектор прямой ортогонален обеим плоскостям: К = № х №.
'еометрические основы компьютерной графики 69 Условие существования решения V* Оз есть также и условие невырожденно- сти обращаемой в (1.77) матрицы: MW -(^1 °Af2)2 = H2N2(’ -cos2(zy^2))= = |7V| |21#212 sin 2 (ХУ] W2) * 0 • Это означает, что плоскости не должны быть параллельными. П В параметрической форме плоскости заданы точками рю, рго и направляю- щими векторами V\, JVi, V2 и W2 (рис. 1.37). Параметры рю и V искомой пря- мой определяются путем перехода (1.66) к неявным формам плоскостей и ре- шения задачи (1.77). 1.2.2. Взаимное положение графических элементов в пространстве Рассмотрим некоторые полезные формулы, тесты и алгоритмы, описывающие гвойства и взаимное расположение точек, прямых, плоскостей и многогранников полиэдров) в пространстве. 1.2.2.1. Коллинеарность точек Три точки pi, р2 и рз коллинеарны, если (рг-рО X (p.3-pi) = Оз или I(p2-pi) о (p.3-pi)| = |p2-pi| • |рз-р1|. (1-79,«) Обобщение на произвольное число точек pi -г рп: rang Pl Pl = 2 или rang Р1~Р\ РЗ~Р\ = 1 _Рп_ Рп~ Р\. (1.79,6) Проверка принадлежности точки р отрезку ab выполняется по тесту (1.18), а зна- -ение параметра t, соответствующее положению точки р = а + (b - a)t на прямой относительно отрезка ей, вычисляется по (1.19). 1.2.2.2. Компланарность точек Четыре точки р\,рг,рз и рь компланарны, т. е. лежат в одной плоскости, если Р\ Р2 Рз Р4 = 0 ИЛИ ((рг-pi) х (рз-pi)) о (P4-P1) = 0. (1.80)
70 Глава 1 Размерность пространства R'", натянутого на п точек pt р„, вычисляется на ос- нове определения ранга матрицы как числа ее линейно-независимых строк или столбцов: т — rang Р\ Р1 -1 = rang Р1~Р\ Рз~Р\ <т!п{з, п-1}. (1.81) РП. Рп~ Р\_ 1.2.2.3. Точка и прямая Рассмотрим расположение лючки q и прямойp(t) = ро + Vt (рис. 1.38, а). Точка принадлежит прямой, если Н - Оз, где Н = (q-ро) х V. Уравнение перпендикуляра, опущенного из точки q на прямую, имеет вид: p_i.(Z) = Q + ^±1, где = Н х V. Расстояние от точки q до прямой выражается следующей формулой: d = |<7-po|sin(a)=|(9-po)xp| (1.82) (1.83) (1.84) IM КГ Уравнения плоскости, проходящей через точку q ортогонально прямой, имеют вид: НФ: ^of±=0,F±=[k -q°r]; ПФ: pv(t, т) = q + Vj + Ят. (1.85) 1.2.2.4. Точка и плоскость Рассмотрим расположение точки q и плоскости (рис. 1.38, б). Точка принадлежит плоскости, если НФ: q°F = 0; ПФ: (q-po) о (V х IV) = 0. (1-86) Параметрические уравнения перпендикуляра, опущенного из точки q на плоскость. имеют вид: НФ: Pi.(l) = q + Nl; ПФ: pjj) = q + Nt, N = V * W. (1.87) Расстояние от точки до плоскости находится так: d = |prw (<? - ро )| =|(? - Ро )° W|= |(<7 - Ро )° Р х И''] • 88) Зеркальное отражение точки q от плоскости расположено на перпендикуляре к плоскости на расстоянии 2d от q в сторону, противоположную проекции вектора q-ро на нормаль N, и вычисляется по формуле (1.26, а).
Геометрические основы компьютерной графики 71 Уравнения плоскости, проходящей через точку q параллельно заданной плоскости, следующие: НФ: =0, Л[| =[# ПФ: /?ц(/,т)=9 + К/ + И/т. (1.89) Рис. 1.38 1.2.2.5. Построение плоскости, наименее удаленной от совокупности точек Рассмотрим задачу, связанную с понятием расстояния от точки до плоскости. Допустим, в R3 задано т > 3 произвольных точек р\ + рт. Так как в общем случае точки не компланарны, то не существует ни одной плоскости f(p) = 0, для кото- рой все числа J, = f (рд обращаются в ноль. Другими словами, расстояния |J,| / |7V] отточекр, до этой плоскости, вычисленные по (1.88) и пропорциональные dh не могут быть одновременно все нулевыми (рис. 1.39). Рис. 1.39
72 Глава 1 Алгоритм построения аппроксимирующей плоскости {ро, N}, наименее удаленной от совокупности точек р„ аналогичен двумерному алгоритму, полученному в (1.29). Применительно к размерности пространства п - 3 он имеет следующий вид. & Шаг 1. Сформируем из точек р, т х 3-матрицу Р и найдем их геометрический центр с: Р\ 1 т L^pi- mi=\ Р = (1.90, а) \_Pm_ Шаг 2. Вычислим собственные значения Xi, Хг, Хз и соответствующие им норми- рованные собственные векторы Nt, N2, № симметричной 3 х 3-матрицы М = тсТс-Р7Р. (1-90,6) ШагЗ. Определив собственную пару {ХА, Nk} с максимальным значением ХА = тах{Х,}, получим элементы вектора F = pV Z?] неявного уравнения иско- мой плоскости (1.63): N=Nk,D = -N°c. (1.90, в) □ Вместо неявной формы плоскости можно использовать ее нормальное уравнение (р - с) о W = 0. Для построения более удобна параметрическая форма p(t, т) = с + Vt + Wt, направляющие векторы которой Си Wнаходятся по (1.70). Оставшиеся две собственные пары матрицы М дают плоскости, ортогональные оптимальной (при различных собственных числах) и пересекающиеся с ней в геометрическом центре точек с. & Пример 1.4. Построить плоскость, наименее отклоненную от точек (см. рис. 1.39) Р1=[1 0 2], р2 = [4 3 4], р3 = [б 3 1], р4 = [5 5 0], р5 = [4 1 1]. Решение. Следуем шагам алгоритма (1.90). Шаг 1. Р = 1 4 6 5 4 0 3 3 5 1 2 4 1 0 1 2.4 1.6]. Шаг2. М = 5с1с-РхР = -14 -И 4 -11 -15.2 3.2 4 3.2 -9.2 1 5
t еометрические основы компьютерной графики 73 Xi = -3.475, 7V, = [- 0.74 0.65 -0.15]; Хг ——4.865, TV2 = [0-073 0.304 0.95]; Хз = -27.06, N3 =[-0.67 -0.69 0.27]. Шаг3.&= 1, W = [-0.74 0.65 -0.15], D = 1.64. Таким образом, аппроксимирующая плоскость описывается неявным уравнением -0.74* + 0.65у - 0.15z + 1.64 = 0. _1тя получения направляющих векторов выберем вектор Н = [1 0 о], не парал- лельный вектору N. Тогда по (1.70) получим направляющие векторы К = [0 0.15 0.65], И7 = [0.45 0.49 -0.11] и параметрические функции плоскости x(t, т) = 4 + 0.45т, X - 2.4 + 0.15г + 0.49т, z(t, т) = 1.6 + 0.65Z - 0.11т. Алгебраические расстояния от заданных точек до этой плоскости равны J =0.594, <72 = 0.026 (точка рг почти лежит в плоскости), г/з = -1, Л = -0.632 и лз = -0.82, а минимум функции Лагранжа составляет 3min = 3.475. О 1.2.2.6. Взаимное расположение двух прямых Исследуем расположение в пространстве двух прямых pi(h) = рю + Viti и л(гз) = р2о + Vi ti (рис. 1.40). Прямые совпадают, если К =03}n{V|| = О3},где Гх= Ki х V2, 7V|| =(р20~Р\0)хК1 • (1.91) Прямые параллельны, если Кх - Оз. Расстояние между параллельными прямыми равно ^ = j(/?2O_/’lo)x^j О-92) Уравнения плоскости, проходящей через две параллельные прямые, имеют вид: НФ: poFj|=0, F|। = [1V11 _Pio°^||]> (1-93,fl) ЛФ: p(t,x)= рю + (р2о-рю)1 + V]t. (1-93,6) Прямые лежат в одной плоскости при (р2о-рю) ° = 0. Угол их пересечения равен у = arccos (и 1 ° И 2) (1 -94) и представляет собой неотрицательный угол кратчайшего вращения от вектора 1 к вектору Vi, видимого со стороны ортогонального им вектора V± = V\ х Vi. Уравнения плоскости, проходящей через две пересекающиеся прямые, имеют вид: НФ: p°Fx=0, Fx = [k± P1O°K1J; (1.95,с)
74 Глава 1 ПФ: p(t, т) = р\о + V\t + Уп. Точка пересечения прямых находится аналогично формуле (1.30, б): q — рю + KiZi =/>2о + Viti, г 1 / л т т1 Г -и о^Т1 где Н1 г2]-(р2О_Р1о)г1 _f/2j ., ., ., ., (1.95, б) (1.96) Прямые ортогональны, если У\ ° Иг = 0. Прямая, соединяющая скрещивающиеся прямые по кратчайшему пути, имеет на- правляющий вектор И± = И1 х Иг и проходит ортогонально им обеим через точки qi = рю + Till, qi =/>го + Viti. Параметры ti и ti находятся по формуле (1.96). Уравнение кратчайшей прямой есть />j_(Z) = q\ + У±1. Кратчайшее расстояние между скрещивающимися прямыми равно Рис.1.40 (1.97) 1.2.2.7. Взаимное расположение прямой и плоскости Рассмотрим расположение прямойpi(t) - рю + V\t и плоскости (рис. 1.41). Прямая принадлежит плоскости, если НФ: =0}П{р10оИ = 0}; (1.98, а) ПФ: {у} о(ихИ/)=0}П{(р|о-/’о)0(^х^) = 0}. (1.98,6) Прямая параллельна плоскости, если НФ: И1оДг=0; ПФ: И|О(ИхИЭ = 0. 0") Расстояние от прямой до параллельной ей плоскости равно d = |(ао ~ Ро)° = |(Р1 о - Ро)° r xWZ| • (1.100)
еометрические основы компьютерной графики 75 Прямая ортогональна плоскости, если НФ: И1х/У = Оз; ПФ: И х (Их И7) = Оз. (1.101) Одной из основных задач компьютерной графики является расчет точки пересе- ления произвольной прямой с плоскостью, аналогичный расчету (1.30) пересечения двух прямых на плоскости: НФ: (9-ро)°Лг = О (р0-pi0)°N (po~Pio)°n iz . => t —-----------=> q — рю "I----------И , 9 = Рю + 1/1/ р1оДГ (1.102, а) ПФ: q =рю + Ии =ро + Ит + WQ, где [/ т б]=(ро-Рю) (1.102,6) -W Условие существования решения: У\ ° N*0 — прямая не параллельна плоскости. Угол между прямой и нормалью к плоскости находится аналогично (1.94): Л = arccos ° arccos^o ИхМ7). (1.103) Уравнения плоскости, проходящей через прямую ортогонально заданной плоско- ~ти, имеют вид: НФ: роЕ±=0,где Fx = ^x-p1o<’Ar±L^±= И х^ (1.104,а) ПФ: р(г,т)=рю+ Иц/ + (Их №)т. (1.104 6) У -ловие единственности решения: Hi х W * Оз — прямая не ортогональна плоскости. Р« Рис. 1.41 1.2.2.8. Две плоскости Исследуем расположение в пространстве двух плоскостей (см. рис. 1.37). Плоскости совпадают, если НФ: {л,1Х^2=ОзЮ{(Р20-Ло)°л;2=0}; (1.105, а) ПФ: {(И|хИ'1)х(И2хИ'2) = 03}П{(р20-/’1о)°(^х»2) = 0}. (1.105,6)
76 Глава 1 Плоскости параллельны, если НФ: Мх№ = Оз; ПФ: (Hi х Ил) х (И2 х IV2) = Оз. (1.106) Расстояние между параллельными плоскостями равно ^ = |(Р20-/’1о)оЛГ1| = |(Р20 -Рю)°И х*н|- (1.107) Плоскости ортогональны, если НФ: МоДГ2 = 0; ПФ: (Ki х WY) ° (И2 х 1И2) = 0. (1.108) Одной из основных задач компьютерной графики является расчет прямой пересе- чения двух плоскостей, выполненный в (1.75)-(1.78). Здесь дополнительно при- ведем формулу для вычисления угла пересечения плоскостей, аналогичную (1.94): у = arccos^[ ° N2)= arccos^ хИ) ° И2 х РИ2 ) • (1.109) Уравнения плоскости, проходящей через точку ро ортогонально двум плоскостям. имеют следующий вид: НФ: р о = 0, где F± = [Wx_Po °^±]> = Ni х N2", (1.110, а) ПФ: p(t, т)-ро + (И| х Wi)t + (И2 х ГИ2)т. (1.110,6) 1.2.2.9. Пучок плоскостей и биссекторная плоскость Уравнения пучка плоскостей, заключенных между двумя плоскостями (рис. 1.42, а). имеют вид: НФ: роГЛ+1 =0, гдеЛ+i =(1-X)Fi+ XF2; (1.1 И,я) ПФ: a+i(z,t) = (1 -М(Рю+ H.Z+ И'1т) + Х(р20+ У21+ ^2t). (1.111,6) Изменение параметра пучка в интервале 0 < Л < 1 дает такие промежуточные по- ложения плоскостей, что вращение нормалей происходит по кратчайшему углу от начального положения N\ до конечного положения N2. Модели (1.111) представляют собой линейные комбинации точек исходных плоскостей, соответ- ствующих равным значениям параметров t и т. Параметры диссекторной плоскости получаются из (1.111) при Л = 0.5 и уравни- вании длин векторов, определяющих исходные плоскости: Ибис = |№|Fi + |М |И2, Ибис = I и2| И| + I Vi IИ2, 1Ибис = IW\ + | Wi | W2. (1.112) Расчет биссекторных плоскостей бывает необходим, например, при построении сферы, вписанной в четырехгранник. Ее центр о лежит в точке пересечения трех биссекторных плоскостей внутренних телесных углов, примыкающих к одной из треугольных граней, а радиус г есть расстояние от точки о до плоскости любой грани, вычисляемое по (1.88).
>: метрические основы компьютерной графики 1.2.2.10. Пересечение плоскостей ' чка пересечения трех плоскостей (рис. 1.42, б) определяется из условия ее при- надлежности этим плоскостям: 4Ф к Пк ?2 ^3Т]=Оз^ Рх=-к D2 D3][^t Nj /Vj]-';(l.ll3,a) 1Ф: Ру=[р|0°^1 Р20 ° ^2 РЗО ° ^з! 1мТ ^2 ^3 ] , М = х И7/- (1.113,6) сювие существования единственного решения |^т N2 Nj| * 0 — линейная независимость нормалей плоскостей, что равносильно существованию и попар- ~?й непараллельности линий пересечения плоскостей. Рис. 1.42 71? формулам (1.113) рассчитываются вершины полиэдра как точки пересечения эскостей трех смежных граней. ~ ?е сечение п плоскостей в одной точке рх, вычисляемой по (1.113) на основе па- раметров первых трех плоскостей, возможно при условии rang[^ F2 ... F„T]=3, аккумулирующем требования совместности системы линейных уравнений в 13. о), предъявляемое теоремой Кронекера—Капелли [8—10] о равенстве ран- матриц [с/ F2 ... F„t]h [v]T N2 ... ], и единственности ее решения, •’ределяемой полнотой ранга матрицы [л^ N2 ... Л^], который должен •ль равен трем. 1 2.2.11. Модель полиэдра “ереходим к изучению полиэдров — замкнутых пространственных объектов, ог- раниченных плоскостями. Среди объемных тел полиэдры занимают такое же . лое место, как и полигоны среди плоских фигур. Благодаря планарности всех
78 Глава ' граничных поверхностей полиэдра существенно упрощается расчет его пересече- ний с различными геометрическими примитивами и другими полиэдрами. По- мимо того, что в природе существует множество собственно полиэдральных объектов (пять правильных многогранников, призмы, пирамиды и т. п.), чаете криволинейные граничные поверхности аппроксимируют системой полигональ- ных граней, что превращает гладкие объекты в полиэдры. Подробное изучение свойств полиэдров отложим до гл. 3, а здесь приведем наи- более оптимальную модель полиэдра Н - {Р, G}, состоящую из двух массивов: П координатного списка пв вершин Р = {/?], ... ,р„в}, пронумерованных в произ- вольном порядке. Благодаря однородности элементов списка может быть удобнее организовать и использовать вершины полиэдра в виде матрице, вершин в нормальной или расширенной формах (применяется в преобразова- ниях, изучаемых в гл. 2): □ топологического массива списков пГ граней G = ]Gi,..., Gn? j. Элемент массива G, ={?,], ..., gin , g/i} представляет собой список номеров (целочисленных ин- дексов) tij вершин полигона /'-ой грани, перечисленных в порядке их обхода по замкнутому контуру. В рамках такого метода организации структуры данных полиэдра доступ к ег< конкретной вершине с номером gy осуществляется в два этапа. 1. Из списка G, считывается j-ый элемент v = gy. 2. Из списка Р считывается элемент pv. Массив G содержит сведения о порядке соединения ребрами вершин полиэдра, описанных в списке (матрице) Р. При этом описание каждого ребра, соединяю- щего вершины р, и pj, дважды встречается в списках граней либо в виде последо- вательности {..., i, j,...}, либо как {...,у, i,...}. Для примера построим модель полиэдра, состоящего из пв = 11 вершин и пг = 7 гра- ней (рис. 1.43): 0 0 3 3 5 2 2 2 4 0 4 4 5 0 0 0 0 6 6 0 4 4 0 1 1 0 0 6 0 ,G = {G1,G2,...,G7}, (1-115) где 0 6 6 0 G, = {1, 2, 3, 5,1}, G2 = {2, 3.10, 7, 6, 2}, G3 = {З, 4, 5, з}, G4 = {3, 4, 9.10,3}, G5 = {7,8,9,10, 7}, G6 = {5, 4,9, 8,11,1,5}, G7 = {1, 2, 6,11,1}
еометрические основы компьютерной графики 79 Рис. 1.43 Зля работы с полиэдрами нам будут необходимы две функции, возвращающие: □ полигон вершин i-ой грани полиэдра {Р, G}: side(P,G,i)=\pgii... PgjnjPgi}}', (l.l 16) Т. вектор нормали к плоскости полигона Р - {pi ...р„р\} е R3: norm(P) - (pz - pi) х (рз - pi). (1. 117) Пространственная ориентация плоскости полигона задается направляющими векторами V = pi-p\, W - рз-рзи нормалью N- V х W по первым трем некол- -меарным вершинам р\,р2 ирз. Со стороны внешнего полупространства, в кото- рое направлена нормаль, обход вершин полигона выглядит положительным, роисходящим против часовой стрелки (см. рис. 1.36, а). Зля обеспечения внешней ориентации нормали i-ой грани полиэдра Nj = Vt х Wj = norm(side(P, G, i)) (1. 118) аужно руководствоваться следующими правилами: Т вершины в списке G, должны перечисляться в положительном направлении с точки зрения внешнего наблюдателя; □ если полигон грани не выпуклый, то первые три вершины должны составлять выпуклый угол; □ если направление нумерации вершин в списке G, оказалось отрицательным, то следует перенумеровать их в обратном порядке: С/—{g/b Sin,Si2’ &il}’ ГТ если нормаль к какой-либо грани не вычисляется по (l.l 18), а задается внешне ориентированной вручную, то направление обхода вершин в списке этой грани безразлично.
80 Глава ‘ С учетом сказанного скорректируем некоторые списки в (1.115) так, чтобы вы- числяемые по (1.118) нормали ко всем граням полиэдра стали внешними: G2 = {2,6,7, 10, 3, 2},G4 = {3, 10, 9,4,3}, G6= {1,5,4,9, 8, 11, 1},G? = {1, 11,6,2, 1}. 1.2.2.12. Тесты свойств графических элементов в пространстве Рассмотрим тесты, основанные на свойстве сепарабельности плоскости f(p) = (. разделять пространство на два подпространства с противоположными знакам. /(Р). П Тест ориентации точки р относительно плоскости заключается в проверке зна- ка числа f(p), для вычисления которого в зависимости от способа задания плоскости в разд. 1.2.1 используется соответствующая неявная функция nf ♦: ttfF{F,p)= p°F\ (1.119, а, nfN(po, N,p) = (р-ро) ° N\ Р-Ро п/пфо>^г,р)=(р-Ро)°(1/><яг)= V W р-а nfl(a, b, с, р)=(р-а)° ((б -а)х(с-7>)) = b-а (1.119, б) (1.119, в) (1.119,г) с-Ь Дополнительно определим еще одну функцию ориентации точки р относи- тельно плоскости полигона Р-{р\рзрз ...p„pi} е R3: P-Pt nfG(P,p)=(p-pi)onorrnfaр2р3}) = р2 -р, РЗ~Р2 (1.119, d) Внешнее полупространство, в которое направлена нормаль плоскости, назы- вают положительным согласно знаку всех определенных выше функций nf ♦ > 0. Для доказательства построим к плоскости {ро, V, нормаль N = V х W, выберем точку q - ро + Vt + Wi + KN, которая при X > 0 лежит во внешнем полупространстве, и вычислим, например, значение (1.119, б): nfN(po, N,q) = (Ft + Wx + KN) ° N = (У o N)t + (И7° N)x + K(N°N) = > 0. To, что величина f(q) не зависит от координат t и т, отсчитываемых вдоль направляющих векторов V и W, означает, что поверхности постоянных уров-
'-.'метрические основы компьютерной графики 81 ней f (р) проходят параллельно плоскости f(p) = 0 и также являются плоско- стями. Как следствие, получим расстояние от точки q до плоскости, равное и обобщающее (1.88). Ввиду простоты вычисления функция f(p), реализуемая на практике одной из функций nf* в (1.119), идеально подходит для сортировки точек относительно плоскости на внешние, внутренние и лежащие на ней. Тест ориентации приме- няется в алгоритмах, связанных с обработкой точек, вершин полигонов, а так- же во многих других трехмерных задачах вычислительной геометрии. □ leer пересечения плоскости f(p) = 0 с полиэдром Н — [Р, G}, имеющим список вершин Р= {/?],...,/>„}, идентичен двумерному аналогу (1.36) с блок-схемой, изображенной на рис. 1.9, в и применимой с точностью до имени функции: cross3(f, Р) - {3 1 <j <i<n :f(p,) f(p)<0}. (1.120) Плоскость пересекает полиэдр, если существует хотя бы одна пара вершин ‘PnPj}, лежащих от нее по разные стороны. Свойство сепарабельности плоскости позволяет по разным знакам значений НФ /(р,) и f(p^ обнаружить вершины полиэдра р, и рр лежащие по разные стороны от пересекающей его плоскости. Если же не найдется ни одной па- ры разносторонних вершин, то пересечение отсутствует. Функция (1.120) возвращает 1 как признак пересечения. В отсутствие оного тест возвращает -1, а при касании полиэдра с плоскостью вершиной, ребром или гранью — зна- чение 0. □ Тест выпуклости полиэдра Н - {Р, G}, заданного списками вершин Р = {pi, ...,р„} и граней G = {G....G,,,}: conv3(P, G) = {sgn(n/G(side(P, G, i),ру)) = const} V/ = 1, m, j = 1, n: jiGr G 121) У выпуклого полиэдра нет нн одной пары вершин, лежащих по разные сторо- ны от любой грани (рис. 1.44, а). Напротив, в невыпуклом полигоне всегда найдутся грань G, и пара вершин {р,,рА}, находящиеся по разные стороны от плоскости этой грани (рис. 1.44, б). Свойство сепарабельности плоскости по- зволяет обнаружить у полиэдра невыпуклую грань 77, = side(P, G, I) по проти- воположным знакам чисел nfG(JIi,p^ и п/СЩ^р,} в вершинах р^П, и рк ё IJh не входящих в состав грани 77,. Наилучший, по мнению автора, алгоритм тестирования выпуклости полиэдра представлен блок-схемой на рис. 1.44, в и в цикле i = \,m использует два флажка, сигнализирующих о наличии вершин слева (флажок Г) и справа (флажок г) от плоскости i-й грани 77 = side(P, G, z). В начале внешнего цикла обхода граней оба флажка сбрасываем в ноль. Во внутреннем цикле обхода вершин р} вычисляем значение s - nf G(TI,p^. Вершину сг = 0, лежащую в
82 Глава 1 плоскости грани, пропускаем, а при 5^0 инкрементируем один из флажков:. при 5 < 0 или г при j > 0. Тут же по условию I • г 0 проверяем наличие любой пары вершин, лежащих по разные стороны от плоскости грани. Если это ус- ловие выполняется, то тест немедленно завершается, возвращая 0 как признак невыпуклости полиэдра. После нормального окончания внешнего цикла пе- ребора вершин алгоритм convi возвращает значение 1 — признак выпуклости полиэдра Н. Рис.1.44
еометрические основы компьютерной графики 83 1.2.2.13. Тесты ориентации точки относительно полиэдра Рассмотрим тесты ориентации точки q относительно полиэдра Н = {Р, G}, задан- -ого списками вершин Р - {pi, и граней G = {Gi,G,,,}. □ Выпуклый тест сотЗ _ test (у, P,G) = -1, если fi < О V/ = 1, т\ 1, если 3/ 6 [1, т]: fi > 0; (1.122) 0, если не ±1 аналогичен плоскому тесту (1.38) и определяет положение точки относитель- но выпуклого полиэдра с одинаково ориентированными нормалями (например, всеми внешними) по знакам неявной функции (1.119, <Э) f=nf G(nh q), где 77, = side(P, G. i). Все внутренние точки <?Вну лежат с одинаковых сторон от всех граней ГЦ. Для юбой внешней точки qKHe всегда найдется пара граней 77, и Пр относительно которых она расположена с разных сторон. Наконец, все точки, не идентифи- цированные как внутренние или внешние, считаются граничными точками qr?, расположенными на гранях, ребрах или вершинах выпуклого полиэдра. Алгоритм выпуклого теста conv3_test функционирует согласно блок-схеме, показана на рис. 1.45. Рис. 1.45
84 Глава 1 В соответствии со знаком числа 1, возвращаемого тестом для внешних точек, назовем внешнее пространство полиэдра положительным. Внутреннее про- странство будем считать отрицательным по знаку числа -1, возвращаемого ал- горитмом для всех точек из этого пространства. Все точки на границе полиэдра (в вершинах, на ребрах или гранях) дают нулевой результат тестирования. П Габаритный тест gab3 _ test(q, Р) = {х g [xnlin, xmax ]}U{y Й [vmin, >’nlax ]}U{z g [zmin, zmax ]} (1.123, a) определяет по возвращаемому значению gab3__test = 1 гарантированную не- принадлежность точки q произвольному полиэдру Н = {Р, G} путем сравнения ее координат с габаритными параметрами полиэдра. Тест (1.123, а) легко обобщается на случай полиэдра со списком вершин Q — {</1,..., q,„\. имеющего габаритные параметры = min{</„}, ^.min - min{gf>.}, = min{<7,.}, qxnm - max{qix}, qymax = max{^0.}, = max {<?,.}: (1.123,6) gab3 _ poly(Q,P) = IJ (k1JIllax < ^min Ю {<7(i)min > ^max }) ШЕ{х,Х,2} П Лучевой Зй-тест аналогичен плоскому варианту (см. рис. 1.17, г) со следую- щими изменениями: • генерируется вектор V е R3 со случайными углами места <р = rnd(2n) и ази- мута \|/ = rnd(n) (см. рис. 1.1,6); • по (1.102, б) рассчитываются параметры [г, т, oj и точка с, = ^ + Кг, пе- ресечения лучаp(t) = q + Vt X/t > 0 с плоскостью z-ой грани П, - side(P, G, i): • блок проверки условий 0 < т, < 1 заменяется тестом ориентации точки с, относительно полигона z-й грани. Для /7, в виде параллелограмма это {О < т, < 1}П{О < Oj < 1}, для треугольника — {0 < 0, < т, < 1}. В результате получается алгоритм ray3_test(q, Р, G) лучевого теста ориентации точки q относительно полиэдра Н - {Р, G}, блок-схема которого приведена на рис. 1.46. В общем случае для проверки принадлежности точки произвольно- му плоскому полигону применяются 26-тесты ориентации (1.38)—(1.45). Предварительно выполняется преобразование системы координат так, чтобы фронтальная плоскость ху совпала с плоскостью полигона. В гл. 2 рассматри- вается алгоритм MAPI расчета матрицы такого преобразования Ск. В изме- ненной системе координат x'y'z' становится возможным применять плоские тесты ориентации. Обозначим результат такого теста ле {-1,0, 1}. Решение о принадлежности точки полиэдру выносится на основе следующих правил. Точка не принадлежит полиэдру, если число пар {/, > 0, г, = -1} равно нулю или четно. Точка лежит внутри полиэдра, если число этих пар нечетно. Точка принадлежит границе полиэдра, если имеется хотя бы одна пара {/, = 0, л, < 0}.
^метрические основы компьютерной графики 85 хлгоритм ray3_test, использующий 2с1-тест rayl_test, так же возвращает числа -1,0 или 1 в соответствии с принятым решением о расположении точки. Все не- достатки плоского лучевого теста присущи и его пространственному аналогу. Особенно это касается случаев пересечения лучом ребра или вершины полиэд- ра, когда требуется повторить тест с новым случайным направлением луча V. Пространственный вариант углового теста отсутствует из-за неопределенно- ;ти геометрического понятия знака телесного угла. 2.2.14. Алгоритмы пересечения в пространстве “ Пересечение отрезка ab с плоским Зй-полигоном Р. Когда ищется пересечение не просто прямой с плоскостью, а их частей — от- резка с полигоном, то параметрическая форма решения (1.102,6) предпочти- тельнее неявной (1.102, я) благодаря возможности проверки принадлежности точки q отрезку ab по условию 0 < / < 1, а полигону Р по плоскому тесту ори- ентации. Последнее тестирование выполняется в измененной системе коорди- нат. в которой плоскость полигона Р является фронтальной. Составим алгоритм расчета точки q и параметра t пересечения отрезка ab с плоским полигоном Р - {р\ ...p„pi}. Алгоритм возвращает через свое имя iross_side признак пересечения: • -1 — отрезок и полигон параллельны (не пересекаются) или их плоскости совпадают (точка пересечения не определена);
86 Глава 1 • 0 — непараллельный отрезок не пересекается с полигоном; • 1 — непараллельные отрезок и полигон касаются или пересекаются. В двух последних случаях через аргументы функции возвращаются параметр t и точка пересечения q. & cross_side(ab, Р, t, q) {Н - b-a, V = p2-pi, W = рз-рг, N=VxW; если N ° H = 0, то возврат -1; И направляющие векторы // нормаль к плоскости полигона // тест параллельности (1.99) -а // расчет параметров пересечения -W q = а + Hr, возврат {О < t < 1 }П{qe Р}; И точка пересечения прямой с плоскостью И тест пересечения отрезка с полигоном } О □ Пересечение отрезка ab с полиэдром Н = {Р, G}, заданным списками вершин Р = {^i, ...,р„} и граней G = {Gi,..., G„,}. Требуется отсечь от отрезка те его части, которые находятся вне полиэдра Здесь мы рассматриваем задачу внешнего отсечения отрезка выпуклым поли- эдром. Другие виды отсечения обсуждаются в гл. 4. На рнс. 1.47 приведен алгоритм clip3_cross(ab, Р, G) внешнего отсечения отрез- ка ab выпуклым полиэдром {Р, G}, основанный на расчете пересечений пря- мой {а, Ь}, несущей отрезок, с плоскостями граней полиэдра. Он возвращает через имя сИрЗ_сгол$ признак ориентации отрезка относительно полиэдра: • 0 — отрезок целиком отсечен полиэдром и находится вне его; • 1 — отрезок весь или частично расположен внутри полиэдра. Через аргу- мент ab возвращаются концевые точки не отсеченного полиэдром фраг- мента отрезка [a, Z?]. Эти точки рассчитываются с помощью табл. 1.1 в зависимости от значений = tj и С2= tj параметра t, при которых прямая пересекла грани G, и Gj. Две ячейки {о < 0, 02 > 1} и {о > 1,02 < 0} соответствуют внутреннему положе- нию отрезка, при котором он не отсекается. В ячейках {oi < 0,02 < 0} в {oi > 1,02 > 1} формируются отрезки [а, а] и [b,b] нулевой длины, которые интерпретируются алгоритмом как полностью отсеченные с возвращением нуля. Остальные ячейки таблицы соответствуют частичному отсечению от- резка ab и стягиванию его внешних концевых точек на границу полиэдра. Естественное завершение цикла обхода граней означает, что прямая отрезка ab либо касается полиэдра, либо не пересекает его вовсе. В обоих случаях ал- горитм завершается возвращением нуля.
fметрические основы компьютерной графики 87 Рис. 1.47 Возможно и второе решение задачи отсечения отрезка полиэдром с использо- ванием выпуклого Зб-теста ориентации (1.122). Оно представлено на рис. 1.48 блок-схемой алгоритма clip3_test(ab, Р, G) отсечения отрезка ab выпуклым по- лиэдром Н = {P,G}. Алгоритм возвращает такие же результаты, что и рас- смотренный выше алгоритм clip3_cross. Его идейная основа и словесное опи- сание аналогичны 2<1-варианту clipl_test отсечения отрезка полигоном •см. рис. 1.19), в связи с чем они здесь подробно не излагаются. Отметим лишь .'гтичия Зб-алгоритма: • в цикле с переменной i перебираются грани полиэдра, а не ребра полигона; • пересечение отрезка ab с i-ой гранью П = side(P, G, i) рассчитывается функцией cross_side(ab, П, t, q), возвращающей в случае пересечения при- знак cross_side = 1 и соответствующий параметр t е [0, 1]; • используется определенный в (1.122) Зб-тест conv3_test ориентации точки относительно выпуклого отсекателя. Несмотря на то, что алгоритм clip3_test имеет большую трудоемкость в срав- нении с алгоритмом clip3_cross (дополнительно выполняется от одного до
88 Глава i трех тестов conv3_test), его идейная основа лучше подходит для решения дру гих задач отсечения: • при внутреннем отсечении отрезка выпуклым полиэдром (рис. 1.49, а) от- бор неотсеченных фрагментов выполняется по условию их внешней ориен- тации conv3_test(nik, P,G)= 1. Число таких фрагментов может быть от н\ ля (весь отрезок лежит внутри полиэдра) до двух (средняя часть отрезка экранируется полиэдром); • при отсечении отрезка невыпуклым полиэдром нужно вместо выпуклого теста conv3_test использовать лучевой тест ray3_test для определения ори- ентации средних точек фрагментов относительно произвольного полиэдра При внешнем отсечении отбираются фрагменты, средние точки которых лежат внутри полиэдра, а при внутреннем — фрагменты со средними точ- ками вне полиэдра (рис. 1.49, б). clipi_test(ab,P,G) ________2L_________ ________1 k=0. l=b-a.L=‘.()li L=sqrt(L) -----------►<*=!...jiz • ’ * ’ ’ т i=l...size(G) ^-end ► c=cross_side(ab,side(P, G,i),t,q) I- 4 <1 — k=k+l, t —> L <2 —2 Рис.1.48 °4-4Л<\ c —-n a a i /и=а+0.5(Л* + Lk+I)V c = conv3_tesi(m, P,G) — >0 — ab={a+LkV,a+Lk+y } Возврат {c=-l} 1 ft 6 Рис.1.49
~еометрические основы компьютерной графики 89 1.2.3. Квадратичные и параметрические поверхности Поверхности второго порядка (квадратичные поверхности) описываются урав- - ением в неявной форме с векторным аргументом: Лр)=р Г р7 =0, де А Е Q\H Е В G \ J Q G С | К (1-124) F2, D ЛТ1 = ^11 . ^12 =/=21- юрмаль и матрица касательной плоскости в точке ро g f(p) в соответствии с 61, а) и (1.66) равны - 2(P0Fl 1 + ^21 )> '?кас = к-А)°'Ч- (1.125) Для любой квадратичной поверхности четыре величины / = А + В, /2 = Е В G A Q В G С+ Q С (1.126, а) h = |Fn|, h = |f] «ваяются инвариантами относительно преобразований переноса и вращения, а «ела '2 = И В G J н + D А В J J D Q + н с к К D ’ А Е Н (1.126,6) О II + Q н с к к D + Е В J Н J D уть полуинварианты относительно преобразования вращения. Они позволяют эютро определить тип и каноническое уравнение поверхности по уравнению 124) с помощью табл. 1.3, 1.4.
Таблица 1.3 Л Невырожденные поверхности, Л + 0 Вырожденные поверхности, /4=0 /4 > 0 /4 < 0 /i/з > 0 Мнимый эллипсоид Действительный эллипсоид Точка вырожденного эллипсоида Центральные поверхности, И /2 > 0 (х/а^+О/й)2 + (с/с)2+ 1=0 (х/а)2 + (у/й)2 + (с/с)2-1=0 (х/д)2 + (у/й)2 + (с/с)2 = 0 /з*0 /i/з < 0 или /2<0 Однополостный гиперболоид Двуполостный гиперболоид (х/а)2-(у/й)2+(с/с)2+1=0 Конус вырожденного гиперболоида (х/а)2 - 0/й)2 +(=1с? =0 Нецентральные Гиперболический параболоид Эллиптический параболоид Цилиндры и пары плоскостей поверхности, /з = 0 (х/аУ -(y/b)-(z/cf =0 (х/а)2-(у/й)+(с/с)2 =0 (табл. 1.4) Таблица 1.4 /з' h h > 0 /2<0 /2 = 0 Цилиндры, Д * 0 и rang(F) = 3 Эллиптический (x/a)2 + (с/с)2 -1=0 Г иперболический (х/ст)2 - (с/с)2 -1 = 0 Параболический (х/а)2 + (c/cf =0 Пары плос* костей, rang(F) = 2 Прямая пересечения плоскостей (х/а)2 + (с/с)2 = 0 Пересекающихся (х/а)2-(с/с)2 =0 Параллельных (х/аУ -1=0 /з=0 rang(F) = 1 Совпадающих (х/а)2 = 0 Глава
Геометрические основы компьютерной графики 91 Неявная форма неудобна для построения поверхностей и используется при анали- зе их свойств по инвариантам и решении задач пересечения методом трассиров- ки лучей. Исследуем взаимное расположение квадратичной поверхности {F} с прямой линией q. И] и с плоскостью {q, V, IV}. □ Первая задача фактически решена в (1.54)—(1.56). Анализируя варианты ре- шения квадратного уравнения at2 + 2bt + с - 0 из (1.55) с коэффициентами а ~ ^11^Т> = 1 + ^21 ХТ> с = ЧГ\ 1(?т + ^-Ч^п + D и дискриминантом d — Ь2- ас, заключаем: • при {а*0}А{б/>0} прямая пересекает поверхность в двух различных точ- ках р\ - q + Vt\ и pi - q + Vti с параметрами • при {а*0}П{б/ = 0} прямая касается поверхности в единственной точке р\= q + Vt\ с параметром -Ь zi —; а • при {а = 0}П{б^0} прямая пересекает поверхность в единственной точке р\ - q + Vt\ с параметром -с Л-----; 1 2b • при {а = 0}П{/> = 0}П{с = 0} прямая касается нецентральной поверхности в бесконечном множестве точек; • в остальных случаях прямая не имеет с поверхностью ни одной общей точки. □ Подставим параметрическое уравнение плоскости p(t, т) = q + Vt + Wt в не- явное векторное уравнение квадратичной поверхности с матрицей F из (1.124): (д + Vt + lVr)Ft i(q + Vt + (Vt)T + 2{q + Vt + FTt)^ +0 = 0. (1.127) После упрощения получим квадратичное уравнение связи параметров / и т в скалярном или матричном видах t at2 + Ьт2 + 2еП + 2gt + 2jx + d=0 и б(/,т)= [г т]© (1.128, a) т = 0
92 Глава со следующей симметричной матрицей 0 и коэффициентами a, b, d,e,gu j: а 0= е е g b j j d. a = EF1IET, b^WF^W1, d = qFllqr +2qF2}+D, e = FFuJVT, g=(qFli+F2i)F\ J =(qFll+F2i)WT (1.128,6) S Налицо полная аналогия (1.128) с уравнениями (1.51) квадратичных кривых на плоскости. Вычислив по (1.126) инварианты h+h и полуинвариант Г- матрицы О, по табл. 1.2 определим тип кривой пересечения квадратичной по- верхности с плоскостью: • действительный эллипс, гипербола и парабола образуются в большинстве случаев сечения плоскостью криволинейной квадратичной поверхности (эллипсоида, параболоидов, гиперболоидов, цилиндров и конуса); • мнимый эллипс и мнимая прямая означают отсутствие пересечений и каса- ний поверхности и плоскости; • точка вырожденного эллипса означает касание поверхности плоскостью е точке; • две асимптоты вырожденной гиперболы образуются при сечении конуса плоскостью, проходящей через его вершину; • две параллельные прямые образуются при сечении цилиндра плоскостью параллельной его оси; • одна двойная прямая образуется при касании плоскостью нецентрально? поверхности. В тех случаях, когда неявное уравнение в (1.128, а) может быть приведено к явному виду t = <р(т) или т = \|/(z), возможно получение явных ПФ />(т) - ро + Еф(т) + Wz или p(l) = ро + Vt + HAp(z) пространственных кривых пересечения плоскости с квадратичной поверхно- стью. Иначе необходимо найти параметрические зависимости t = ф(о) и т = у(о). Тогда кривая сечения будет описываться ПФ р(т) = ро + Тф(о) + Bty(o). Параметрическая форма p(t, z) поверхности второго порядка может быть поле- чена следующими способами. □ Заменой аргументов х, у, z канонического уравнения функциями двух пара- метров (допустим, t и т) на основе известных тригонометрических тождеств cos2(z) + sin2(z) = 1, ch2(z) - sh2(/) = 1. Простейший пример — сфера единичного радиуса. Ее каноническое уравне- ние х2 + у2 + z2 - 1 = 0 допускает, например, подстановки x(t, т) = sin(z),p(G т) - cos(z)sin(T), z(t, т) - cos(z)cos(t).
еометрические основы компьютерной графики 93 Гораздо более сложен поиск подстановок для произвольного уравнения вто- рого порядка. Данная задача решается методом геометрических преобразова- ний канонической поверхности в заданную, с которым можно ознакомиться, например, в [10, 26, 32]. Л Суперпозицией одновременных движений точки вдоль координатных осей из определенного начального положения. Например, сложение гармонических колебаний x(t, т) = sin(z) и z(t, т) = cos(z) вдоль осей х и z с независимым от них равномерным движением y(t, т) = т вдоль оси у дают боковую поверхность кругового цилиндра. Если движение вдоль оси у сделать зависимым, например, y(l, т) = йт, то получим цилиндрическую винтовую линию с шагом 2л й. Деталь- ное изучение кинематического метода построения параметрических кривых и поверхностей продолжим в следующих главах. Эбязательными элементами параметрической формы являются интервалы изме- -ения параметров гит, необходимые и достаточные для описания точек всей по- ?ерхности или любого ее желаемого фрагмента. :еалистичное изображение гладкой поверхности на экране дисплея — сложная ждача, состоящая в передаче ее формы за счет правильного расчета освещенно- ~и видимых точек. Упрощенное построение поверхности заключается в изо- бражении ее каркаса— совокупности линий, передающих форму поверхности. Для этого выполняется дискретизация непрерывных параметров t — to, h, ..., t„, Т = То, Т|,..., т,„, * организуются вложенные циклы вывода на экран каркасных линий p(t„ т) и Л г, т7). Пересечение линий дает ячейки треугольной или четырехугольной формы. Наиболее простое изображение непрозрачной поверхности заключается в за- крашивании всех точек видимой ячейки постоянным цветом, соответствующим освещенности усредненной точки ячейки, например, ее центра. Существуют и более сложные методы закраски поверхностей, некоторые из которых будут рас- смотрены в гл. 3. Основные трудности некинематического подхода к составлению уравнений квад- ратичных поверхностей: Д невозможность описания единственным векторным уравнением гиперболиче- ских и двуполостных поверхностей из-за постоянства знака функций ch(z) > О и р > 0; □ назначение интервалов изменения параметров, обеспечивающих существова- ние и единственность поверхности в желаемой области пространства; Д выбор из множества вариантов функций подстановки, обеспечивающих вычисление нормали = p't х р'Т к поверхности во всех ее регулярных точках; □ неизвестный заранее вид каркасной сетки {p(th T),p(t, Ту)}, выясняемый только после практического построения поверхности.
94 Глава ' На рис. 1.50 с помощью программы MathCAD построены некоторые квадратич- ные поверхности из табл. 1.3, 1.4 по их каноническим уравнениям с численным^ значениями масштабных коэффициентов a - \,Ь — 2ис = 3: Рис. 1.50 П действительный эллипсоид (рис. 1.50, а): p(z,x)= [asin(Z)sin(x) 6cos(Z) csin(Z)cos(x)] ze[o, л], те [о, 2л]. (1.129, с.
еометрические основы компьютерной графики 95 Как пример неудачной подстановки приведем другую модель эллипсоида cos(t) bt с sin(x) (1.129,6) ze [-1,1, те [о, 2л], у которой частная производная -aZ cos(t) -ct sin(x) ----z— ----1 не вычислима в точках [о +Ь о] при t = ±1, хотя нормаль 2V(z,t) = - bc^l-t2 cos(t) act at sin(x) существует во всех точках поверхности эллипсоида, а при t = ±1 вычисляется вручную разрешением неопределенности типа 0/0; □ однополостный гиперболоид (рис. 1.50,6): />(z,t)= [ach(/)sin(r) 6sh(z) cch(z)cos(x)] ze (—°o,°o), те [о, 2л]; (1.130) 71 двуполостный гиперболоид (рис. 1.50, в) с матрицей F = diag 1_ 2 -1 Ь2 описывается двумя параметрическими функциями верхней (+) и нижней (-) полостей: р(г,т)= [ash(Z)sin(T) ±Ach(z) csh(Z)cos(T)] ze [0,oo), те [0,2л]; □ эллиптический конус (рис. 1.50, г): p(z,t)= [az sin(T) bt cZcos(t)] ze (—°0,00), те [о, 2 л]; (1.131) (1.132) □ седловая поверхность гиперболического параболоида (рис. 1.50,6) наиболее удачно описывается в параметрической форме как р(/, т) = [az sin(T) - bt2 cos(2t) ze [0,°o), те [0,2л]. (1.133, a)
96 Глава В учебниках и справочниках [13,26] ошибочно приводятся параметрически модели гиперболического параболоида типа p(z, т) = [az сЬ(т) bt2 cZsh(x)] / е (-оо, °°), те (-«>, °°), описывающие его поверхность только в половине пространства. Правильна было бы составить отдельные выражения для верхних и нижних полосте (рис. 1.50, е): azch(x) bt2 cZsh(T)j — верхние правая илевая, ] (1.133, с aZsh(x) -bt cZch(T)] — нижние передняя изадняя. Эти полости соединяются друг с другом на вычислительно недоступных (Z —> ±=с асимптотических прямых |х/«| = |z/c|, что не позволяет изобразить всю повер' ность как единое целое. Следовательно, модель гиперболического параболоид. (1.133, б) во всем проигрывает модели (1.133, я) и является неверной; П эллиптический параболоид (рис. 1.50, ж): p(z,x)= [aZsin(T) bt2 /е[0,°°), те [0,2 л]; ct cos(t (1.13- П эллиптический цилиндр (рис. 1.50, з): р(/,т)= [asin(T) bt ccos(t)] ze (-moo), те [о, 2л]; П параболический цилиндр (рис. 1.50, и)\ p(z,T)=[aT bt ст2] z е (—о°, оо), т е (—°°, оо). & Пример 1.5. Классифицировать поверхность, описываемую неявным урав нением f (х, у, z) = 2х2 + у2 - 3z2 + xz - 2у + z - 1 = О, и линию пересечения этой поверхности с плоскостью, заданной отрезками /гч = 3 hy.= 2 и h. — 1, отсекаемыми ею на осях координат. Решение. Составим по (1.124) матрицу поверхности и вычислим ее инварианты: F = ’4010 0 2 0 -2 10-61 0 -2 1 -2 h = 0, Z2 = 4 0 0 2 + 2 0 0 -6 + 4 1 1 -6 = -29, 4 1 /3=2 5 1 -б 50, Z4 = И = 192. По классификации, приведенной в табл. 1.3, это соответствует поверхности о<- нополостного гиперболоида, плоскими сечениями которого могут быть эллипс парабола или гипербола.
еометрические основы компьютерной графики 97 Сформируем по (1.74, б) параметры описания плоскости Ро = [3 0 о], К = [-3 2 0], JK = [-3 0 1] и вычислим коэффициенты квадратного уравнения (1.128): a = 44, b = 24, е = 33, g = 40, j = 32, d = 34. По его инвариантам Л = 68 > 0, h = -33 < 0, h = -98 < О : помощью табл. 1.2 определяем, что линия пересечения является гиперболой, описываемой неявным уравнением 22/2 + 12т2 + 33/т - 40Z - 32т +17 = 0. Задав величину ЛЛ = 4, мы получим в сечении гиперболоида плоскостью параболу ; уравнением 36г2 + 25т2 + 60zt - 68г - 59т + 31 = 0 и инвариантами 1\ = 122 > 0, h = 0, h = -392 < 0. При hx = 5 сечение дает эллипс 54г2 + 42т2 + 95zt -104г- 94т + 49 = 0 с инвариантами Л = 192 > 0, h = 47 > 0, h = -768 < 0. □ 27 Пример 1.6. Построить тень каркаса пирамиды с вершинами Р1=[з 4 -1], р2=[1 4 2], р3=[5 3 2], р4 = [2 2 о] ча поверхности эллипсоида с полуосями г, = 2, ry = 1, г. = 3 и центром в точке -=[-2 1 -2]. Источник света удален в бесконечность в направлении 1=[4 2 1] (рис. 1.51). ешение. По каноническому уравнению эллипсоида из табл. 1.3 и заданным па- раметрам получим неявное уравнение А2 У-су 2 -1 = 0 => 9х2 + 36у2 + 4z2 + 9х - 18j + 4z + 52 =0, > по (1.124) следующую матрицу Fи ее блоки: 9 0 0 18 ' 0 36 0 -36 0 0 4 8 18 -36 8 52 0 36 0 0 0 4 18 , F2)=[18 -36 8],Z) = 52. 9 0 0
98 Глава 1 Рис. 1.51 Так как в квадратном уравнении (1.55) коэффициент a(p) = LFnLT = 292*0 не зависит от расположения точки р, то пересечение луча р- Lt с квадратичной поверхностью определяется знаком дискриминанта d(p) = ЬЦр) - а(р) с(р) с ко- эффициентами Ь(р) = -(рЛ 1 + ^21Х-Т = -8 - 34х - 72j> - 4z, с(р) = pF\iPJ +2pFi\ +D=9x2 +36y2 + 4z2 + 36*-Uy + 16z +52 . Вычислим дискриминанты и действительные точки тени для четырех вершин пирамиды , . 6(A)+ , w. —Л. P,=Pi+------—------6 V/ = l,4: «(А> b(pi) = -400, c(pi) = 517, d(pi) = 9036 > 0 => р{ =[-1.177 1.911 -2.044]; b(pi) - -376, c(pi) = 496, t/(p2) = -3456 < 0; 6(рз) = -412, с(рз) = 613, d(pi) = -9256 < 0; Ь(рГ) = -224, f(p4) = 160, = 3456 > 0 => p\ = [-0.263 0.868 -0.566]. Отрицательные значения d(pi) и d(pi) означают, что лучи, проходящие через вершины pi и рз, не пересекаются с поверхностью эллипсоида. Следовательно, ребра пирамиды pi pi, р\ рз, pipy Pi pt и рз pt, инцидентные этим вершинам, не могут полностью проецироваться на поверхность. □ В общем случае тень прямолинейного отрезка р,р} на криволинейной поверхно- сти может быть одной линией, разрываться на несколько линий или вообще от- сутствовать. Концы отрезка могут не иметь тени, а внутренние его точки могут,
“"еометрические основы компьютерной графики 99 например, ребро pi рз. Предлагается следующий численный метод расчета криво- тнейной тени каркасного объекта, ребра которого в общем случае — криволи- нейные отрезки. Метод гарантирует достоверное построение тени каркасного объекта на произвольной квадратичной поверхности, а при достаточно частой дискретизации ребер — гладкость изображений криволинейных теней. Шаг 1. Ребра каркаса разбиваются на достаточно малые прямые отрезки. Шаг 2. Для каждого отрезка вычисляются дискриминанты его концов и dj. Шаг 3. Если {dj > 0}Г| {dj> О}, то по (1.56, а) рассчитываются ближайшие к источ- нику света точки , bj+y[dj , bj+-Jdj Pi = Pi +---Pj=Pj+------------L at aj пресечения лучей pt-Lt и Pj-Lt с квадратичной поверхностью. В противном .лучае тень отрезка отсутствует. Шаг 4. Рассчитывается изображение отрезка прямой p'jp'j на экране дисплея. О 1.3. Основные задачи геометрической оптики Построение компьютерного изображение трехмерных объектов и сцен основано -л методе трассировки лучей, моделирующем процесс распространения световых лучей от момента их испускания источниками до взаимодействия с объектами сцены и попадания в приемник. Основная идея метода сводится к повторению на ЭВМ всех геометрических преобразований, которые бы совершил световой луч .ч а пути источник — объект — приемник (глаз наблюдателя). Хотя действитель- -ых лучей бесконечно много, обычно ограничиваются трассировкой выбороч- -ых лучей, достаточных для достижения желаемой реалистичности изображения -лены— совокупности объектов и окружающего их интерьера. Например, для •'зображения полностью видимого отрезка прямой линии достаточно проведе- -ия всего двух лучей через его концевые точки. Расчет тени отрезка на криволи- -ейной поверхности требует проведения большого числа лучей через внутренние очки отрезка. Эти точки должны быть выбраны с такой дискретностью, чтобы оманая линия (изображение тени отрезка) выглядела гладкой дугой. Ключевая задача метода трассировки лучей — определение освещенности произ- =ольной точки поверхности и части световой энергии, содержащейся в отражен- -ом и преломленном лучах. Освещенность создается первичной энергией источ- -иков света и вторичной энергией лучей, отраженных от других объектов сцены. Отсутствие освещенности означает затененность точки. Существование и интен- сивность вторичной энергии определяются оптико-механическими свойствами материалов— прозрачностью, цветом, шероховатостью и отражательной спо- собностью поверхности.
100 Глава 1 Для каждого луча решается задача пересечения с объектами сцены. Распростра- няясь прямолинейно, луч либо проходит мимо всех объектов и покидает про- странство сцены, либо пересекает первый встретившийся на его пути объект. В точке пересечения часть световой энергии поглощается материалом поверхно- сти, а оставшаяся часть энергии первичного падающего луча претерпевает рас- щепление на вторичные лучи — отраженный и преломленный. Соотношение по- глощенной, отраженной и преломленной энергий луча определяется большим числом факторов. Это и физико-механические, и оптические свойства материала поверхности, и ее ориентация в пространстве, и спектральный состав луча, и т. д., и т. п. Каждый из вторичных лучей распространяется до пересечения со следующей по- верхностью, порождая третичные лучи, и т. д. Любое взаимодействие с поверх- ностью уменьшает суммарную энергию отраженных и преломленных лучей. По- глощение энергии происходит также при распространении луча в не абсолютно прозрачной среде. Таким образом, через определенное число столкновений с по- верхностями объектов интенсивность луча становится меньшей некоторого по- рогового значения и отслеживание процесса его распространения прекращается. Абстрагируясь от волновой природы оптического излучения, будем руково- дствоваться законами геометрической оптики [16]: прямолинейности распростра- нения луча в однородной среде (принцип Ферма), отражения, преломления и об- ратимости хода светового луча. Наибольшую сложность расчета взаимного положения луча с произвольной поверхностью имеют задачи пересечения, отра- жения и преломления. Рассмотрим в общих чертах содержание и алгоритмы ре- шения задач геометрической оптики. 1.3.1. Пересечение луча с поверхностью Принцип прямолинейности распространения света в однородной среде позволя- ет построить алгоритм расчета пересечения луча с ограниченной поверхностью, изображенной на рис. 1.52. Рис. 1.52
еометрические основы компьютерной графики 101 & Шаг 1. Рассчитываются все точки q'j пересечения луча p(t) = q + Vt, t > О : неограниченной поверхностью. Для этого решается скалярное уравнение f(q + Vt) = О относительно параметра t, если поверхность задана в НФ уравнением f(p) = 0. Если она определена параметрической функцией р(т, 6), то решается векторное •равнение q + Vt = р(т, 6) относительно трех параметров t, т и 6. Отсутствие действительных решений t означает, что несущая луч (/) прямая не пересекает поверхность. Шаг 2. Список полученных точек <?' сортируется по возрастанию значений th и «з него исключаются элементы с Z, < 0, не принадлежащие лучу. Если оставшийся писок пуст, то луч (2) не пересекает поверхность. Шаг 3. Ищется ближайший к началу списка элемент, для которого выполняются оловия у(<?')>0 или у{т„ 6,} > 0 принадлежности точки <?' ограниченной по- зерхности. Невыполнение любого из этих условий означает, что луч (3) не пере- текает поверхность внутри ее границ. Найденный элемент является искомой точ- «ой q' на луче (4). □ Рассмотрим вычислительные аспекты расчета пересечения прямой с поверхно- стью. Точное аналитическое решение уравнений f (q + Vt) = 0 или q + Vt = р(т, 6) зчззможно лишь для некоторых простейших поверхностей первого (плоскость в НФ или ПФ) и второго (в НФ) порядков. Эти решения получены в (1.102) и 3d- зарианте (1.54)—(1.56). Пересечение луча q + Vt с более сложными поверхностя- ми находится численными методами. Рассмотрим некоторые из них. Корни скалярного уравнения f(q+ Vt) - 0 можно найти любым известным чис- *енным методом решения нелинейных уравнений [13, 19]: проб, касательных, :екущих, итераций и т. п. Простейший для программирования и не требующий зачисления производной d f I At метод проб заключается в трассировке луча от течки q в направлении вектора Vс шагом Az. В точках траектории Pi = q + Vt, = q + iVM, i = 0, 1, 2,... -еявная функция поверхности имеет значения f=f(pd Первый же найденный нтервал [l„ z,+,], на котором выполняется условие ff-ц < 0, пропорционально дробится точкой (0) = lz+ik +lzk/+i 1ФЫ са два интервала [t„ т(0)] и [т(0>, /,+,]. Из них выбирается интервал [z',z-+]] с разно- дачными концевыми значениями НФ, для которых /(z,')/(z'+1) < 0. Дихотомиче-
102 Глава ский процесс дает последовательность значений {т<Л>} и заканчивается при дос тижении желаемой точности е по аргументу |т,Л+|> - т<*>| < е или (и) функци, |/(т<Л+|>)-/(т<*))| < е. Основные проблемы метода: П компромиссный выбор шага Аг: достаточно малого, на котором не будет че^ ного числа пересечений лучом поверхности, ограничивающей малый объем, в то же время достаточно большого для получения приемлемого машинног времени расчета; П необходимость ограничения пространства распространения луча габарит сцены на случай, если пересечения не существует. Параметрическая форма поверхности р(т, 6) не имеет такого индикатора пересе- чения ее лучом, каким в НФ является инверсия знака функции f(p). Будем искап в пространстве параметров 1, т и 6 корни уравнения q + Vt = р(т, 0), доставляю- щие нулевое значение целевой функции J(t, т, 6) = \q + Vt -р(т, 6)|2 > О, т. е. квадрату расстояния между лежащими на одной вертикали точками луча » поверхности. Алгоритм МНК-решения задачи минимизации J(t, т, 6), стартуя с начальны- приближений to = 0, то и 6о, обновляет параметры по итерационной формуле k+i L+1 е/+1]=к Ь 6,] + [Л/, Лт, Л6,], г = 0, 1,2,... (Ы37) Различные методы оптимизации отличаются способами расчета вектора обнов лений [Л/, Лт, Л6, ]. Метод градиентного спуска полагает [Л/, Лт, Ле,]=-у,ГД/„т„е,) (1.138, л и имеет скорость сходимости, зависящую от выбора шага настройки у„ что само п себе представляет нетривиальную задачу. Квадратичной скоростью сходи мост обладает метод линеаризации, заключающийся в замене по (1.61,6) поверхности t текущей точке р(т„ 0,) касательной плоскостью р(т„ 6,) + 1^Лт, + И<Л6„ расчете пс (1.102, б) вектора обновлений и нового приближения точки пересечения V [Л/, Лт, Ле/]=(р(т,,е,)-<7-Иг,) -К,- -Wi => р,+| = р, + VM, (1-138, б до сходимости по аргументу ||А/, Лт, Л0, ]| < е или (и) функции J(/„ т„ 0,) < е Большое число поверхностей являются периодическими по одному или обою- параметрам т и 6. Например, если период т функции р(т, 0) по параметру т раве- 2л, то р(т, 6) = р(у + тк, 0) VA- = 1,2,...
' еометрические основы компьютерной графики 103 Формула обновления (1.137) может вывести параметр за допустимый интервал О < Tmin < т < Ттах < т. Во избежание потери решения на третьем этапе алгоритма пересечения, где проверяются условия допустимости параметров ш(тп„ 6п,) > О, необходимо после каждого обновления сдвигать значение т,+! на целое число периодов по формуле т,+1 = mod(mod(T,+1, ш) + т, т) е [0, т). (1139) Итерационные методы оптимизации являются локальными (сходятся к локаль- ному минимуму J(t, т, 6), причем необязательно нулевому), в связи с чем требует- ся выполнить несколько расчетов с различных начальных значений то и 6о, на- пример, равномерно распределенных в областях их допустимых значений. Полученные решения группируются на прямой q + Vt в окрестностях точек ее пересечения с поверхностью. Далее выполняется сортировка, описанная во вто- ром и третьем шагах алгоритма пересечения. Пример 1.7. Из точки q = [10 1 о] выпущен луч p(t) = q- Vt в направлении, задаваемом вектором V = [-2 -0.1 -0.2]. Рассчитать пересечение луча с по- верхностью, описываемой явным уравнением у = f(x,z)=e~a^x +z ^cos(coxx)cos(cozz) с параметрами а = 0.02, а. = 1 ио. = 0.5 (рис. 1.53, а). Решение. Так как уравнение поверхности задано в явной форме, будем решать задачу пересечения как задачу поиска корней функции h(t) = y(t)-f(x(t),z(t)) = 1 -0.1z-/(10-2z,-0.2z) зависимости вертикального расстояния от точки p(z) = [x(z) y(t) z(z)] до по- верхности. Из ее графика, приведенного на рис. 1.53, б, видно, что луч пересекает поверхность в пяти точках. Ввиду некоторой сложности расчета производной d/i / dz зададим шаг трассировки луча AZ = 0.1, допустимую погрешность е = 10” и выполним поиск первой точки пересечения методом проб. Реализация метода в среде MathCAD показала, что необходимо выполнить 45 ша- гов трассировки для достижения интервала Z е [4.5,4.6] с разнозначными значе- ниями Л(4.5) = 0.0808 и /?(4.6) = -0.066. Пропорциональное дробление этого ин- тервала еще за 4 итерации дало параметр пересечения Zi = 4.553155 с абсолютной погрешностью |/?(Zi)| = 5.208 • 10” < 10” и точку </= [0.8936 0.5447 -0.91 Об]. Заметим, что половинное дробление интервала [4.5, 4.6] с той же погрешностью потребовало бы 14 итераций. Задание слишком большого шага трассировки Az> 1.1 приводит к пропуску первых двух ближайших точек пересечения луча с поверхностью и получению сразу третьей точки <73 = [-0.9861 0.4507 -1.098б] с параметром Z3 = 7.678274. □
104 Глава ' & Пример 1.8. Рассчитать пересечение луча, выпущенного из точю q = [-8 0 8] в направлении V = [4 0.5 -4], с параметрической поверхностьк (рис. 1.54, а) р(т,0)= [(1 + т-sin(x))cos(6) 1 -cos(x) -(т -sin(x))sin(0)] V0.1л<т< 1.4л. 0<0<1.5л. Решение. Луч р(/) = [-8 + 4/ 0.5/ 8-4/], />0, пересекает поверхность р(т, 0) в трех точках. Найдем их методом линеаризации (1.137) и (1.138,6), минимизируя целевую функцию J(t, T,Q) = \p{t)-p(T,Q)Y с начального приближения /о = 0 и девяти сочетаний начальных приближений то е {0.1л, 0.75л, 1.4л}, Оо е {0,0.75л, 1.5л}. На рис. 1.54,6 изображены пространство параметров т и 0, допустимая область их изменения, начальные приближения {то, Оо} и результаты сходимости алго- ритма линеаризации с погрешностью е = 106: □ приближения {0.1л, 0} и {1.4л, 0} дают сходимость к точке qx с параметрам /1 = 3.061, ti = 1.322л, 01 = 0.25л; □ приближение {0.75л, 0} дает сходимость к точке qi с параметрами ti = 2.307. Т2 = 0.549л, 02 = 0.25л; □ приближение {0.1л, 0.75л} дает лишь относительную сходимость к парамет- рам / = 5.911, т = 7.128л, 0 = 0.25л и ненулевому установившемуся значению J — 3.827 * 0, в связи с чем этот вариант в список анализа не включается;
Геометрические основы компьютерной графики 105 □ приближения {0.75л, 0.75л} и {0.75л, 1.5л} дают сходимость к точке q\ с па- раметрами Гз = 1.744, тз - 0.459л, Оз = 1.25л; □ приближение {1.4л, 0.75л} дает сходимость к точке q4 с параметрами Га = 2.07, Т4 = -0.511л, 64 = 0.25л; □ приближение {0.1л, 1.5л} дает сходимость к точке q'5 с параметрами is = 1.917, is = -0.487л, 0s = 1.25л; □ приближение {1.5л, 1.5л} дает сходимость к точке q'f, с параметрами Ге = 0.732, те = 1.719л, бе = 1.25л. Рис. 1.54 Таким образом, сортируя точки q' по возрастанию параметра /, > 0, получим упорядоченный список точек L = {q'^, q'^, q$, q4, q'z, q{}, расположенных на луче q + Vt в порядке удаления от начала луча — точки q.
106 Глава 1 На третьем этапе исключим из списка L точки, параметры которых не удовле- творяют условиям 0.1л <т< 1.4л и 0<0< 1.5л. Это, во-первых, точка % пере- сечения луча с продолжением поверхности при те > 1.4л, изображенной на рис. 1.55,а для интервалов параметров 0<т<3.4л и 0<0<2л. Во-вторых, это точки и с отрицательными значениями т. Первая в оставшемся спи- ке точка <73 = <7 + 1.744И = [-1.026 0.872 1.02б| и является точкой q' пересечения луча с заданной поверхностью. На рис. 1.55, б изображены графики итерационных процессов поиска параметров г„ и 0,. □ Рис. 1.55 1.3.2. Отражение луча от поверхности Зеркальное отражение луча от поверхности (рис. 1.56) строится по следующим законам отражения. □ Отраженный луч q' + Mt находится с той же стороны поверхности, что и па- дающий луч q + Vt,a эти два луча лежат в одной плоскости с вектором норма- ли N, построенным в точке пересечения прямого луча с поверхностью q’. □ Равенство скоростей падающего и отраженного лучей: |Р] = |М|. □ Равенство углов падения а и отражения р. Найдем нормальную и тангенциальную составляющие падающего луча: Кк = РГА' V = |K|cos(ZPW)/V = |К|(Ё о N)N = (И о N)N, Иц =Г-ГХ = K-(KoAf)Af.
Геометрические основы компьютерной графики 107 Рис. 1.56 На основе законов отражения вычислим составляющие и сам вектор отраженно- го луча: ml = -r± = -(r<>jv)/v, л/ц = r-(r<>jv)/v, . (1.140) М = М± +Л/|| =Г-2(Го NJN. Таким образом, алгоритм расчета отражения луча от зеркальной ограниченной поверхности имеет следующий вид. Шаг 1. Решается задача пересечения луча q + Vt с ограниченной поверхно- стью. Если точка q' отсутствует, то луч проходит мимо поверхности. Шаг 2. По (1.61), (1.62) вычисляется нормаль N к поверхности в точке q'. Шаг 3. По (1.140) находится направляющий вектор М отраженного луча q' + Mt. □ 1.3.3. Преломление луча на поверхности Идеальное преломление луча на поверхности раздела двух сред с показателями преломления ш и ш (рис. 1.57) строится по следующим законам преломления. □ Преломленный луч q’ + Rt находится с другой стороны поверхности, чем па- дающий луч q + Vt, а эти два луча лежат в одной плоскости с вектором норма- ли N, построенным в точке пересечения прямого луча с поверхностью q'. Рис. 1.57
108 Гпава 1 □ Скорость распространения луча в каждой среде обратно пропорциональна ее показателю преломления. Отсюда следует соотношение длин векторе. |Л| = Лп| V], где пП = nt / т — относительный коэффициент преломления. □ Углы падения а и преломления у удовлетворяют закону Снеллиуса—Декарта msin(a) = n2sin(y). (1.141 Вычислим нормальную и тангенциальную составляющие вектора преломленног: луча: I = |/?|sin(y>f| = ^|r|sin(a)lf | = (ko7v)v), откуда следует вектор у R = Rl +/?||=ипИ +лп sgn |2 — - nnV <>N N , (1.142 Существование преломленного луча в среде с меньшим показателем преломле- ния П2 < т (например, при переходе из воды в воздух) возможно при положи- тельности подкоренного выражения в (1.142), что совпадает с известным в опти- ке неравенством [16]: |И|2-«п|их//|2 > 0 => |К| > лп|гxn| => 1 > лп sin(a). (1-143) При падении луча на оптически менее плотную среду под углом a>arcsin(l I пп) наблюдается оптический эффект полного внутреннего отражения, при котором преломленный луч отсутствует. Таким образом, алгоритм преломления луча на ограниченной поверхности разде- ла сред имеет следующий вид. £7 Шаг 1. Решается задача пересечения луча q + Vt с ограниченной поверхно- стью. Если точка q' отсутствует, то луч проходит мимо поверхности. Шаг 2. По (1.61), (162) вычисляется нормаль Nk поверхности в точке q'. Шаг 3. Если не выполняется условие (1.143), то преломленный луч отсутствует. Шаг 4. По (1.142) находится направляющий вектор R отраженного луча q' + Rt. CZ I& Пример 1.9. Из точки q = [б 0 0] воздушной среды (m » 1) выпущен луч в на- правлении V = [-4 О 1J. Найти точку его пересечения со стеклянным (пг » 1.52) эллипсоидом, имеющим полуоси гд-— 1, гу = 2, г. = 3 и центр в точке с = [о -1 -1]. а также направления отраженного и преломленного лучей (рис. 1.58).
геометрические основы компьютерной графики 109 Решение. Составим неявное уравнение f{x,y,z) = 0 и матрицу F эллипсоида по его каноническому уравнению из табл. 1.3: + -1 = 0 => 36х2 + 9^2 +4z2 + 18_р + 8z - 23 = О, I rz J F = 36 0 0 0 9 0 0 0 4 0 ' 9 4 0 9 4 Г-23_ 36 9 0 , F21=[0 9 4], D = 23. 0 0 0 4 Вычислим коэффициенты и дискриминант квадратного уравнения (1.55): a = 580, b = -860, с = 1273, <7 = 1260. Так как {а * 0}П {d > О}, то прямая p(t) = q+ Vt пересекается с поверхностью эл- липсоида в двух различных точках с параметрами -b-qd , -b + yjd , /, =---— = 1.422, t2 =-------= 1.544 . a a Ближайшая к источнику точка пересечения имеет координаты q = [0-314 0 1.422]. Для расчета отраженного и преломленного лучей вычислим по (1.61, а) вектор нормали в точке падения: N = [72x' 18/+ 18 8z'+8]= [22.59 18 19.37]. На рис. 1.58 этот вектор, имеющий длину |7V] = 34.78, изображен для удобства в четыре раза короче. Рис. 1.58
110 Глава 1 По (1.140) и (1.142) определяем векторы направлений отраженного и преломлен- ного лучей, предварительно вычислив значения пп =1/1.52=0.658, 77=[0.65 0.518 0.557], Г <>77 = -2.041 <0, VxN =[-0.518 2.878 -2.07], |их77| =3.582 , |г|2-^|их77|2 = 11.445 >0: A/ = r-2(r°7v)v = [-l-348 2.113 3.274], R = n^y-n„ \2 +ппУ ° N N = [-2.603 -0.695 -0.315]. □ 1.3.4. Прямая и обратная трассировка лучей На основе закона обратимости можно построить путь светового луча как в пря- мом направлении от источника L к объекту и от него в приемник S, так и в об- ратном — от приемника к объекту и источнику. Каждый из методов трассиров- ки лучей моделирует соответствующий процесс распространения света и имеет свои отличительные черты. В методе прямой трассировки генерируется пучок лучей L + V\t, выходящих из источника во всевозможных направлениях У\, Уг,... На рис. 1.59 показаны вари- анты распространения лучей в сцене, включающей отражающие, преломляющие и поглощающие свет объекты. Рис. 1.59 Большинство лучей, испущенных источником, не попадает в приемник, а значит, и не влияет на формируемое в нем изображение. Лишь очень малая часть лучей
Геометрические основы компьютерной графики 111 после всех отражений и преломлений в конце концов попадет в приемник, созда- вая изображение сцены в его рецепторах. На шероховатых поверхностях возни- кает множество диффузно отраженных лучей. Все их нужно программно генери- ровать и отслеживать, что лавинообразно увеличивает сложность задачи трассировки. Прохождение луча в неидеальной среде сопровождается рассеянием и поглоще- нием световой энергии на ее микрочастицах. Эти физические процессы чрезвы- чайно сложно адекватно моделировать на ЭВМ с ее конечными вычислитель- ными ресурсами. Практически ограничиваются применением коэффициента за- тухания энергии луча на единицу пройденного им расстояния. Аналогично вво- дятся коэффициенты уменьшения энергии луча при его отражении и преломле- нии на поверхности раздела сред. С учетом этих коэффициентов отслеживается уменьшение энергии всех первичных и вторичных лучей в процессе их блужда- ния в пространстве сцены. Как только энергия некоторого луча становится меньше заданного абсолютного уровня или уменьшается в заданное число раз, трассировка данного луча прекращается. Таким образом, главным недостатком метода прямой трассировки является его большая трудоемкость и малая эффективность. При реализации данного метода большая часть работы по расчету пересечений лучей с объектами оказывается проделанной впустую. В следующем разделе предпринимаются некоторые по- пытки сокращения числа рассматриваемых прямых лучей путем решения урав- нений, полученных на основе законов оптики и моделей поверхностей. После недолгих размышлений становится ясно, что для отсекания лучей, не по- павших в приемник, достаточно рассматривать наблюдателя .S’ в качестве источ- ника обратных лучей В соответствии с методом обратной трассировки проложим трассу луча S + Vt в направлении V от точки .S’ к какой-нибудь точке на поверх- ности некоторого объекта (рис. 1.60, а). По вышерассмотренным методикам рас- считываются вторичные, третичные и т. д. лучи. Рис. 1.60
112 Глава 1 В результате для каждого первичного луча строится дерево трассировки (рис. 1.60, б), ветви которого составляют вторичные лучи. Ветвление трассы за- канчивается, когда луч (7) выходит за пределы сцены или (2) встречается с не- прозрачным телом, поглощающим свет, или (5) попадает в источник света, или (4) когда его интенсивность падает ниже порога чувствительности, или, наконец. (5) когда число расщеплений первичного луча становится слишком большим для имеющихся машинных ресурсов. В результате прямая световая энергия (цвет и интенсивность), попавшая в приемник из направления V, слагается из энергий терминальных вершин дерева с учетом их потерь при распространении в оптиче- ских средах. Метод обратной трассировки фактически аккумулирует все лучи, в действитель- ности приходящие в приемник из определенного направления независимо от и.\ начала. Это позволяет видеть и изображать на экране: □ непрозрачные объекты, поглощающие обратные лучи; □ прозрачные объекты, через которые благодаря преломлению наблюдателю видны другие объекты; □ отражения объектов на зеркальных поверхностях, в том числе и блики, соот- ветствующие попаданию обратных лучей в источник света; □ тени, образующиеся в точках поверхности, заслоненных от источника други- ми объектами; □ другие разнообразные оптические эффекты. Количество "зондирующих" обратных лучей, подвергаемых трассировке, огра- ничено числом точек на поверхностях объектов сцены, видимых из точки .S’ и перебираемых с конечным шагом пространственного квантования, обусловлен- ным разрешением экрана. Благодаря этому объем вычислительных затрат в ме- тоде обратной трассировки существенно уменьшается по сравнению с методом прямой трассировки. Возможно разумное комбинирование двух методов трасси- ровки для оптимизации алгоритмов и снижения их трудоемкости. Очевидно, что трассировка лучей носит характер рекурсивной процедуры, кото- рая будет сама себя вызывать, как только выяснит, что анализируемый луч от- ражается или преломляется. Ббльшая часть вычислений при реализации методов трассировки приходится на расчет пересечений лучей с поверхностями, в связи с чем они применяются для изображения оптических эффектов в сценах с неболь- шим числом объектов. 1.3.5. Лучевые методы построения оптических эффектов Применим методы прямой и обратной трассировки лучей для решения задач по- строения оптических эффектов: тени, отражения и преломления. Сразу отметим
Геометрические основы компьютерной графики 113 некоторые геометрические и вычислительные особенности, порождаемые нели- нейностью поверхности, на которой строится оптический эффект: □ эффект может быть фрагментарным, т. е. созданным не всеми точками объек- та, а лишь теми, в которых выполнены все условия существования эффекта на некотором участке поверхности; □ эффект непрерывного объекта может быть разрывным, когда тень от двух близких точек объекта падает на разные участки поверхности, удаленные друг от друга в силу ее криволинейности и самоэкранирования; □ эффект одной точки может быть множественным, когда его видно не в одной, а в нескольких точках поверхности, где одновременно выполнены все условия существования эффекта; □ большинство численных методов решения нелинейных уравнений имеют ло- кальный характер сходимости, а результат их работы зависит от выбора на- чальных приближений неизвестных. Следовательно, для получения достовер- ного результата— всех и именно тех точек поверхности, в которых наблюдается эффект, — необходимо выбирать начальные приближения в ок- рестности сходимости к глобальному (нулевому) минимуму целевой функции. С учетом первых трех геометрических особенностей становится ясно, что глобальных минимумов целевой функции может быть несколько. Таким образом, качественный алгоритм построения оптического эффекта на нелинейной поверхности должен быть способен: □ выполнять декомпозицию объекта на множество не связанных между собой точек, каждая из которых обрабатывается независимо от других; □ генерировать вычислительный процесс с множества различных начальных приближений неизвестных параметров. Период пространственной дискрети- зации (расстояние между элементами этого множества) выбирается на основе Зб-аналога теоремы Шеннона—Котельникова, т. е. так, чтобы узлы дискре- тизации оказались во всех возможных областях притяжения минимумов целе- вой функции; □ накапливать достоверные решения и отбрасывать недостоверные, достав- ляющие целевой функции локальный, а не глобальный минимум; □ фильтровать накопленный массив решений, т. е. удалять из него либо сразу туда не записывать решения, совпадающие с уже существующими или близ- кие к ним; □ фрагментировать отфильтрованные решения в компактные группы; □ максимально использовать возможности параллельных вычислений, зало- женные в операционной системе и выбранном языке программирования. Во- обще говоря, методы трассировки лучей по самой своей природе идеально подходят для организации параллельной обработки данных. В целом следует признать, что лучевые алгоритмы в совокупности с другими алгоритмами Зб-графики требуют для своей работы значительных машинных ресурсов и на современных персональных компьютерах работают пока еще мед-
114 Глава 1 ленно, особенно при моделировании динамических сцен. Собственно говоря, основной прогресс в развитии компьютерной техники есть постоянное совер- шенствование аппаратных и программных Зб-ускорителей. Нет сомнений, что в ближайшее время задачи построения самых сложных оптических эффектов будут быстро решаться в реальном времени. Множество сложных геометрических объектов может быть представлено сово- купностью простейших графических элементов — точек и отрезков, а поверхно- сти, на которых строятся оптические эффекты, аппроксимированы системой плоских граней. Отсюда ясна актуальность решения задач построения оптиче- ских эффектов точек и отрезков на плоскости. В связи с этим подробнее рас- смотрим построение оптических эффектов на плоскости для точки и отрезка, заданного двумя концевыми точками. Желательно иметь описание плоскости элементами нормальной формы {po,N}. Если плоскость задана элементами параметрической формы {ро, V,W}, то по (1.69) ее нормаль равна N - V х W. Возможно, на плоскости задан полигон Р = {pi ...рпр\} с числом сторон п > 3, по которому должно выполняться отсече- ние оптического эффекта. Тогда принимаем точку ро = pi, а по (1.117) вычисляем нормаль N - погт(Р). Непосредственное использование тестов ориентации и ал- горитмов отсечения, описанных в разд. 1.1.2, возможно при совмещении плоско- сти эффекта с координатной плоскостью ху методом аффинного преобразования системы координат с помощью функций MAPI, MAPI или МАР4, определенных в гл. 2. При построении тени должно быть задано положение источника света. В зави- симости от его удаленности от объекта возможны два случая, отличающиеся свойством параллельности лучей (рис. 1.61): П источник, например, светильник, расположен в конечно удаленной точке L. Различные точки пространства q связаны с ней непараллельными расходящи- мися из L прямыми лучами q + V41 либо сходящимися в L обратными лучами q - V41 с векторами направления Непараллельность лучей приводит к искажению формы тени объекта (У), что делает ее перспективное изображение более естественным; Рис. 1.61
Геометрические основы компьютерной графики 115 71 источник, например, Солнце, бесконечно удален от объекта в направлении вектора L. Источник можно считать бесконечно удаленным, если минималь- ное расстояние между ним и объектом хотя бы на порядок, т. е. в 10 раз, пре- вышает максимальный габарит объекта. При этом условии максимальный угол расхождения лучей не превышает значения arctg(O.l) = 5.7°, что доста- точно близко к 0°. Такая идеализация позволяет считать прямые q + V41 и об- ратные q - V41 лучи параллечьными с векторами направления V4^-L для всех точек q, упрощает построение тени (2), делает возможным примене- ние групповых матричных методов обработки точек, описанных в гл. 2, но не дает перспективного изображения. При построении оптических эффектов необходимо знать положение их наблю- дателя. В зависимости от его удаленности от объекта также возможны два слу- чая, отличающиеся свойством параллельности лучей (рис. 1.62): □ наблюдатель расположен в конечно удаленной точке 5. Различные точки про- странства q соединены с ней непараллельными сходящимися в 5 прямыми лу- чами q + S4t либо расходящимися из 5 обратными лучами q- S4t с векторами направления Sg = S-q. Непараллельность лучей делает перспективное изображение оптического эф- фекта (5) реалистичным, но усложняет его расчет; 21 наблюдатель бесконечно удален от объекта в направлении вектора 5. Конечно удаленного наблюдателя можно считать бесконечно удаленным, если мини- мальное расстояние между ним и объектом хотя бы на порядок больше мак- симального габарита объекта. Такая идеализация позволяет считать прямые q + S41 и обратные q-S4t лучи параллельными с равными векторами направ- ления S4 = S для всех точек q, упрощает построение оптических эффектов, делает возмож- ным применение групповых матричных методов обработки точек, но не дает перспективного изображения (4). Рис.1.62
116 Глава 1 Используя устоявшуюся терминологию [36], будем впредь называть конечно удаленного наблюдателя и источники света "ближними", а их же, удаленных в бесконечность,— "дальними". Каждый из этих режимов, как отмечалось чуть выше, имеет свои преимущества и недостатки, но применять их следует, руково- дствуясь конкретными геометрическими условиями. Переходим к изучению лучевых методов построения оптических эффектов точек и отрезков на произвольной поверхности и более детально — на плоскости. 1.3.5.1. Тень Тень точки q на произвольной поверхности образуется в точке q' пересечения с ней прямого луча q + V4t. При дальнем источнике света рекомендуется задавать вектор его направления в виде V4 = -yL с коэффициентом удаленности у, во мно- го раз большим отношения максимального габарита сцены к длине вектора L. Задача построения тени точки на произвольной поверхности решена в разд. 1.3.1. Более сложный, чем точка, графический объект представляется сис- темой точек, для которых тени строятся однотипно. Возможность пересечения прямого луча q + V4t с плоскостью {/>о, N] в точке q' (рис. 1.63) определяется числом = v4 о N. При v4 = 0 луч (?) проходит параллельно плоскости, нигде ее не пересекая. Если то по (1.102,6) находим параметр и точку пересечения прямой {q, с плоскостью {ро, N}: Ср0~<7)°/У 9 (1.144) Рис.1.63
Геометрические основы компьютерной графики 117 При 1Ч = 0 точка q лежит в плоскости {ро, N} и согласно (1.144) совпадает со сво- ей тенью: д' = q. При t4 > 0 луч (2) пересекает плоскость впереди точки q и дает действительную тень д'. Условие существования тени 1Ч > 0 геометрически озна- чает, что векторы ро - q и V4 одинаково ориентированы относительно плоскости, т. е. образуют с нормалью N однотипные углы: либо оба острые, либо оба ту- пые. При условии -1 < t4 < 0 луч (5) пересекает плоскость в точке q' раньше, чем доходит до точки q, а при t4 < -1 луч (4) вообще удаляется от плоскости. Таким образом, при t4 < 0 тень является мнимой. Важным аспектом построения тени является ее видимость наблюдателем. Даже если тень точки существует, она будет невидима, когда наблюдатель и падающий зуч находятся по разные стороны от плоскости. Тогда отпадает необходимость самого расчета тени. Таким образом, условия видимости и существования тени точки имеют следующий вид: {vpoo<0}n{^>0}, где vpo =Vpo o/V, o = Spo °N. (1145) Первое в (1.145) условие видимости тени геометрически означает, что векторы Гро и Sp(j противоположно ориентированы относительно плоскости, т. е. из двух углов и ^SpoN один острый, а другой — тупой. Построение тени отрезка ab на плоскости {ро, N} (рис. 1.64) требует анализа взаимного расположения концевых точек отрезка а и b относительно плоскости и источника. Каждая концевая точка q- а либо q - Ь может располагаться в од- ном из четырех положений: □ при v4 - 0 на равном с источником удалении и по одну сторону от плоскости; □ при {v? * О}П {(. < -1} дальше от плоскости, чем источник;
118 Глава 1 П при Ivg * 0]Я f-1 < tq < 0j по разные с источником стороны от плоскости; П при \Vg * О/Cl\tq > Oj между источником и плоскостью. В табл. 1.5 приведено 16 возможных вариантов образования тени отрезка ab: Таблица 1.5 b а v^O G.<-l гй> I v„ = 0 — — d -> 2d- b' b' —> c' — — d->2d-b' b'->2b'-a' -I < t„ < o <•/ —> 2d -a' d -> 2d - a' — [d,b'} tB> I a' -> c' a' —> 2a' - b' [a',d] {a',b'\ П в пяти вариантах тень отсутствует (прочерки в таблице): если оба конца ab расположены не ближе к плоскости, чем источник (/), либо оба они лежат по другую сторону от плоскости, чем источник (2); П в трех случаях тень имеет вид отрезка qi qr. когда один из концов ab находится между источником и плоскостью, а другой там же (3) либо ниже плоскости (4). Точка пересечения отрезка с плоскостью вычисляется как d = а + (ро -а)°7У (b-a)° N (b-a)-, □ в восьми вариантах тенью отрезка является полубесконечная прямая — луч ср —> qi, начинающийся в точке ср и уходящий через точку qi в бесконечность в направлении qi-q\. Например, при {vfl -0}П{^ - 0} луч L —> а параллелен плоскости, и только один конец отрезка b имеет действительную тень qx=b’ = q + (ро ~q)°N Vb' В качестве второй точки луча тени (5) можно принять вычисляемую по (1.144) проекцию qi — с' средней точки отрезка с = 0.5(п + Ь). При {ta <-1}П{-1 — tb <0} концы отрезка (6) имеют мнимые тени а' и Ь', но, тем не менее, отрезок отбрасывает тень в виде луча, выходящего из точки d в на- правлении точки d + (d-b') = 2d- b'.
Геометрические основы компьютерной графики 119 В связи с возможностью существования тени отрезка в виде луча необходимо модифицировать описанные в разд. 1.1.2 алгоритмы отсечения clip2_cross и .iip2_iest так, чтобы они могли работать не только с отрезком ab, но и с лучом .7 -> Ь. Рассмотрим два варианта модификации. 1. Луч а-^Ь заменяется отрезком [а, а + (Ь - а)у] с коэффициентом у -> оо. 2. В модифицированный вариант функции clip2_cross(ab, Р, mod) введем допол- нительный аргумент mod, задаваемый равным 0, если ab — отрезок [а, А], и 1, если ab — луч я —> Ь. При mod = 1 изменения алгоритма на рис. 1.18, б мини- мальны и заключаются в том, что расчет концов неотсеченной части луча а-+Ь вместо табл. 1.1 выполняется по более простой в программировании табл. 1.6. Таблица 1.6 Ci 02 < 0 0 < 02 < 1 02 > 1 oi < 0 [п,п] [а. а + Рог] [я, а + Гог] 0 < 01 < 1 [а, а + loi] [я + F01, а + Гог] [я + Fbi, а + Гог] О| > 1 [я, а + Fbi] [я + Fbi, а + Гог] [я + Fbi, а + Гог] & Пример 1.10. Построить тень пирамиды с вершинами А=[3 4 -1],Р2 =12 4 2], р3=[5 3 2], р4 = [2 2 О] (а плоскость, заданную отрезками A, = 1, Ал. = 2, А. = 3, от источника света, рас- положенного в точке L = [4 2 1] . Направление на дальнего наблюдателя зада- ется вектором 5 = [1 1 /7]. Проанализировать изменение тени при удалении источника в бесконечность вдоль вектора L (рис. 1.65). Решение. Плоскость тени описывается уравнением в отрезках (1.74, а) х у z , —+—+-=1 1 2 3 или неявным уравнением 6х + Зр + 2z - 6 =0 и имеет вектор нормали \ = [б 3 2]. Выбрав на плоскости точку р0 = h.z° = [О 0 з], оценим по (1.145) зидимость точек тени: Vpo=Po-L = [-4 -2 2], vPo=-26, 5ро =5, а = 14.29 => vpoo< 0.
120 Глава 1 Рис.1.65 Условие видимости выполнено. Приступаем к расчету тени точек по формулам Vt - pj - L, vt - Vj° N, tj = ———° N , p' = Pj +Vjtj: V; r(=[-l 2 -2], VI = -4*0, Л = 5.5>0,|p[=[-2.5 15 -12]|; F2=[-2 2 1], V2 =-4 *0,12 = 5.5 >0,|p'2 = [-9 15 7.5]|; И3=[1 1 l],v3= 11 *0,1з = -3.364 <0, p3 =[1.636 -0.364 -1.364]; И4 = [-2 0 -1], V4 = -14*0,/4 = 0.857>0,|p4 = [0.286 2 -0.857]. Удовлетворяющие условию существования тени 1,->0 значения h, 1г и 14 означа- ют, что ребра пирамиды р\рг, ргрь и р\ р* имеют на плоскости действительные тени. Отрицательное значение 1з сигнализирует, что точка рз отстоит от плоско- сти дальше источника и у нее есть только мнимая тень р3. Следовательно, тени ребер pi рз, р2рз и р4рз представляют собой расходящиеся на плоскости лучи р' + ИуТ (z е {1, 2, 4}, т > 0) с направляющими векторами И7, = р'-р3 и общей задней точкой схода р3. На рис. 1.66, я изображена рассчитанная MathCAD-программой сцена, вклю- чающая оси координат, объект, источник света, теневую плоскость и тени ребер объекта на ней. Ракурс, соответствующий направлению на дальнего наблюдате- ля S = [1 1 V7] в системе координат сцены, является диметрической проекцией
Геометрические основы компьютерной графики 121 на ортогональную к наблюдателю плоскость и очень наглядно отображает трехмерный мир на плоскости. Рис.1.66 Заменив в исходных данных положение источника света L на yL, рассчитаем тень объекта при у > I — удалении источника в бесконечность вдоль вектора L. На рис. 1.66, б приведены положения тени пирамиды при у = I, у = 1.5 и у = 100. Последнее значение у соответствует практически дальнему источнику света. Анализ изображений тени показывает, что с удалением источника она уменьша- ется в размерах, достигая в пределе у -> оо размеров объекта. При этом умень- шаются и ее перспективные искажения. □ 1.3.5.2. Отражение Отражение точки q от произвольной поверхности p(t, т) наблюдается в такой точке q’ е р(1,т) (см. рис. 1.56), где выполняются все перечисленные в разд. 1.3.2 законы отражения. Векторы падающего этраженного M(t, т) лучей и нормали, вычисляемой по достаточно сложной формуле (1.61,6) как Э/ Эх гвязаны уравнением отражения прямого луча (1.140): = p(t,i)-q-2^p(t,i)-q)° a(z,t))v(/,t). (1.146, a)
122 Глава ' Из принципа обратимости лучей следует соотношение = -М-2(-М °n]n, откуда получаем более простое по сравнению с (1.146, я) уравнение отражена- обратного луча p(t, t)-q = M(l ,т)-2(м(г, т)° 7V(t, t))w(z, т). (1.146, f Отраженный луч начинается в точке р(1, т) и с точностью до скалярного множи- теля X имеет вектор направления на наблюдателя Л/(/,т) = Х5;,(„т), (1.147 где Spti.-o = S при дальнем и = S-p(t, т) при ближнем наблюдателе. Знак числа X служит индикатором направления от- раженного луча относительно наблюдателя. При X > 0 отражение действитель- ное, а при X < 0 — мнимое, т. к. отраженный луч удаляется от наблюдателя в пре тивоположном направлении. Решение уравнений (1.146, я) либо (1.146, б) совместно с (1.147) относительнс всех допустимых переменных {г, т, Х>0} имеет перечисленные в начале разд. 1.3.5 свойства, изучаемые здесь более подробно, и следствия из них: П отражение может быть множественным-, решение представляет собой набор разных точек q'k = р(1к,Тк)’ £> 1, в которых наблюдатель видит отражени» одной и той же точки q на произвольной нелинейной поверхности p(t, т); П отражение может быть разрывным- нельзя соединять точки отражения друг с другом, даже если соответствующие точки объекта были соединены, напри- мер, ребром; П отражение может быть фрагментарным: возможно, что решение {г,т,Х>0 пусто, а отражение отсутствует. & Пример 1.11. Построить отражение пирамиды из примера 1.10 (см. рис. 1.65 от криволинейной поверхности из примера 1.7 (см. рис. 1.53, я), описываемой явным уравнением у = f(x,z) = е~°^ +г ^cos(roA..Y)cos(a)-z), я = 0.02, (од = 1, ш. = 0.5. Направление на дальнего наблюдателя задается вектором 5 = [1 1 1], соответ- ствующим изометрической проекции.
Геометрические основы компьютерной графики 123 Решение. Составим неявное уравнение поверхности y-f{x, z) = О и по (1.61,а) вычислим нормаль к ней в точке p(x,z)= [х f(x,z) z]: Эх OZ e-o(r +z Jcos^T^^OXCOS^xJ + CO^Sin^x)) е +г )cos(a\x)(2nzcos((i)-z)+coz sin(cozz)) Нелинейное векторное уравнение (1.146,6) с вектором М(х, z) = ).S принимает следующий вид: p(x,z)-q = >S S—^(x,z)l. v 2V(x,z)o2V(x,z) j Его численное решение относительно х, z и X > 0 дает точки тени q' = р(х, z). При X < 0 отражение отсутствует и не изображается. На рис. 1.67 изображена рассчитанная MathCAD-программой изометрическая проекция сцены, включающая объект, зеркальную криволинейную поверхность и отражение в ней объекта. Каждое ребро пирамиды заменялось цепочкой из 21 точки. Начальные приближения {х, z} выбирались из всевозможных сочета- ний (всего их 24) элементов списков хе {1, 3,4, 5, 7, 10} иге {1, 3, 5, 7}. Анализ отражения убеждает, что оно, действительно, имеет множественные и фрагмен- тарные свойства. □ Рис.1.67
124 Глава 1 В частном случае плоской параметрической поверхности {ро, V, W} с нормалью N = V х W = const и ближнего наблюдателя подстановка в (1.146, а) выражения M(t, т) = Х(5 - p(t, т)) и свойство ортогональности (И/ + ИЛт)° N — 0 дают нелинейное уравнение - р0 - Vt - Wx) = Ро + Vt + Wx - q - 2((p0 - q)° N )?7. Его точное решение [а Р Л]=(<7-р0 -2((g-po)o7v)y) Po-S а Р t --, х — —— Л +1 Л +1 (1.148, а) определено при вектореро - 5, не лежащем в отражающей плоскости. При дальнем наблюдателе подстановка M(t, т) = XS в (1.146, б) дает следующее линейное уравнение и его точное решение при SLN: Po + Vt + Wx-q = AS-2A.(Son)n => [/ * = (<7 - Ро) W 2($о N )у-S (1.148,6) В обоих случаях отражение точки q действительно при X > 0 и наблюдается на поверхности неограниченной плоскости в точке q' = ро + Vt + Wx. Задача построения отражения точки на плоскости имеет простое геометрическое решение (рис. 1.68). Вычислим по (1.26, а) симметричную к плоскости точку q°-q + 2^j)Q-q)o N^l (1.149) Рис. 1.68
Геометрические основы компьютерной графики 125 и выпустим из нее луч q° +S^ot. Наблюдатель видит отражение точки q в точке q=q°+^0~q°^NSo (1.150) пересечения луча с плоскостью. Тип отражения определяется соотношением зна- ков чисел v4 - (q-ро) ° N и о = Spo ° Л' . При vvo > 0 точка q и наблюдатель рас- положены по одну сторону от плоскости, а вычисленное по (1.150) отражение (Г) действительно. При vvo < 0 по одну сторону от плоскости находятся наблюда- тель и точка q° (2), а отражение является мнимым. Точки q° и q' лежат на одном прямом луче q° —> S' и визуально сливаются в од- ну точку. Зрительная система человека размещает отражение объекта за зерка- лом, а не на его поверхности. Контур зеркала является как бы окном, через кото- рое наблюдатель рассматривает виртуальный (кажущийся) объект. Таким образом, для расчета отражения точки q от зеркальной плоскости достаточно найти по (1.149) симметричную точку q° и при выполнении условия vvo > 0 счи- тать ее действительным отражением. Построение отражения отрезка ab на плоскости {ро, N} (рис. 1.69) начинается с ана- лиза взаимного расположения концевых точек отрезка а и b относительно плоскости п наблюдателя. Четыре варианта этого расположения приведены в табл. 1.7: Таблица 1.7 а v,,a < 0 i’Ao > 0 v„o<0 k И v„o > 0 k, *°] □ наблюдатель видит полное отражение а°Ь°, если оба конца отрезка (7) рас- положены с ним по одну сторону от плоскости; □ отражение отсутствует (прочерк в таблице), если оба конца отрезка (2) рас- положены по другую сторону от плоскости, чем наблюдатель; 2) в двух случаях наблюдается неполное отражение q°d при пересечении отрез- ком (3) плоскости в точке . (ро -о)° TV I, \ , d = а+ —л.----(b-а) е ab. (b-a)°N
126 Глава 1 & Пример 1.12. Построить отражение пирамиды с вершинами Pl=[2 2 -2], р2 = [1 3 1], р3 = [4 2 -1],р4=[1 0 -1] от плоского зеркала в форме параллелограмма, три вершины которого отсекают на осях координат отрезки hx = 1, hy - 3 и h. = 2. Наблюдатель находится в точке S' = [1 1 л/я]. Сравнить отражения при удалении наблюдателя в бесконечность вдоль вектора yS' при у > 1 (рис. 1.70). Рис. 1.70 Решение. Плоскость зеркала описывается неявным уравнением 6л + 2^ + 3z - - 6 - 0 и имеет нормаль У = [б 2 3]. Выбрав на ней точку ро=й-з°=[О 0 2],
Геометрические основы компьютерной графики 127 вычислим индикаторы у, = (д-ро) ° N ориентации вершин /?, относительно плос- кости, а по (1.149) — вершины симметричной пирамиды „о _ „ . 2С’о-Р|)°Л' Pt ~Р‘+----------- Л» Л А: Vl = 4 > 0, = [1 02 1.673 -2.49]; V2 = 9>0, Р2 =[-1-204 2.265 -0.102]; v3= 19 > 0, р$ =[-0.653 0.449 -3.327]; V4 = -3 < 0, р4 = [1.735 0.245 - 0.63з]. Поскольку о = (S -ро) ° N = 10.485 > 0, то из всех вершин пирамиды лишь р$ на- ходится с наблюдателем по разные стороны от плоскости зеркала и не имеет действительного отражения. Вычислим точки . (ро _ PiN \ <4 = Pi + 7-----ГД7^4 ~ Pi pip4 \Р4 ~Pi)°N пересечения бесконечной плоскости {ро, N} с ребрами пирамиды, смежными с вершиной/м (рис. 1.71, а): </14= [1.429 0.857 -1.429], d24 = [1 0.75 -0.5], d34 = [1.409 0.273 -1]. Таким образом, отражение пирамиды от бесконечной плоскости зеркала состав- ляют отрезки р°р2, /2]°р£, р2р3, p?dl4, p2d24 и p3d34. Второй этап расчета отражения состоит в проецировании всех объектов сцены ча некоторую картинную плоскость, допустим, координатную плоскость ху. Проецирование является центральным, т. к. как наблюдатель как бы испуска- ет проецирующие лучи из центра— конечно удаленной от сцены точки 5 = [vx sy s,J. Не вдаваясь пока (до подробного изучения в гл. 2) в методику центрального проецирования, отметим ее сходство с алгоритмом построения тени, в котором глаз наблюдателя является источником обратных лучей. Заключительный этап состоит в отсечении проекций отрезков отражения поли- гоном проекции зеркала. На рис. 1.71, а изображена рассчитанная MathCAD- программой центральная проекция сцены. Пунктиром обозначены отсеченные фрагменты отрезков отражения. Заменив в исходных данных положение наблюдателя 5 на yS, рассчитаем отра- жения пирамиды при удалении наблюдателя в бесконечность вдоль вектора 5. Для ряда значений у = 1, у = 2 (рис. 1.71, б) и у = 5 (рис. 1.71, в) углы горизон- тального обзора сцены составляют соответственно 106°, 56° и 23°. Последний случай практически эквивалентен дальнему наблюдателю с коэффициентом
128 Глава 1 у -> оо. Соответствующий ракурс с вектором направления 5 = [1 1 V8] является кабинетной косоугольной проекцией на плоскость ху и широко применяется для отображения трехмерного мира на плоскости. Анализ изменения отражения по- казывает, что с удалением наблюдателя уменьшаются как его размеры, так и перспективные искажения. О Рис. 1.71 1.3.5.3. Преломление Преломление точки q на произвольной поверхности p(t,x) раздела двух сред с показателями преломления т и пг наблюдается в такой точке q'ep(t,t) (см. рис. 1.57), где выполняются все перечисленные в разд. 1.3.3 законы прелом- ления. Векторы падающего Vv(i, т) = p(t, т) - q, преломленного R(t, т) лучей и нормали Э/ Эт связаны уравнением преломления прямого луча (1.142): я=Яп2 sgn((p-9)oA)j|(p-9)|2 (1.151,«) (р-?)+«п ~nn(p-q)°N
Геометрические основы компьютерной графики 129 Из принципа обратимости лучей следует уравнение преломления обратного луча'. Преломленный луч начинается в точке p(t, т) и с точностью до скалярного мно- жителя X имеет вектор направления на наблюдателя Л(Г,т) = ^,т), (I-152) где = S—p(t, т) при ближнем и Sp(iO = S при дальнем наблюдателе. Знак числа X служит индикатором направления пре- ломленного луча относительно наблюдателя. При X > 0 преломление действи- тельное, а при X < 0 — мнимое, т. к. преломленный луч удаляется от наблюдателя в противоположном направлении. Дополнительные условия существования действительного преломления, озна- чающие отсутствие эффекта полного внутреннего отражения, имеют вид, анало- гичный (1.143): |р-?| >«n|G’-?)x/v| (1.153) Решение уравнений (1.151, я) либо (1.151,6) совместно с (1.34, в) и (1.34, г) отно- сительно всех допустимых переменных {t, т, Л > 0} имеет перечисленные в начале разд. 1.3.5 свойства, изучаемые здесь более подробно, и следствия из них: □ преломление может быть .множественным— решение представляет собой набор разных точек q'k = А > 1, в которых наблюдатель видит пре- ломления одной и той же точки q на произвольной нелинейной поверхности P(t, т); 23 преломление может быть разрывным — нельзя соединять точки преломления друг с другом, даже если соответствующие точки объекта были соединены, например, ребром; “1 преломление может быть фрагментарным — возможно, что решение {/, т, X > 0} пусто, а преломление отсутствует. ±7Пример 1.13. Внутри янтарного эллипсоида с полуосями а = 2, b-З, с =2, центром в начале координат и коэффициентом преломления т = 1.6 находится пирамида (рис. 1.72, а) с вершинами Р\ =1-1 2 -1], р2 = [1 2 1], р3 = [-1 0 1J. Р4=[1 0 -О- Построить преломленное изображение пирамиды, видимое наблюдателем из точки 5 = [4 4 1б] воздушной среды с коэффициентом преломления пг - 1.
130 Глава 1 Решение. Поверхность действительного эллипсоида описывается следующими неявным (см. табл. 1.3) и параметрическими (1.129, г?) уравнениями: - A2 - -1=0; c J .2 ч2 £ | ь Лр)= - И р(/,т)= [asin(/)sin(T) 6cos(/) csin(r)cos(r)], t e [0, л], т g [0, 2л]. Нормаль к поверхности эллипсоида в точке p(t, т) получим по (1.61,6): 7V(/,t)= [6csin2(/)sin(r) acsin(f)cos(z) fl6sin2(/)cos(T)]. Все вершины пирамиды лежат внутри эллипсоида, о чем свидетельствуют отри- цательные значения неявной функции поверхности: /(Р-) =/(р) = -0.0556 < 0, f(p.) =f(p<) = -0.5 < 0. Благодаря выпуклости эллипсоида остальные точки ребер пирамиды также яв- ляются внутренними и могут иметь преломленные лучи. На рис. 1.72, б представлен результат расчета преломления MathCAD- программой. Каждое ребро пирамиды заменялось цепочкой из 50 точек. Для ка- ждой такой точки q решением уравнений (1.151,6), (1.152) при Spi„T) = S-p(t, т) рассчитывалась точка p(t, т) на поверхности эллипсоида, в которой преломляется луч, идущий от q к 5. Отсутствие решений для точек вблизи вершин p^ и рь объ- ясняется, по-видимому, невыполнением условий существования преломленных лучей X > 0 и пп |т?(/, т)| > |/?(г, т)х а(/, т)|. Рис.1.72
Геометрические основы компьютерной графики 131 Благодаря выпуклости поверхности эллипсоида (сравните ее с поверхностью в примере 1.1J) практически при любых начальных приближениях параметров t(0\ т<°) и Х<°> алгоритм построения преломления приводит к одинаковому результату. Это относится даже к тем случаям, когда начальная точка p(t(0>, т(0)) находится на противоположной к наблюдателю стороне поверхности эллипсоида. Кажущийся на первый взгляд логичным выбор начального приближения p(tm, т(0>) в точке пересечения отрезка qS с поверхностью эллипсоида приводит к решению допол- нительной нелинейной задачи поиска этой точки, которая также требует задания начальных условий. В итоге трудоемкость задачи возрастает вдвое. Из двух вариантов оптического алгоритма, решающих нелинейные векторные уравнения преломления прямого (1.151, а) и обратного (1.151,6) лучей, второй вариант проявил себя лучше как по скорости сходимости (машинному времени расчета), так и по более широкой области сходимости, что отразилось в боль- шем числе полученных точек изображения пирамиды внутри эллипсоида. □ Получим геометрические решения задачи преломления точки на плоскости для разных вариантов удаленности наблюдателя. □ При дачьнем набтюоателе требуется найти на плоскости с нормалью N такую точку q’, чтобы преломленный в ней луч имел направление 5 (рис. 1.73). В первую очередь с помощью векторного или скалярного произведений нор- мированных векторов S и N вычислим значение g = sin(y)=|SxA'| = ^l-(soJvy <1, (1154) откуда получим /22 tg(y) = -j g-, sin(a)=—, cos(a)=^—tg(a)=-y=J=. Рис. 1.73
132 Глава 1 Проведем из точки q ортогональную плоскости прямую q + Nt и луч q + St. параллельный преломленному лучу, до их пересечения с плоскостью в точках o' = q+ ((/?о ~q)°N)N, р =q + S- (1.155) 5 о /V Выбор точки q' на луче о' —>р' обеспечивает компланарность падающего, преломленного лучей и нормали. Рассматривая прямоугольные треугольники q o'р' и q o' q' с общим катетом q o', вычислим искомую точку преломления на плоскости раздела сред: g' = o'+^)(Jj'-o’')=o'+ I 1-g {р-o'). (1.156) w) Ьп-g2 Зрительная система человека размещает преломленное изображение точки q в точке qn с той же стороны от плоскости, что и точка-образ, на равном рас- стоянии от точки cf '. qn = q'-\q'-q\s (1.157) Отношение расстояний от точек qn и q до плоскости составляет число _ cos(y) j 1-g2 cos(a) yn2-g2 I 1-g2 ^-(g/Wn)2 При наблюдении объекта, находящегося в более плотной оптической среде, из менее плотной среды (пп > 1) он кажется приподнятым, как бы находящимся
'еометрические основы компьютерной графики 133 ближе к плоскости преломления, чем в действительности (г) > 1). Наоборот, при наблюдении из более плотной среды (лп < 1) объекты кажутся отстоящи- ми от плоскости дальше (q < 1). На рис. 1.74 построены графики зависимости q(y, лп) кажущейся глубины преломленной точки при взгляде на нее под углом у из воздуха в воду (лп = 1.33), в стекло (лп = 1.52), в алмаз (лп = 2.42) и из во- ды в воздух (лп = 0.75). Рассмотрим условия существования преломленного луча. • Во-первых, это соотношение знаков чисел у = (q - ро) ° N, и = S о N, характеризующих взаимное расположение точки и наблюдателя. При vvo > 0 луч q + St удаляется от плоскости. При vvo < 0 точка q и наблюда- тель расположены по разные стороны от плоскости раздела сред, что яв- ляется необходимым условием видимости эффекта преломления. • Во-вторых, это условие существования решения в (1.156). При лп > 1 всегда будет sin(a) < sin(y), точка q' располагается между точками о' и р', а пре- ломленный луч всегда существует. При лп < 1 точка q' лежит на продолже- нии луча о' -> р' лишь в отсутствие эффекта полного внутреннего отраже- ния, т. е. при sin(a) = g / лп < 1— условии определенности подкоренного выражения в (1.156). Например, при переходе луча из воздуха в воду (лп = 0.75) предельное значение угла преломления ynp = arcsin(nn) = 48.8° достигается при угле падения а—>90°. Пунктирный график на рис. 1.74 стремится в бесконечность при у —> упр и объясняет, почему из-под воды весь воздушный мир виден, во-первых, лишь в конусе с углом раствора 2упр = 97.5°, а во-вторых, — приподнятым. При лп <g < 1 получим значение sin(a) > 1: не найдется ни одного падаю- щего луча, который преломится в более плотную среду в направлении век- тора 5. Например, при взгляде из-под воды под углом у > упр видна лишь отражающая поверхность. Таким образом, решение задачи преломления действительно при {v^o < о}п {о < g < лП}. (1.158) & Пример 1.14. Пирамида с вершинами Р1=[1 3 1], P2 = [i 3 3], Рз = [3 1 1], р4 = [о О 1] погружена в стеклянный аквариум, доверху наполненный водой (лв = 1.33), так что вершины pi и рг находятся в воздухе, а вершины рз и рь — в воде. Размеры аквариума dx = 3, df = 2 и d.= 3. Построить изображение каркаса пирамиды без • чета преломления лучей в тонких стенках аквариума. Вектор направления на дальнего наблюдателя равен S = [2 1 з]. На рис. 1.75, а приведен эскиз сцены с аквариумом без воды.
134 Глава ‘ Решение. Изображения погруженных частей ребер пирамиды искажаются из-за преломления лучей на поверхностях раздела воды и воздуха. По положительные знакам координат вектора 5 заключаем, что плоскостями преломления являютс: передняя (фронтальная), верхняя (горизонтальная) и правая (профильная) стены аквариума. Зададим их общую точку Po=[dx dy Jz]=[3 2 з] и нормали единичной длины Nf = z°, Nh =у°, Np =х°. Вычислим точки пересечения ребер пирамиды р,р} с поверхностью верхней грани {ро, Nh}: J]3 = [2 2 0.5], dl4 = [0.667 2 О.ЗЗЗ], d23 = [2 2 2], J24 = [0.667 2 2.333]. Отрезки пирамиды pt pi, pt dti, pt du, pi du, pi du находятся в воздухе и виднь наблюдателю без искажений. Отрезки du pi, du pi, du pi, du pi и pi pi, находящиеся в воде, имеют преломления на бесконечных плоскостях {ро, Nt}, {ро, А'ь} и {ро, NP}. т. к. для всех их точек q выполнены все условия в (1.158): v4 < 0, or = 3 > 0, Oh = 1 > 0, оР = 2 > 0 => or < 0, v? оь < 0, v4 оР < 0; пп = л» = 1.33 gf - 0.598 < лп, gh = 0.964 < пп, gP - 0.845 < пп. После вычисления по (1.155) и (1.156) преломлений подводных отрезков они от- секаются полигонами ближних к наблюдателю граней аквариума. Проиллюст- рируем это на примере ребра pi pi. Точки pi и pi имеют следующие преломления на плоскостях фронтальной, горизонтальной и профильной граней аквариума: РЗГ=[3.9 1.45 3], рзь = [3.583 2 1.875], ^р=[з 1 1], /4г=[0.9 0.45 З], рдц =[1.166 2 2.749], Р4Р=[3 0.781 3.342]. Рис.1.75
Геометрические основы компьютерной графики 135 После отсечения отрезков P3fP4f, РзьАю РзрР4р полигонами соответствующих граней получим отрезки, изображенные пунктиром на рис. 1.75, а. Конечный результат расчетов, выполненных с помощью программы MathCAD, показан на рис. 1.75,6. Там же изображены преломления задних ребер аквариу- ма в трех его ближних гранях, вычисленные аналогично преломлениям ребер пирамиды.О □ При ближнем наблюдателе найдем на плоскости {ро, N} такую точку q', что- бы преломленный в ней луч прошел точно через точку 5 (рис. 1.76). В отличие от случая с дальним наблюдателем здесь нельзя сразу найти значение g = sin(y). Опустим из точек q и 5 перпендикуляры на плоскость {ро, N} до пересечения с ней в точках o' = q+((p0-q)oN^, P' = S + ((pq-S)oN^. (1.159) Вычислив расстояния </ = |р' - о'|, - \о' - ql, hs - |р' - 5|, составим уравнение с одним неизвестным g для суммы d = d4 + ds длин отрез- ков d4 = h4 tg(a) и ds = hs tg(y): g |o-_g| + _g |p'_5|=|p'_o-|. (1.160) V«n-g2 Vi-g2 Ввиду отсутствия аналитического решения оно должно искаться каким-либо численным методом. В качестве начального приближения можно использо- вать значение (о> _ |р'-°1 8 М’
136 Глава ’ соответствующее а = у и прохождению луча от q до S через точку с'. Поел, решения нелинейного уравнения (1.160) найдем соотношение длин отрезков 8 = d4! ds, наблюдаемое на плоскости преломление q' = о'+ a и аналогичную (1.157) виртуальную точку </п: 6 = пт V«n-g2 S-<7 (1.161 Рассмотрим условия существования преломленного луча: • при /л = т луч от точки q до точки S’ идет без преломления (а = у) по крат- чайшей прямой {q, S}, пересекающей плоскость в точке с'; • при «1 > П2 точка q' смещается в сторону точки о' в такое положение, где sin(y) / sin(a) = пп > 1; • при т < П2 всегда найдется положение точки между точками с' и р' с со- отношением углов sin(y) / sin(a) - пп < 1. Отличие от варианта преломле- ния с дальним наблюдателем заключается в том, что угол преломления у для различных точек q не фиксирован, а образуется согласно закону Снел- лиуса—Декарта (1.141) таким образом, что все виртуальные точки qn вид- ны наблюдателю в конусе с углом раствора 2arcsin(«n). Вне этого конуса наблюдается эффект полного внутреннего отражения. Таким образом, решение задачи преломления на плоскости действительно при т?о < О, где vq ={q~po)°N, о = (S-р0)°М (1.162) Построение преломления отрезка ab на плоскости {/>о, N} требует анализа че- тырех вариантов взаимного расположения концевых точек отрезка а и b от- носительно плоскости и наблюдателя, отраженных в табл. 1.8: Таблица 1.8 а ~~~ _ V;,O < 0 > 0 уао < 0 [o', b'] [o', J] тао > 0 ]d,b’} — • наблюдатель видит полное преломление a'b', если оба конца отрезка распо- ложены с ним по разные стороны от плоскости; • преломление отсутствует, если оба конца отрезка и наблюдатель распо- ложены по одну сторону от плоскости;
Геометрические основы компьютерной графики 137 • в двух случаях наблюдается неполное преломление q'd при пересечении от- резком ab плоскости (ро, 7V} в точке <,=й+КцМ(6_й)бо6. Пример 1.15. Фотокамера лежит в воде на дне круглого бассейна радиусом R = 5 м на глубине Л = 2 м и смещена от центра на расстояние г = 3 м. Над бас- сейном построен купол в виде каркасной полусферы радиусом R с угловым ша- гом параллелей и меридианов, равным 30° (рис. 1.77). Рассчитать изображение купола в камере. Рис.1.77 Решение. Зададим систему координат с началом в центре поверхности воды и юзицией камеры 5 = [г -Л о]. Плоскость преломления имеет нормальное описание {ро, N} с элементами р$ = [О 0 0]h7V=[0 1 о]. Параметрическая модель гладкой поверхности полусферы приведена в (1.129, я): р(/,т)= /?[sin(z)sin(x) cos(z) sin(z)cos(x)] V/ e [0, л / 2], т e [0, 2л]. Для получения узлов каркаса — точек пересечения п = 3 параллелей и m = 12 ме- : идианов — выполним дискретизацию параметров: --- ---- 2 л I, = i л, = j Дт V/ = 0, п, j = 0, т, , Дт = —. 1п т Тогда узлы будут размещены в точках qhj = p(ih т,), z-я параллель образована со- единением отрезками узлов qp q„„, а j-ый меридиан — узлов qo, -г- qnj. Решая уравнения (1.159)—(1.162) при пП = 1 / 1.33 = 0.75 для каждой точки qih по- лучим точки q'tj и узлы виртуального каркаса q^. Соединяя их в порядке, анало-
138 Глава 1 гимном соединению узлов в меридианы и параллели, получим изображения преломления каркаса на поверхности воды и виртуального каркаса (рис. 1.78,«). Рис.1.78 На рис. 1.78, б преломление изображено так, как его видит подводный наблюда- тель. Радиус окружности, заключающей в себе все преломленное изображение, равен 2.28 м, а угол раствора конуса видимости с учетом глубины залегания на- блюдателя h = 2 м составляет 2arctg [ | ~ 2arcsin(«n) = 97.5°. □ I h J
Глава 2 Г еометрические преобразования В этой главе мы рассмотрим законы движения геометрических объектов на плоскости и в пространстве, а также методы изображения объектов и сцен на экране дисплея в различных ракурсах и проекциях. Цель изучения данных вопро- сов— овладение математическим языком описания динамики и визуализации. Профессиональный художник интуитивно чувствует, как нужно изображать объемный мир на плоском холсте. Реалистичностью экранного изображения компьютерная программа обязана математически строгому расчету фаз движе- ния объектов на основе закономерностей геометрических преобразований. Геометрическое преобразование — это отображение р' = f(p) точки р е R" п- мерного пространства образа в точку р'е R” «'-мерного пространства прообра- за. Геометрические преобразования делятся на нелинейные (например, отражение в кривом зеркале) и линейные. Линейное преобразование точки описывается век- торным уравнением р' = рА + В (2-1) с матрицами преобразования Ае R"x” и Be Rlx" , не зависящими от векторар. В зависимости от размерности пространств п, п' и свойств матрицы А линейные преобразования делятся (рис. 2.1) на невырожденные (аффинные) и вырожденные (проективные). Свойства аффинного преобразования (АП): п = п', rang(J) = п, что означает квадратность и невырожденность матрицы А. Существование обратной матрицы А~} позволяет по точке прообраза р' восстановить точку об- раза р: р-(р'-В)А~1. (2.2) При проективном преобразовании т < п и не существует обратной матрицы А~1, поэтому однозначное восстановление образа по прообразу невозможно из-за поте- ри информации об одной или нескольких координатах образа.
140 Глава 2 Рис. 2.1 2.1. Аффинные преобразования 2.1.1. Основные понятия и соотношения Аффинное преобразование (от англ, affinity — родство) имеет следующие свойства: □ отображает «-мерный объект в «-мерный — точку в точку, линию в линию, поверхность в поверхность; □ сохраняет параллельность линий и плоскостей; □ сохраняет пропорции параллельных объектов— длин отрезков на парал- лельных прямых и площадей на параллельных плоскостях. Эти свойства позволяют строить прообразы полигонов на плоскости и полиэд- ров в пространстве по конечному набору т точек их вершин: Далее вершины р- соединяются прямыми линиями (ребрами) в нужном порядке. Система вершин и ребер составляет каркасную (проволочную) модель полиэдра. Для получения объемной модели определяются и закрашиваются видимые грани. Преобразование вектора V - pi-p\, соединяющего точки р\ и pi, V' = Р2~р'\ - р^А + В-Р\А-В = (Р2 ~Р})А = УА (2.4) показывает, что преобразование В, воздействуя на оба конца V, не влияет на Р.
Геометрические преобразования 141 Любая комбинация N последовательных АП At,В, А2,В2 4n,bn Ро Pl P/v> где/л =ро At + В,pi - pi А2 + Bi = ро Ai Ai + B\ Ai + В2И по индукции N N N P?v =РоПА + ЦА П4/~PoA + B> (2.5,a) ,=1 ,=i j=j+i j<N A,В эквивалентна одному АП р0 —» pN с матрицами преобразования А = Ai А2... An, В = (... (BiA2 + Bi) Аз + ... + B^i) An + BN. (2’5’ Этот алгоритм использует операции сложения и умножения матриц. Он доста- точно трудоемок в расчете матрицы В. Комбинация N преобразований вектора V согласно (2.4) и (2.5) также не зависит от наличия в этих преобразованиях переносных составляющих: (2.6) i=i С целью упрощения и унификации записи геометрических преобразований вво- дится понятие расширенного пространства (РП) R"+l, в котором (п + 1)-я коор- дината равна фиксированному числу — единице или нулю. Координаты точки р = [р 1] или вектора V = [р о] в РП часто называют однородными. Наиболее гачное. по мнению автора, объяснение этому спорному термину приведено в [35]. Преобразование (2.1) точки в РП принимает вид А О„х1 В 1 или р р С, где С = A О„х1 В 1 е ^(п+1)х(и+1) (2.7) есть матрица преобразования в РП с обратной матрицей А~1 — ВА~1 Оих1 1 уписывающей обратное преобразование в РП р = р' С 1, равносильное (2.2). Цепочка из N преобразований в РП _ С, ~ с2 cN ~ Ро Pl Pn
142 Гпава 2 эквивалентна одному преобразованию с матрицей c=f[Q. i=i (2.8» По сравнению с алгоритмом (2.5) матрица преобразования в расширенном про- странстве рассчитывается единообразно— с помощью только перемножения матриц. Унификация — основное преимущество выполнения АП в однородных координатах, позволяющее без лишних раздумий правильно записать и быстрс вычислить матрицу сложного преобразования С как произведение матриц эле- ментарных преобразований С,. Несмотря на то, что для этого требуется выход е пространство R"+l, количество арифметических операций в общем итоге даже снижается, да и программирование (2.8) гораздо проще, чем (2.5, б). К недостаткам преобразований в расширенном пространстве можно отнести: □ избыточную размерность расширенных матриц и векторов: □ фиксированные элементы последнего столбца [о ... О if, потребляющие машинные ресурсы; □ необходимость контроля и коррекции фиксированных элементов после мат- ричных операций в связи с возможным накоплением погрешностей машинно- го округления. В отличие от (2.3), одновременное групповое преобразование точек может быть выполнено по более простой матричной формуле Р\ Рт (2.9) Преобразование вектора V = pi-pi согласно (2.4) и (2.7) выполняется в РП сле- дующим образом: А О«х1 В 1 [Г о]=[г 0] или V' = V С. (2-10) Смещение произвольной точки р при ее преобразовании по (2.1) равно d{p)-p'-р-р(А -Е„) + В. Точку рИ, остающуюся в процессе АП неподвижной, можно найти, решая уравне- ния рн =рИА + В или d(pH) - О„: рн = В(Е„-А)'. (2.11) Условие существования точки р»— невырожденность матрицы Е„-А. Точка, неподвижная при всех допустимых значениях матриц А и В, называется центром преобразования.
Геометрические преобразования 143 Невырожденное преобразование прямой и плоскости, описываемых в неявной форме векторным уравнением pF1 =0 , изменяет их матрицу F следующим образом: p'F'1 = pCF'T = pFT =0 F = F'CT, (2-12) Читателю предлагается самостоятельно убедиться, что перенос плоскости из при- мера 1.10, имеющей вектор коэффициентов неявной формы С = [б 3 2 -б], в начало координат с помощью любой из матриц II ст 1 000' 0 10 0 0 0 10 -1 0 0 1 ,С2 = ’1 0 0 О' 0 10 0 0 0 10 0-201 >Сз = '1 0 0 0' 0 10 0 0 0 10 .° 0 ~3 L дает вектор F' = [б 3 2 о]. Важным свойством линейных преобразований является равенство модулей опре- делителей ||Л|| = ||С]| матриц АП изменению площади (в R2) и объема (в R3) преоб- разуемого объекта, что позволяет быстро вычислять эти важнейшие параметры геометрических фигур по известным их исходным значениям и матрицам преоб- разований. Знание координат (п + 1)-ой пары точек образа и прообраза, не лежащих в про- .транстве R"-1, позволяет вычислить матрицы С и С-1 методом парных точек: (2.13) Здесь обязательно нужно контролировать последние столбцы полученных матриц. Часто бывает удобнее оставить объект неподвижным, а преобразованиям под- вергать систему координат. Это пассивное АП описывается матрицей Ск = С1, обратной к матрице С такого же активного преобразования объекта. Дополним метод парных точек (2.13) формулами расчета матриц прямого и обратного пре- образований СК Ск (2.14) в которых Pi+Pn+i и Pi+p'n+i — расширенные формы одноименных точек в исходном и конечном положениях СК. После вычисления матрицы Ск любая точка р, имеет в новой СК координаты р' = /5,СК, а любой вектор V - pi-р\ пре- образуется в вектор Й' = ЙСК. (2.15)
144 Глава 2 2.1.2. Элементарные аффинные преобразования Все множество аффинных преобразований может быть сведено к следующим элементарным преобразованиям (ЭП). 2.1.2.1. Перенос Перенос (transfer) всех точек объекта на вектор tsp в неподвижной СК (преобразования / на рис. 2.2, а и б) описывается уравнением р'=р + tsp и матрицами переноса A=En,B~tsp, T(tsp) = Еп Еп Олх1 -tSp 1 = 7’Ч(Д^). (2.16) 0/7X1 I Переносное смещение d - tsp не зависит от положения точки. Неподвижная точ- ка согласно (2.11) удовлетворяет уравнению рн О„хл = tsp. При ненулевом переносе tsp О„ она отсутствует, а при tsp = 0„ все точки про- странства неподвижны. Определитель матрицы переноса |7'| = 1. 2.1.2.2. Масштабирование Масштабирование (растяжение, сжатие, отражение) вдоль осей координат опи- сывается координатными уравнениями х' = тхх, у' - т}.у, z' - m.z с коэффициентами тх, ту и т. — диагональными элементами матриц масштаби- рования'. Рис. 2.2
геометрические преобразования 145 При = -1 точка отражается вдоль оси со е {х, у, z] от координатной плоско- сти со = 0. Если все коэффициенты и» = my = tn. = -1, то точка кососимметрично отражается относительно начала СК. На рис. 2.2 изображены операции: □ масштабирования 2 в R2 матрицей Л/(2, -1); □ отражения 3 в R2 вдоль оси х матрицей М(-\, 1); □ отражения 4 в R3 вдоль оси у (от плоскости xz) матрицей Л/(1, -1, 1); □ отражения 5 в R3 от оси z матрицей М(-\, -1, 1); □ отражения 6 в R3 от начала координат матрицей Неподвижная точка, подвергаемая масштабированию, удовлетворяет уравнению рн diag[l-w?x 1-ту j 1-/иг]=О„ . При тш = 1 неподвижны все точки на оси со. Центр масштабирования находится з начале координат, т. к. только точка рн = О„ остается неподвижной при произ- вольных масштабных коэффициентах тш. Масштабирование с нечетным числом отрицательных коэффициентов изменяет "опологические свойства преобразуемых объектов. В частности, направление об- хода вершин полигона при таком масштабировании меняется на противополож- ное. Возможность подобных эффектов необходимо предусматривать в алгоритмах, равильность работы которых зависит от направления обхода. Примером может .лужить задача определения видимости плоской грани полиэдра по направлению ее рассчитываемой нормали, зависящему от направления обхода вершин полигона грани. Если оно положительно и нормаль внешняя, то грань видима. Зеркальное тражение полигона этой грани имеет отрицательное направление обхода и внут- реннюю нормаль, рассчитываемую по тем же формулам, что и нормаль самой гра- -•и. Таким образом, отраженная грань, реально видимая в зеркале, будет иденти- фицирована программой как невидимая и не отобразится на экране. Определитель матрицы масштабирования равен |Л/| = ту т.. У матрицы от- ражения с коэффициентами тш = ±1 он равен |Л/| = (-1)*, где к— число инверти- руемых координат преобразуемой точки. Например, при отражении вдоль одной хн получим |Л/| = -1. В результате инвертируются направления обхода всех от- ражаемых полигонов без изменения их площадей, а также объемов полиэдров. При неравных масштабных коэффициентах преобразование масштабирования изменяет углы между векторами, площади, объемы и форму геометрических фи- ;>р. Неравномерное растяжение или сжатие вдоль осей координат— простей- ший способ получения эллипса из окружности и эллипсоида из сферы. 2.1.2.3. Сдвиг Гдвиг (shift) вдоль направлений осей СК или их комбинации описывается сле- гающими координатными уравнениями и матрицами сдвига в R2 и R3: x' = x+sy Г 1 $ ’ * 7 => S2 = (2.18, а) У =y + syxx 1/ху 1 .
146 Гпава 2 x' = x + Sxyy + SxzZ Г 1 Sy* Szx y' = SyxX + y + SyzZ => S3= 1 szy z = szxx+szyy+z |_5xz syz 1 (2.18,6) Параметры сдвига задаются недиагоналъными элементами матриц Si и &. Коэф- фициент матрицы сдвига Sg есть единица смещения вдоль оси I, пропорциональ- ного j-ой координате. Сдвиговое смещение d = p(S„-E„) (2.19) зависит от положения точки р, что и отличает его от переноса. Неподвижная точка удовлетворяет уравнению рн(5„ - Е„) = О„. Если в матрице S„ все недиагональные элементы со-ой строки — нулевые, то пр. сдвиге неподвижны все точки, лежащие на оси со. Две нулевые строки матриць S„ - Е„ дают множество неподвижных точек на координатной плоскости. Центр сдвига при произвольных параметрах матрицы S„ находится в начале координат. Важно отметить, что если в матрице сдвигового преобразования элемент Sg * ( не единственен, то векторы смещения (2.19) не параллельны, а сдвиг осуществля- ется одновременно вдоль нескольких осей СК, и его нельзя заменить последова- тельностью одноосевых сдвигов: 1 0 1 syx sxy I]|о 1 I sxy syx 1 syx 1 + 1ЛУ 1 Преобразование сдвига может иметь вырожденную матрицу с нулевым опреде- лителем, например, 1 О 1 О 1 Размерность пространства, натянутого на точки сдвинутого в Rn объекта, равна рангу матрицы 5„. Следовательно, при rang(S„) < п преобразование сдвига не является аффинным. На рис. 2.3, а приведены примеры преобразований сдвига на плоскости с матри- цами (2.18, а) и сдвиговыми смещениями (2.19): П отрезка (У) матрицей 52 = 1 -2 О I с параллельными векторами смещений d = [-2y о] || х° и множеством не- подвижных точек, лежащих на оси х;
Геометрические преобразования 147 □ квадрата (2) и круга (3) матрицей с непараллельными векторами смещений d = [-2y х]. Рис. 2.3 На рис. 2.3, б выполнены преобразования объемной фигуры в пространстве: J сдвиг (/) вдоль оси у матрицей 1 -2 О $з=0 1 0 I 0 0 с параллельными векторами смещений d = [о -2х 0] 11 у° и множеством неподвижных точек, лежащих в плоскости yz; □ сдвиг(2) матрицей 1 0 0 1 0 -1 1 с векторами d = [- у -z -z о]; сдвиг (5) вырожденной матрицей ^3 = о 1 о о 1 о ранга 2, в результате чего все точки прообраза лежат в плоскости x-z = 0.
148 Гпава 2 2.1.2.4. Вращение Вращение (rotation) точки на плоскости ху вокруг начала координат (рис. 2.4, а) описывается следующими координатными уравнениями: х' = rcos(a + <p)= х cos(<p)~ ysin(<p} у' = г sin (а + <р) = х sin (<р)+ у cos(<p), откуда следуют матрицы вращения в положительном (против часовой стрелки) и отрицательном (по часовой стрелке) направлениях: ««.МЛ sin(cp) cos((p) > Л("ф)= cos(<p) sin(<p) -sin(<p) cos(<p) (2.20) = /?T(<p)= 7?-'(<p). Рис. 2.4 При вращении точки в пространстве вокруг осей правой системы координат (положительные направления вращений удовлетворяют правилу буравчика и показаны на рис. 2.4, б) матрицы вращений получим из соответствующих урав- нений: □ х" - х, у' - y’cos(<pv) - zsin(<pv), z' - ysin(<pv) + zcos(<pv), 1 О Лг(<Рх) = О cos(<pj -sin(<pj sin(<pJ > ^(-<px)=/?x’(<px); (2.21, a) cos(<pj О 0 □ x' - xcos(tpy) + zsin((p;,), y' = y, z’ - -xsin((p>) + zcos(<p>), -sin^J 0 cos(<pj «Ру) ('Ч’у)’ (2.21,6) О x' - xcos((pz) - J’sin(<p_), y' = xsin(<p,) + j cos((p.), z' = z,
Геометрические преобразования 149 cos(<pz) stn(<p_) О -sin(<pz) cos(<pz) О (2.21, в) О О 1 Преобразование вращения не изменяет углы между синхронно вращающимися векторами, площади, объемы и форму геометрических фигур, а также топологи- ческие свойства полигонов. Определители всех матриц вращения равны единице. Благодаря свойству ортогональности R1 R = RR1 = Е„ при изменении знака угла вращения на противоположный обращение матриц вращения заменяется их транспонированием: /?-'(<р)=/?т(<р). Векторы смещения вращательного движения d = P(R^) - Е„) (2.22) образуют цилиндрическое векторное поле, ось симметрии которого <о содержит множество неподвижных точек. Центр всех вращений на произвольные углы во- круг любых осей координат располагается в начале СК. Строго говоря, вращение не является элементарной операцией, т. к. его можно представить последовательностью масштабирования и сдвига: cos(<p) sin(<p) cos(ф) О I Г 1 tg(<p)-l — sin(cp) cos(<p) 0 cos(<p) — tg(<p) 1 Тем не менее ввиду простоты понимания, распространенности и важности места вращательного движения в системе геометрических преобразований целесооб- разно считать вращение элементарным, а не сложным преобразованием. 2.1.2.5. Табличный расчет тригонометрических функций Весьма важным в практике применения матриц вращения является быстрый рас- .ет тригонометрических функций угла и наоборот — угла по значениям его три- гонометрических функций. Актуальность этой проблемы объясняется присутст- вием преобразования вращения практически в каждом сложном преобразовании и высокой частотой выполнения этой операции, в том числе и во вложенных циклах. Использование встроенных в языки программирования функций cos и sin, вычисляемых суммированием рядов Тейлора, конечно, заманчиво, но не- практично из-за их невысокого быстродействия. Еще меньшая скорость сходимости у обратных тригонометрических функций, из которых во встроенной библиотеке обычно имеется только функция arctg. От-
150 Гпава 2 сутствующие функции arcsin и arccos можно вычислить либо создав собственные варианты этих функций asin(x) = if | x |< 1: arctg acos(x) = if x: arctg (2.23, a) (2.23, 6) либо суммируя до сходимости по заданной погрешности е соответствующие ря- ды Тейлора: ( \ 1 3 3 5 arcsin(x)= хч---х ч-------х 2-3 2-4-5 ~ 2А+1 3-5 7 ч---------X 2-4-6-7 2* , ^->2Л + 1 А=1 i=2 2 ’ 2 ’ arccos(x) = y - arcsin(x). Оба ряда у границ области |х| < 1 сходятся очень медленно (более 4000 итераций) и с недопустимо большой ошибкой (до 0.0086 рад, т. е. 0.5°) при абсолютной по- грешности е = 10“6. В настоящее время наиболее быстрым и популярным считается табличный метоо вычисления тригонометрических функций с кусочно-линейной интерполяцией между узлами сетки. Суть его в том, что при запуске прикладной программы один раз с высокой точностью вычисляется N + 1 узловое значение наиболее вос- требованной в машинной графике монотонно убывающей функции с(х) = cos(x) в интервале х е [0, л / 2] с шагом Ах = л / 2N. Таким образом, в оперативной па- мяти компьютера создается 2 х (Л7 + 1)-матрица (таблица) узлов сетки х,- = (Ах, с, = cos(x,) V/ = О, N. При вычислении тригонометрических функций cos(x) и sin(x) произвольный ар- гумент х циклическим смещением х = х - 2sgn(x)n приводится в интервал [-л, л]. Далее используются известные тождества, сужаю- щие интервал до [0, л / 2]: cos(x) = c(x), cos(x) = -с(л - x), cos(x) = c(-x), cos(x) = -c(n + x), sin(x) = с(л / 2 - x); sin(x) = c(x - л / 2); sin(x) = -с(л /2 + x); sin(x) = -с(-л / 2 - x). (2.24, a) (2.24, 6) (2.24, e) (2.24, г)
Геометрические преобразования 151 Вычисляя значение с(^) по аргументу 0<£<л/2, определим индекс i = [^/AcJ, при котором х, < < х1+, (рис. 2.5). Тогда приближенное линейно интерполиро- ванное значение функции равно с(£)=с< +(g+i ~ci) г-' • Рис. 2.5 Допустим, составлена таблица {х„с,} с крупным шагом Дх = 0.01745 рад = 1° и задан аргумент х = -14.2 рад. Сместив его на два периода, получим х = -14.2 + 4л = -1.6336 рад = -93.6°. Вычислим по (2.24, г) функции cos(x) и sin(x): Д £ = л + х - 1.508 рад => i = 86, «6 = 0.06976, m = 0.05234, откуда -<"(0^-0.062789, в то время как cos(x) = -0.069792. Абсолютная и относительная погрешности интерполяции составили 2.25 • Ю-6 и 3.59 • 10~5; “1 £, = -л/2-х = 0.06283 рад => z = 3, сз = 0.99863, С4 = 0.99756, откуда -с(О» -0.99799, тогда как sin(x) = -0.998027. Абсолютная и относительная погрешности ин- терполяции составили 3.648 • 10~5 и 3.655 - 10-5. Расчет обратных тригонометрических функций 0 < arccos(«) < л (рис. 2.6, а) и -- / 2 < arcsin(«) < л / 2 (рис. 2.6, б) аргумента -I < а < 1 начинается с поиска ин- декса z, для которого с,.ц < |«| < с,. С помощью линейно-интерполяционной функции L(a,i) = xl +——— Дх Q+l -Q
152 Гпава 2 получим приближенные значения , ч f при «>0; arccos(a) = ( ( . [ 7Г-£(-я,/) при а<0; . z ч [ тг/2 - L(a,i) при п>0; arcsm(a)=( , . , [ L(~ a,i)-n/2 при a<0. (2.25, a) (2.25, б) Рис. 2.6 Вычислим по таблице {л„ с,}, i = 0,90, функции arccos(«) и arcsin(n) для a = -0.98. Так как ci i = 0.982 и сп = 0.978, то i = 11. Тогда по (2.25) находим arccos(n) «л - L(-a, i) = 2.941445 рад; arcsin(n)~ L(-a, i)-n!2--\.370648 рад. Точные значения углов равны, соответственно, 2.941258 рад и -1.370461 рад Даже при такой крупной сетке, построенной с шагом 1°, максимальная абсолют- ная погрешность вычисления обратных тригонометрических функций на грани- цах интервала -1 < a < 1 составила 4.767 10 4 рад или 0.03°. В заключение приведем примеры нелинейных элементарных преобразований.
Геометрические преобразования 153 Пример 2.1. Получить матрицы кручения и изгиба вокруг координатных осей. Решение. Деформация кручения характеризуется линейно возрастающим углом вращения слоев материала, ортогональных оси кручения, при удалении от не- подвижного основания. Кручение так же соотносится с вращением, как сдвиг с переносом. Вывод матрицы кручения вокруг оси х аналогичен выводу матрицы (2.21, а). Пусть а— погонный угол кручения, т. е. дополнительное вращение, приходя- щееся на единицу длины (на рис. 2.7, а изображено кручение параллелепипеда при а = 9°). Тогда координатные уравнения и матрица кручения имеют вид х' = х Г1 у' = ycos(ax)-zsin(ax) => B^.(a)= О z/ = ysin(ax)+zcos(ax) О О cos(ax) -sin(ax) О sin(ax) cos(ax) /?x(ar). Аналогично получаются матрицы кручения вокруг осей у и z: и$(Р) = я,(РЯ FK(y) = Rfyz). Рис. 2.7 Кручение превращает прямую ро + Vt, не ортогональную оси кручения, в винтовую •ривую. Следовательно, это нелинейное преобразование не является аффинным. В отличие от кручения при деформации изгиба угол поворота точки вокруг оси изгиба пропорционален ее удалению. Матрицы преобразования изгиба вокруг - оординатных осей, зависящие от погонных углов a, р и у (на рис. 2.7, б изобра- жен изгиб параллелепипеда вокруг оси z с коэффициентом у = 4.5°), равны Dx(a)=/?/a7/ + z2l Dy(p)=/?Jp7x2+z2l Dz(y)=Rz(yJx2+y2
154 Гпава 2 Изгиб превращает прямую линию ро + И/, не параллельную оси изгиба, в спи- ральную кривую (см. рис. 1.31, а). Следовательно, и это нелинейное преобразова- ние не является аффинным. □ 2.1.3. Сложные аффинные преобразования Сложным (комбинированным) называется преобразование, реализующее цепоч- ку не менее, чем из двух элементарных преобразований. Отметим, что почти все аффинные преобразования не коммутативны, т. е результат цепочки преобразова- ний зависит от порядка их выполнения. Для цепочки из двух ЛП с матрицами Ci и Сг некоммутативность означает C1C2# С2С1. Например, комбинации вращения объекта вокруг оси со е {х, у, z} на угол ср и переноса на вектор Д/> имеют разные матрицы сложного АП: Лш(ср)г(Дд) = Яш(ф) О„х1 Е, _°1х„ 1 JL^ * 7'(Др)я(и(ср) = О«х1 _ Лш(ф) О„х| 1 ^со(ф) О«х1 ДрЛш(ср) 1 Др п Как исключение, попарно коммутативны лишь преобразования перенос - перенос и масштабирование — масштабирование-. Т(\р^Т(\Р2) = \тх, Шу, т2 Еп Др1 При выполнении преобразований не теряйте из виду систему координат! Напри- мер, вращения куба вокруг оси \, а затем вокруг оси у, оставшейся неподвиж- ной, дают матрицу R, R, и конечное положение куба, показанное в конце цепоч- ки 1 - 2 на рис. 2.8. Если забыть направление оси у и второе вращение куба сде- лать вокруг отклоненного ребра, которое вначале было вертикальным ((цепочка 1 - 5)), то матрица полного АП с учетом вращения системы координат вокруг оси х, поворота куба и возврата в исходное состояние будет равна RX\R~XRVRX)= R,.RX # RXR.,. л \ л у х / ух х у Разные конечные положения кубов наглядно доказывают, что преобразования вращения не коммутативны.
Геометрические преобразования 155 Рис. 2.8 2.1.3.1. Методы расчета матрицы сложного преобразования Рассмотрим два метода расчета матрицы сложного преобразования С в задачах с произвольным расположением осей вращения, прямых и плоскостей отражения. □ Метод разложения (декомпозиции) сложного движения объекта на N элемен- тарных движений, описываемых матрицами С, относительно координатных осей и плоскостей неподвижной СК. Тогда по (2.8) получим .V с = ПС 1=1 Разложение процесса на составные части — отличительная черта "методов серого ящика", в которых форма (начальное и конечное состояние объекта) наполняется содержанием (промежуточными состояниями и способами их достижения) не единственно возможным образом. Задача и искусство про- граммиста состоит в оптимизации состава ЭП. Полезным приемом, часто облегчающим выбор ЭП, является временный пере- вод системы координат матрицей Ск в такое положение, где оси вращения, прямые и плоскости отражения становятся координатными. В измененной СК выполняются необходимые элементарные АП с общей матрицей Q. Восста- новление системы координат в исходное положение описывается матрицей 1 Таким образом, сложное АП имеет матрицу с=скеск-‘.
156 Гпава 2 При расчете матрицы Ск необходимо помнить об инвертировании знаков па- раметров элементарных преобразований — вектора переноса начала коорди- нат и углов вращений СК вокруг ее осей. □ Метод парных точек, определяющий матрицу АП по трем (на плоскости) или четырем (в пространстве) парам линейно независимых точек образа и прооб- раза. Это принципиальное безразличие к способам перехода от начального к конечному состоянию объекта — явный признак "метода черного ящика". Обращаемые в (2.13) и (2.14) матрицы всегда будут невырождены при усло- вии, что тройки точек не коллинеарны, а четверки — не компланарны. Наи- лучшая обусловленность матриц достигается при ортогональности систем векторов, построенных на выбранных точках образа и прообраза. Читателю предлагается оценить эффективность метода парных точек на сле- дующих примерах. & Пример 2.2. Рассчитать матрицу преобразования треугольника р\pi pi в тре- угольник /?4psрь (рис. 2.9). Решение. Подставив вершины треугольников в (2.13), сразу получаем необходи- мую матрицу АП: -4 2 ’Г 2 з Г -1.375 1.25 О' с= -3 -1 1 4 -1 1 = -1.125 1.75 0 -1 1 1 -1 5 1 -1.25 4.5 1 Вот и все. А теперь попытайтесь угадать последовательность и параметры эле- ментарных преобразований, переводящих треугольник pt pi pi в треугольник рьрьрь, вычислить матрицы этих преобразований, сравнить их произведение с вышенайденным результатом — и вы почувствуете разницу методов! □
Геометрические преобразования 157 & Пример 2.3. Рассчитать масштабный коэффициент цэ и матрицу Сэ пропор- ционального отображения прямоугольного окна {Xmin 4- Лщах, Jniin 4- J'rnax} В ПЛОС- КОСТИ ху МСК в центр окна ЭСК {left 4- right, up 4- down] (рис. 2.10). Рис. 2.10 Решение. Обозначим коэффициенты прямоугольности окон в МСК и ЭСК: Tmax ~Tmin _ down-up *max-*min ’ ’ right-left' \ пропорциональных окон коэффициенты прямоугольности р и рэ равны, а окно МСК отображается во все окно ЭСК. В этом случае матрица Сэ наиболее просто находится методом парных точек (2.13) при п — 2. Хотя задача решается на плоскости, но с целью использования ее результата для преобразований в про- странстве выберем четыре пары некомпланарных точек в МСК и ЭСК: Р1 = Ь-min >’min О] Лэ = № down °L Р2 = [*min Утах б] -4 р2э = [/e/Z up О], P3=knax Утах о] -> р3э = [ngA/ up О], 7° 7° “ z3 • Тогда *min Tmin ® 1 -1 left down 0 1 С, = xmin Утах ® I left up 0 1 Xmax Утах ® 1 right up 0 1 (2.26) 0 011 .° 0 1 1. 1 _ right-left _ down-up *max — *min Tmax-Train В случае непропорциональных окон получим матрицу Сэ методом разложения, выполнив цепочку элементарных преобразований исходного окна в МСК.
158 Гпава 2 Шаг 1. Перенос центра окна в начало МСК матрицей т — т([ г v о!) гпр г _ xmin +-vmax _ J’min +J’max (2.27, л) Л-Ml xu о];,гдехц-- , >’ц-------- Шаг 2. Пропорциональное масштабирование окна по осям координат и измене- ние направления оси у матрицей A/=diag[p3 -цэ 1], где рэ right - left ------------ при рэ > р; Xmax xmin down - up ------------ при рэ < р. -Утах .Уmi и Шаг 3. Перенос центра окна в точку р31( в ЭСК матрицей гг о left + right _up + dow ^2 — \ Iх цэ Л’цэ OJA r^e хиэ > 7’цэ — Матрица полного преобразования равна (2.27, б) (2.27. в) Мэ 0 0 О' Сэ =7jA/72 = 0 "Рэ 0 0 0 0 1 0 хцэ — М-ЭХЦ З’цэ *‘М-э7?ц 0 1 (2.27, г) Коэффициенты этой матрицы дают прямые уравнения пересчета координат точ- ки из МСК в ЭСК (координата z3 вектора /?э = рСэ при этом не используется): Хэ — Хцэ + Цэ(Л" “ Хи), Уз — J'in — Цэ(у У и). (2.28) Описанный алгоритм гарантирует, что любое изображение в прямоугольном окне без искажений отобразится в любом желаемом окне дисплея, заполнив его максимально полностью и симметрично относительно центра. Если при расчете масштабного коэффициента рэ по (2.27, б) заранее неизвестны границы окна МС К, целиком вмещающего сцену, можно задать значение jx> = 40 из тех соображений, что один сантиметр экрана (40 пикселов) соответствует од- ной единице длины в пространстве МСК. Наконец, можно выбрать единицу длины в МСК равной размеру пиксела экрана 0.25 мм. Тогда рэ = 1, что сильно упрощает матрицу (2.27, г) и координатные уравнения (2.28): 1 О О О 0 0 о I о о ХЦЭ Х11 -1 о Уцз+Уц 0 1 , Хз = Хиэ - Хи + X, Уз = >'иэ + >‘и - у. (2.29)
'еометрические преобразования 159 Сравним методы вычисления матрицы сложного АП на примере весьма распро- гграненной операции изменения пространственной ориентации системы коорди- iam, заключающейся в совмещении начала СК с точкой о, а какой-либо коорди- натной оси, допустим, z— с направлением заданного вектора И* Оз (рис. 2.11). Положение других осей в измененной СК не регламентируется. Данное преобразо- вание применяется, например, в алгоритмах вращения (/) вокруг заданной прямой о, И} или отражения (2) от произвольной плоскости вдоль ее нормали И. Рис. 2.11 Решение задачи достигается за два преобразования. Перенос начала координат в точку о, описывается матрицей 7(-о). 2. Поворот оси z в направлении вектора V, выходящего из начала новой СК. Обозначим нерасширенную матрицу этого преобразования Л(К). Расширенная матрица полного преобразования СК равна С(о,Р)=7’(-о)л(г). Рассмотрим различные методы вычисления матрицы поворота Л(К). Метод разложения Алгоритм, основанный на методе разложения, рассматривается во многих учеб- никах по машинной графике [5, 26, 33, 34] и состоит в нахождении проекции V = [l’v К_] вектора Vна координатную плоскость л/ (у разных авторов вариан- ты алгоритма отличаются выбором плоскости проецирования) и выполнении звух вращений СК xyz (рис. 2.12): □ первое вращение вокруг оси у на угол а, у которого cos(a)= -р-, sin(a) = -j^-, где |v| = + И,2 . Система координат после этого занимает положение x'y'z', в котором ось z' совпадает с направлением вектора v;
160 Глава 2 □ второе вращение вокруг новой оси х' на угол -Р, у которого v К cos(p)=j—, sin(p) = -p7 Система координат после этого занимает требуемое положение x"y"z", в ко- тором ось z" совпадает с направлением вектора V. Рис. 2.12 Таким образом, матрица поворота СК по методу разложения равна ЯР(Ю = кЛ(Р). (23°) Всегда ли верно это решение? Очевидно, что оно не является таковым при |v| = О, когда К || _у°. В этом случае угол а не определен, а совмещение орта z° с векто- ром V достигается не за два, а за одно вращение СК матрицей ЯР(Ю = ^v(sgn(K,)90°). Однако, и при V#y° у метода (2.30) имеются скрытый недостаток и особенно- сти программной реализации, которые даже не обозначены и не обсуждаются в перечисленных выше учебниках: □ при расчете матриц вращения по (2.21) возможно использование неверных аргументов, вычисленных с помощью функции arccos в интервале [0°, 180°], в то время как углы изменяются в интервалах -180° < а < 180°, -90°<Р<90°. Так же некорректно определение угла а (но не р!) функцией arcsin в интервале [-90°, 90°]. Следовательно, угол а должен вычисляться с учетом знака его си- нуса, т. е. функцией (1.31) с векторными аргументами [гх Vz\ и [о 1]. Итак, в (2.30) углы вращений находятся следующим образом: (2.31)
геометрические преобразования 161 □ поскольку матрицам вращения требуются, собственно, не сами углы, а их коси- нусы и синусы, которые в рассматриваемой задаче явно выражены через эле- менты вектора V, то практичнее создать модификации матриц вращения (2.20) и (2.21) с двумя аргументами с и 5— косинусом и синусом угла вращения: (2.32) Эти матрицы рекомендуется использовать даже в тех случаях, когда исход- ным является угол вращения <р: вычислив один раз с = cos(<p) и a - sin(cp), под- ставить их в (2.32) вместо двукратного вычисления в (2.20) и (2.21); □ прямая подстановка и Id cos(a)=-pj-, sin(a) = -J^, cos(p)=£L sin(₽) = M P'l И в матрицы вращений (2.30) и их ручное перемножение приводит к весьма гро- моздкой записи матрицы АР(1/), которую автор здесь сознательно не приво- дит, дабы не искушать читателя этим порочным методом разработки алго- ритмов компьютерной графики. Во-первых, в процессе ручных выводов очень легко наделать ошибок. Во-вторых, вместо элегантного перемножения матриц в одной строке программы поэлементное описание матрицы АР(Г~) требует много строк — это путь к разбуханию программного кода, источник дополнительных ошибок и затрат времени на отладку программы. Матрицы некоторых сложных преобразований на плоскости, вычисленные ме- тодом разложения, приведены в табл. 2.1. Таблица 2.1 Преобразование Матрица преобразования I , Масштабирование I от точки о Т(-о}м(р1х,ту}т(р) = тх 0 0 ту (\-тх)ох ^-ту 0 0 )°у Отражение от точки о Т(-о)м(-\,-\)т(о) = -1 о о’ 0-10 2ох 2о.. 1
162 Гпава 2 Таблица 2.1 (продолжение) Преобразование Матрица преобразования Отражение от прямой {о, И} cos(a)=r4, sin(a)=-r^f- И И г(- о)«(- а)М (-1,1 )« (а ) т(р) = = 2sin2(a)-1 -2cos(a)sin(a X - 2 cosl a)sin(a) C ) l-2sinz(a) С Y 1 X ~ 2cos(a)(oAcos(a) + o(,sin(a)) Y = 2sin(a)(ovcos(a) + o;.sin(a)) Отражение от прямой у = ax + b о = Ьу°, а = arctg(rt), |л| < оо T (1-Г72И1 + О2 2оД1 + о2) -2ab/^ + a2} 7(1-1)л(с ) WG 2Z>/(1 с)т(^°)= + «2) o’ W) ° +«2) 1 Отражение от прямой х - а T -ах°)л/(-1, 1 )7’(ax°)= -1 0 o' 0 1 0 2a 0 1 Отражение от прямой у = b T (-Ьу°)м(\,-\} '1 0 O' 0-10 0 2b 1 Отражение от прямой у = х Л(45°)Л/(-1, l)«(-45°) = 0 1 o' 1 0 0 0 0 1 Отражение от прямой у — -х Л(-45°)Л/(-1, 1) Я (45°) = 0-10 -10 0 0 0 1 Вращение вокруг точки о на угол <р г(-о)л(ф)г(о)= X = ov(l - сг Y= о,(1 — с< cos(<p) sin(<p) 0 -sin(<p) cos(<p) 0 X Y 1 )s(<p)) + o,,sin(<p) >s(<p)) - ovsin(<p)
Геометрические преобразования 163 Таблица 2.1 (окончание) Преобразование Матрица преобразования Сдвиг вдоль прямой {о, V} cos(a)=7^-, sin(c/.)=— и и Г(-о)/?(-а) ' 1 0 О' sxy 1 0 0 0 1 Л(а)г(о) Матрицы сложных преобразований в пространстве приведены в табл. 2.2. Таблица 2.2 Преобразование Матрица преобразования Масштабирование от точки о = Т(^- о')м{р1х,ту, тх 0 0 ту 0 0 (l-wjox (l-wy)< mz )г(о) = 0 o' 0 0 mz 0 ^~mz)°z 1 Отражение от точки о Г(- о) м(-1,-1 -1)7(0) = -1 0 0 O' 0-100 0 0-10 2or 2ov 2oz 1 _ X у Z J Отражение от прямой {о. V] cos(a)=—, sin(cc)= —, V V cos(₽)=i^, sin(P) = -^, V = ^x2+^ №у°: Т(- o)Ry (- a)Rx (₽)Л1(-1,-1, 1К (- р)Лу (а) т(р ) VII/ Г(-о)л/(-1, 1,-1)г(о) = -1 0 0 o' 0 10 0 0 0-10 1ox 0 2o_. 1
164 Гпава 2 Таблица 2.2 (продолжение) Преобразование Матрица преобразования 7’(-о)Л/(1,-1,-1)Т’(о) = 10 0 0 0-100 0 0-10 0 2оу 2о, 1 r||z° т(-о)м(-1,-1, 1)Т’(о) = '-1 0 0 ( 0 -1 0 С 0 0 1 С 2ог 2о., 0 )' Отражение от плоскости {о.М cos(a) = -^-> sin(a)=-^-, V V eos(₽).^. sin(P)-^. V = Jn* + N* Т(- o)Ry (- а)/?х(₽)Л/(1, 1,-1)7Ц- р)ял, (a)T(o) *117° Г(-о)Л/(1,-1, 1)Т’(о) = '1 0 0 О' 0-100 0 0 10 0 2оу 0 1 7V || л°: 7’(-о)Л/(-1, 1, 1)Т’(о) = '-1 0 0 О' 0 10 0 0 0 10 2ох 0 0 1
Геометрические преобразования 165 Таблица 2.2 (продолжение) Преобразование Матрица преобразования ^|z°: 7’(-о)Л/(1, 1,-1)г(о) = ’1 0 0 O’ 0 10 0 0 0-10 0 0 2o_ 1 Вращение вокруг прямой {о, V} на угол <р cos(a)= —, sin(a)= —, V V ,, V cos(₽)=i^.sin(₽)=^, v = + V2 • s“ ~ sgnfVJ V#y°: Г(- o)Ry (- a)Rx (₽Я (<p)/?x (- ₽)/?, (а) т(о) = Г К/: г(-0)^^<р)г(0)= cos(<p) 0 -.s^sir^q)) 0 0 10 0 sin(<p) 0 cos(<p) 0 ox(l-cos(<p))- o o2(l-cos(<p))+ j ~syoz sin(ф) + syox sin(<p) = Г||х°: T(-o)Rx(sx(p)-T(o) = rl 0 0 O' 0 cos(<p) 5xsin(<p) 0 0 -5xsin((p) cos(<p) 0 o>,(l-cos((p))+ oz (1 - cos(<p))- ! + sxo2sin(<p) -5^о>з1п(ф)
166 Гпава 2 Таблица 2.2 (окончание) Преобразование Матрица преобразования = П^°: г(-о)Йг(уг<р)г(о) = cos((p) .s , sin (ср) 0 0 - j_sin((p) cos(<p) 0 0 0 0 10 ox(l - cos((p))+ Oy(l — cos(<p))— j + .v_o>, sin(cp) -j.oxsin((p) Экономичный метод разложения Экономичный вариант метода разложения заключается в вычислении вектора нормали =z°xrе ху и двух вращений системы координат (рис. 2.13): П на угол а вокруг оси z; П кратчайшего вращения на угол р вокруг новой оси у'. Рис. 2.13 Судя по интервалам изменения углов -180° < а < 180° и 0° < р < 180°, формулы их расчета и матрицы поворота следующие: а = if (|/V|:ang(y°, /v), о), p = arccos(z° о r), Jjp(Ю = A-(-a) Л,(-р). (2.33) Метод парных точек Для получения 3 х 3-матрицы Л(Р) методом парных точек найдем в пространстве три неколлинеарные точки, в которые перейдут концы ортов х°, у° и z° после
Геометрические преобразования 167 поворота системы координат (рис. 2.14). Одна из этих точек на конце вектора V— прообраз z°. В общем случае при K#z° выберем прообразы векторов у0 и х° на концах векторов нормали = z° х V е ху и бинормали И7 = Лгх И. Длины векторов N и W равны — это необходимо для неискаженного преобразования углов из СК x'y'z' в СК xyz. Подставляя точки образа {х°, у°, z0} и прообраза {И7, N, К} в нерасширенный вариант (2.14), получим 4(П= Особый случай — параллельность векторов К11 z°, при которой z° х К = О3. Специальный выбор векторов N = Ky°, И7=#хЙ=|К,|л0 обеспечивает ортогональность, равномасштабность и правую ориентацию трой- ки {IV, N,V} базисных векторов системы x'y'z' как при V ТТ z°, так и при Г TJ- z°. Эти три свойства необходимы для правильного отображения в СК xyz как величины, так и знака угла вращения, выполняемого в СК x'y'z'. Обобщая сказанное, запишем алгоритм расчета матрицы поворота системы коор- динат методом парных точек в следующем виде: WxK W = if( |z°or|<l: z°xr, ЛП(И)= (2.34, a)
168 Гпава 2 Метод парных точек позволяет сразу найти матрицу полного преобразования системы координат, равную Т(-о) Ап(У), без разложения на промежуточные пре- образования: Сравнение методов (2.30), (2.33) и (2.34) по критериям понятности, простоты вы- вода, краткости записи, вычислительной эффективности ставит впереди всех, по мнению автора, метод парных точек. К сожалению, все рассмотренные методы страдают условностью, т. е. зависимостью алгоритмов от особых случаев ориен- тации вектора V. Видимо, единый алгоритм для произвольных положений этого вектора отсутствует, а те методы, что предлагаются в учебной литературе — лишь частные случаи, не учитывающие особых ситуаций. Опыт курсового про- ектирования студентов под руководством автора показывает, что эти ситуации встречаются не так уж и редко. Внешне они проявляются во внезапном заверше- нии программы из-за попытки деления на ноль при обращении вырожденной матрицы. Гораздо проще, чем в Зб-варианте, вычисляется матрица преобразования систе- мы координат на плоскости. Допустим, требуется совместить начало координат с точкой о, а оси у придать направление вектора V (рис. 2.15). Такое преобразова- ние полезно делать при расчете отражения и масштабирования относительно произвольной прямой {о, И}. Рис. 2.15 Приведем без лишних рассуждений очевидные формулы расчета матрицы пре- образования системы координат Ск: П по методу разложения a = ang(y°,r), Ср(о,К)=7’(-о)л(-а); (2.35)
Геометрические преобразования 169 □ по методу парных точек N = га(-90°)= [vy (2.36) Пример 2.4. Построить отражение треугольника на плоскости с вершинами Р]=[о О], Р2=[0 1] и Рз=[2 О] от прямой линии, проходящей через точки Р4 = [з О] и р5 = [2 2] (рис. 2.16). Рис. 2.16 Решение. Вычислим направляющий вектор и нормаль заданной прямой линии: Г = р5-р4=[-1 2], W = r/?(-90°)=[2 1]. Последовательность действий для построения отражений р' исходных точек р, (i - 1,2, 3) может быть, например, следующей. Шаг 1. Получим по (2.35) матрицу преобразования системы координат методом разложения на два элементарных преобразования: перенос начала ко- ординат на вектор рь и вращение на угол а, у которого
170 Гпава 2 Второй вариант матрицы преобразования системы координат получим методом парных точек (2.35) по двум тройкам точек {л°,> °, О2} и {^б.р5,/м}: -0.2 0.4 0.6 О О I Читателя не должно смущать несовпадение полученных матриц: видимо, матри- ца СкР эквивалентна иной, чем в матрице Скп, последовательности элементарных преобразований, которые, по сути дела, нас не интересуют. Главная цель— по- лучение матрицы преобразования системы координат— достигнута с помощью метода парных точек быстрее и проще. Шаг 2. Отражение вдоль оси х' описывается матрицей М = diag[— I 1]. ШагЗ. Восстановление исходной системы координат описывается матрицами 1 0 2 О О 1 Шаг 4. Матрица сложного АП '-0.6 С = СкрМ С~р = СКНМ Cjt = -0.8 4.8 -0.8 0 0.6 0 2.4 1 одинакова для обоих методов расчета матрицы изменения СК, что подтверждает вывод о неединственности способа выполнения сложного преобразования. Шаг 5. Координаты отраженных точек рассчитаем групповым методом (2.8): Р\ Г Р\ Г '0 0 Г -0.6 -0.8 О' 4.8 2.4 Г Р1 1 = Р2 1 с = 0 1 । -0.8 0.6 0 - 4 3 1 .С РЗ 1 Рз 1 2 0 I 4.8 2.4 1 3.6 0.8 1 2.1.3.2. Кинематический метод построения объектов Аффинные преобразования — основа кинематического метода построения пара- метрических объектов (кривых и поверхностей), генерирующего состояния объ- екта из заданных начальных состояний точки, отрезка, окружности как функции некоторого параметра, имеющего физический смысл времени движения. Конеч- ным результатом преобразований являются не уравнения объекта, а его изобра- жение на экране. Построение изображения эффективнее выполнять не по слож- ным аналитическим уравнениям, а непосредственно по обобщенной векторной
Геометрические преобразования 171 модели, задав желаемое начальное состояние объекта, необходимые матрицы преобразований и интервалы изменения параметров. Простейший пример: для построения окружности кинематическим методом достаточно задать: □ начальное состояние точки, например, р(о)= [1 О]; □ возрастающие значения параметра в интервале t е [0, 2л]; □ векторное уравнение p(t) = р(0)7?(/), моделирующее вращение точки на еди- ничном расстоянии от начала координат. Параметр t имеет физический смысл угла между векторами р(0) и pit). Для повышения эффективности своей работы программистом должна быть соз- дана библиотека матричных и графических функций, процедур и алгоритмов. Такой стиль разработки программ делает их модульными и компактными, луч- ше читаемыми, удобными в отладке и внесении корректив в структуру и пара- метры модели. При решении же задач анализа необходимы координатные уравнения состояний объекта, получаемые обычно кропотливыми ручными выкладками либо с по- мощью возможностей символического процессора MathCAD, либо какой- нибудь другой "умной" математической программы. Рассмотрим основы кинематического принципа конструирования линий. Кривая изображается на экране последовательностью точек p(t,), соединенных отрезка- ми прямых. Визуальная близость полученной ломаной линии к гладкой кривой определяется плотностью размещения узловых точек по периметру кривой. Оп- тимальная плотность пропорциональна кривизне кривой, при этом минималь- ное расстояние между соседними точками должно быть порядка одного пиксела. Для получения такого распределения необходим анализ скорости V(l) - dp(t)l dr движения точки по кривой. Например, вектор скорости движения по окружности получается как at так и ручным выводом, и покоординатным дифференцированием уравнения (1.57): 4)=[1 0] cos(r) -sin(r) sin (l) cos (t) = [cos (t) sin (r)] => Г (r)= [-sin (t) cos (r)|. (2.37) Анализ модуля векторной функции |И(/)| = 1 показывает, что точка движется по окружности с постоянной скоростью, поэтому оптимальным является равномер- ное распределение значений параметра /, = г'Д/ VZ = 0, п по интервалу [0, 2л] с по- стоянным шагом дискретности Дг = 2л In. При таком выборе параметрической модели окружности соседние точки с, и с,+1 = с,Я(Дг) равноотстоят друг от друга как по углу Дг = const, так и по периметру: Ig+i - Gl = 2sin(Ar / 2) = const.
172 Глава 2 Соединение точек отрезками прямых аппроксимирует окружность правильным «-угольником (рис. 2.17, а). С учетом масштабного множителя из (2.27, б) зна- чения П = 2тЩэ, Д/ = 1 / Цз достаточны для того, чтобы расстояние между узловыми точками было равно од- ному пикселу, а многоугольник точно совпал с окружностью. В действительности уже при Д/ = 10 / рэ многоугольник визуально не отличается от окружности. Возможны и некинематические параметрические модели окружности, напри- мер, удовлетворяющие каноническому уравнению х2 + у2- 1 =0 функции коор- динат x(t), y(t) и вычисленный их дифференцированием вектор направления движения V(t)\ *(')= I-/2 1 +t2 2t 1 + Z2 => г(/)=2 (2.38) Зависимость модуля вектора скорости движения от параметра t означает, что при постоянном шаге Д/ точки (х(/,) _>’(/,)] распределены по окружности (кривой постоянной кривизны) неравномерно (рис. 2.17, б). Кроме того, точка [-1 0], соответствующая значениям параметра t = ±оо, вычислительно недоступна. Сле- довательно, дробно-рациональная модель (2.38) неудачна, хотя по ней точки ок- ружности рассчитываются быстрее, чем по тригонометрической модели (2.37). Еще менее удачна некинематическая модель x(t) = t, >’(/)=71^Z2 V/е [-1, 1]. Во-первых, по ней строится не вся окружность, а лишь ее верхняя половина. Нижняя половина имеет ординату y(f)= -71-Z2. Во-вторых, вектор скорости Е(/)= 1 в крайних точках [±1 о] при t -+ ±1 невычислим. В-третьих, нелинейная зави- симость модуля скорости |к(/)| = 1/71 ~/2 от параметра t также дает неравно- мерное распределение точек по периметру (рис. 2.17, в). Проведенный сравнительный анализ трех моделей одного и того же графическо- го объекта показывает, насколько компетентно нужно подходить к выбору как уравнений модели, так и ее параметров для получения достоверного и качест- венного изображения объекта на экране дисплея.
Геометрические преобразования 173 Рис. 2.17 Параметрические уравнения произвольного эллипса на плоскости с центром в точ- ке Рц ~ 1хц >’н]> полуосями а, b и углом наклона большой полуоси а получим за три преобразования (масштабирования, вращения и переноса) окружности c(t) (рис. 2.18): р(/)=4) cos(a) -sin (а) sin (а) cos(a) + Рц, а О О b х(/)= acos(a)cos(r)- fesin(a)sin(r)+ хц, y(t)= asin(a)cos(t)+Z>cos(a)sin(t)+_>’u. (2.39) Рис. 2.18 Модуль v(/) = |к(г)| = sin2 (/)+ Л2 cos2 (f) вектора скорости г(/)= с'(г)л/(а,*)/?(а)= = [-<7cos(a)sin(r)-fesin(a)cos(/)-asin(a)sin(r)+fecos(a)cos(/)J
174 Гпава 2 движения точки по эллипсу зависит от параметра 1 (рис. 2.19, а): в точках апогея с максимальной кривизной скорость минимальна (v = min{a,/>}), в точках пери- гея с минимальной кривизной — максимальна (v = шах{а, />}). Следовательно, при аппроксимации эллипса полигоном плотность распределения его вершин р, по периметру должна быть переменна: максимальна на участках апогея и минималь- на на участках перигея. Точное решение задачи распределения связано с исчислением эллиптических ин- тегралов. Простейшее же решение — равномерное распределение t, = iAi с шагом Л/ = 2л / п — благодаря непропорциональному масштабированию окружности в (2.39) при а * b фактически приводит к нужному результату (рис. 2.19, б): график 8(z) плотности распределения точек p(z,) по периметру эллипса, приведенный на рис. 2.19, а, обратно коррелирует с графиком скорости v(z). Оптимальные значе- ния числа сторон полигона и шага дискретности 2тт иэ = [~2лцэтт{а,б}~|, Дгэ = — иэ дают минимальные расстояния между точками эллипса в один пиксел на участ- ках с максимальной кривизной. В частном случае при а - Ь = г и а = 0 эллипс превращается в окружность ра- диуса г с центром в точке рц = [хц уц]: р(г) = гс(г)+рц = [rcos(f)+xu rsin(f)+yu]. (2.40) Наилучшее качество аппроксимации окружности правильным /г-угольником достигается при выборе параметров моделирования — |~2лу.эг"], Az0 — . «о
Геометрические преобразования 175 Произвольную окружность в пространстве радиуса г с центром в точке pu е R3, лежащую в плоскости {pu, N}, получим несколькими способами. □ По методу разложения подвергнем окружность единичного радиуса <"(/) е ху с нормалью z° трем активным преобразованиям: • масштабированию до радиуса г; • совмещению нормали с вектором N; • переносу центра в точку рц. Векторное уравнение окружности p(r) = r[c(z) О] А~‘(/V)+ рц (2.41) использует обратную матрицу преобразования системы координат AP(J7) с аргументом V= N, вычисляемую в разд. 2./.J./ двумя способами: • по варианту (2.30), (2.31) поворот z° —> W выполняется вращениями, изо- браженными на рис. 2.20, а. Обозначив вектор проекции нормали v = [/Vv 0 /Vz]gxz, получим алгоритм arcsin Ny (2.42, а) Рис. 2.20 а • по экономичному варианту (2.33) два вращения обеспечивают кратчайший поворот z° —> (рис. 2.20, б). Вычислив вектор W = z°xNe ху,
176 Гпава 2 получим алгоритм a = if (|РК|: angle(y°, IV), б), Р = arccos(z° °n], л1(н)=пУШ«)- <2'42,6) Для иллюстрации сказанного составим по (2.42, б) аналитические уравнения произвольной окружности в зависимости от ориентации нормированной нормали W = [л^. Ny 7VZ]: • при N#z° для вектора W = z° Nx о] длиной w = ^Nx + Ny *0 и параметров углов cos(a)= —, sin(a)= Nv/w, cos(p) = N., sin(P) = w w z/ получим координатные функции x(t) = r(cos(a)cos(p)cos(r)-sin(a)sin(())+xu = = хц + — (nxNz cos(/)- Nv sin (f)), w Л j(r) = r(sin(a)cos(p)cos(r)+cos(a)sin(r))+ Ju = (2-43) = Ju + — (NyNz cos(/)+ Nx sin(r)), w z(()= -rsin(jp)cos(/)+zu = zu -nvcos(/)5 • в особом случае при N || z° в (2.43) имеет место вычислительная неопреде- ленность типа 0/0 из-за того, что Nx = Ny = w = 0. Поэтому, полагая IV = у0, a = 0 и cos(p) =/V, = ±1, получим уравнения окружности, не яв- ляющиеся следствием уравнений (2.43) и потому не имеющие права на заб- вение при программировании и анализе: х(/) - г N. cos(z) + %ц, j(f) - г sin(r) + z(r) = zu. (2.44) Применение метода разложения в задачах со сложными преобразованиями требует развитого пространственного воображения и учета особых случаев, что часто игнорируется и рано или поздно приводит к сбою программы. Кроме того, преобразование по варианту (2.42, а) не дает поворота векторов z° —> N по кратчайшему углу. П Получим уравнение окружности суперпозицией колебаний точки вдоль двух ортогональных векторов V и W, лежащих в плоскости {рц, N} (рис. 2.21). В соответствии с (1.71) выберем произвольный вектор H#N, вычислим орто- гональные нормали векторы V = HxN, 1V = NxV
Геометрические преобразования 177 и составим комбинацию взаимно ортогональных гармонических колебаний вокруг центра ри: p(t) = pu + rcos(t)v + rsin(z)H/. (2.45) Рис. 2.21 При W#z° примем H = z°, тогда K = [-Wy Nx о], fF = [-/VxW, -NyNz ^2],где w^N^ + Ny *0. Подставив эти выражения в (2.45), получим аналогичные (2.43) выражения x(z) = хц ~—(nv cos(z)+ NXNZ sin (/)), w y(t) = yu+ — (Nxcos(t)-NyNzsin(t)], (2.46, a) w z(l) = zu + rwcos(z). При W || z° примем H = x°, тогда, подставив в (2.45) векторы К = [0 -Nz 0],fF = [~l О О], получим аналогичные (2.44) функции x(z) = хц - rsin(z), j’(z) - J u - rN. cos(z), z(Z) = zu. (2.46, 6) Таким образом, метод суперпозиции в конечном итоге эквивалентен методу разложения, но существенно проще его как для анализа, так и для практиче- ского построения окружности в пространстве.
178 Гпава 2 П По методу парных точек, основанному на расширенном варианте (2.34, б). вычислим ортогональный нормали N = [д\. Ny Wz] вектор W = if z°x7/L z°*N, Nzy° с помощью которого получим уравнение окружности ?(')=М) о 1]с-’(рц, /7)= = [rcos(t) rsin(t) 0 1 -rcos(z)-rsin(t)] Pu+WxN Pu + W_ Pu + N Pix 1 1 1 1 (2.47) Применение метода парных точек, в котором задаются лишь начальное и ко- нечное состояния объекта, позволяет исключить из процесса разработки ал- горитмов сложных преобразований выбор промежуточных ЭП, расчет их матриц, учет особых условий ориентации объекта относительно системы ко- ординат и другие тонкие моменты, непонимание которых может привести к нежелательным визуальным эффектам. Циклические кривые Циклические кривые образуются сложением относительного движения точки по окружности с переносным движением центра окружности по кривой рц(/) (рис. 2.22, а): p(t) = r(t)c(mt)Q + pu(t). (2.48) В этом уравнении: □ r(t) — закон изменения радиуса окружности;
’еометрические преобразования 179 <о — частота относительного вращения, согласованная с переносным движени- ем и равная числу оборотов точки c(&t) при изменении t на 2л; "о Q— матрица управления начальным состоянием и направлением вращения точки по окружности. На рис. 2.22, б приведены значения матриц Q, дающих начальные условия на осях координат и оба направления. В ^елом закон движения (2.48) расширяет возможности формулы (1.58). Получим уравнения некоторых циклических кривых. 1 Циклоида — это траектория движения точки окружности радиуса г при ее ка- чении без скольжения по прямой у - 0 (рис. 2.23). Пусть в (2.48) со = 1, тогда отсутствие скольжения означает переносное движение Рц(/)='-[' 1J- При изменении параметра t на 2л центр окружности смещается по оси х на расстояние 2лг — длину ее периметра. Выберем матрицу / \ / х Го -Г 0 = Л/(1,-1)/?(-9О°)= о такую, что вращение точки c(t)Q = [—sin(/) -cos(/)] происходит из начально- го положения [б -1] по часовой стрелке. Объединяя найденные элементы движения, получим векторную и координатные уравнения циклоиды р(г)=г[г l]-r[sin(r) cos(z)], | x(r)=r(r-sin(r)), lj(O=r(1-cos0)- Трехмерный аналог этой кривой — циклоидная поверхность, по которой дви- жется точка сферы, катящейся по плоскости. Подобная поверхность изобра- жена на рис. 1.55, а. Ее параметрическую модель можно получить, вращая циклоиду вокруг оси j: р(г,т)=r]f-sin(/) l-cos(r) 0]/?>,(т)= = r[(/-sin(/))cos(r) l-cos(z) (sin(r)-/)sin(T)].
180 Гпава 2 Кинематическому методу формирования разнообразных параметрических поверхностей посвящен основной материал, изложенный в гл. 3. □ Эпициклоида представляет собой траекторию движения точки окружности радиуса г при ее качении без скольжения снаружи окружности радиуса (рис. 2.24). Переносное движение описывается формулой Pu(')=('-o + '-)[sin(r) cos(z)]. Рис. 2.24 При изменении параметра t на 2л центр внешней окружности совершает со = Го / г + 1 оборотов вокруг внутренней. Матрица Q такая же, как у циклои- ды. Подставляя найденные элементы движения в (2.48), получим параметри- ческие уравнения эпициклоиды p(z) = (r0+r)[sin(z) cos(z)]-r [sin(coz) cos(coz)], x(z)=(r0 + r)sin(z)-rsin y(t) = (ro + r)cos(z)- П Гипоциклоида— траектория движения точки окружности радиуса г при ее качении без скольжения внутри окружности радиуса го (рис. 2.25). Перенос- ное движение описывается формулой Pu(') = ('-o-'-)[sin(z) cos(z)|. При изменении параметра z на 2л центр внутренней окружности совершает со = го / г - 1 оборотов по периметру внешней. Матрица О Г -1 О 2 = я(90°)=
"еометрические преобразования 181 дает вращение точки c(t)Q = [-sin(r) cos(/)] против часовой стрелки из на- чального положения [о 1]. Подставляя найденные элементы движения в (2.48), получим уравнения гипоциклоиды р(0== (го-г)[5*п^) cos(f)]+r[-sin(ftw) cos(d>/)], Рис. 2.25 □ Коническая винтовая линия с углом раствора 2а и шагом й (рис. 2.26) образу- ется сложением равномерного переносного движения по оси у и спирального относительного движения в плоскости xz, подобного движению, изображен- ному на рис. 1.31, а: Д,)=^[0 , 0|+“^[4) 0fc(-90") = 271 271 = — [sin(a)cos(r) cos(a) -sin(a)sin(r)]. 2л □ Замкнутая спиральная линия, N витков которой равномерно навиты на по- верхность тора с осевым радиусом го и радиусом витков г (рис. 2.27), образу- ется сложением вращения точки по окружности Ро(О = 4с0 0]+[го 0 о]
182 Гпава 2 и вращения этой окружности с W раз меньшей частотой вокруг оси у: р(')= = rsin(z) -(r0 + rcos(z)sinj Vz = 0, 2tlV. 2.1.3.3. Кинематическая задача перемещения в пространстве Продолжая изучение методов сложных преобразований, рассмотрим кинемати- ческую задачу перемещения в пространстве. В компьютерной графике непрерыв- ное движение объекта изображается последовательностью состояний (фаз. кадров) — элементов дискретного множества его положений во времени и про-
Геометрические преобразования 183 странстве. Цель кинематического анализа и синтеза — изучение и имитация реа- листичного движения графических объектов, выявление в алгоритмах движения методических ошибок и непредвиденных эффектов. Движущийся в R" объект как система связанных точек имеет 2л степеней свобо- ды: п координат центра масс и п параметров угловой ориентации. Естественно, что наличие формул движения всех основных точек объекта (например, вершин полиэдра) полностью решает задачу кинематики, т. е. позволяет построить изо- бражение объекта в любой момент времени. Однако такая полная информация )б объекте, во-первых, не всегда имеется в наличии, а во-вторых, она избыточна. Согласно методу парных точек для идентификации состояния объекта достаточ- но знания координат его (н + 1)-ой точки, чтобы рассчитать матрицу преобразо- вания из предыдущего состояния и групповым методом получить координаты летальных точек. Этот метод основан на принципе пространственно-временной огерентности — сохранении взаимной ориентации точек объекта при его дви- жении в пространстве и во времени. При неполной информации об объекте логично полагать, что согласно принципу минимального действия он движется по экономичной траектории — кратчайшим направлениям переноса центра масс и поворота собственной оси. Без учета вра- щения объекта вокруг своей оси и его состояние Р - {о, V} задается центром базовой точкой) о и вектором V направления оси и. Возможно, что объект так- же подвергается преобразованию подобия — равномерному масштабированию во зсех направлениях относительно своего центра. Изменение размеров объекта можно моделировать изменением длины вектора V. 3 машинной графике применяются два метода кинематического расчета перехо- да Р( —> Рм объекта из предыдущего состояния в последующее. □ Рекуррентное вычисление состояний Рм =pici \/i= 1,2,..., начиная с состояния Pi (рис. 2.28, а). Начальное состояние либо исходно зада- ется элементами {oi, Pi}, либо рассчитывается по формуле Л=?оСо из состояния Ро подобного объекту примитива— объекта единичных разме- ров, центр которого о0 расположен в начале СК, а вектор Vo ориентирован вдоль некоторой координатной оси. Ниже будет показано, что матрица сложного преобразования С, может описывать как прямой переход Р,-> Р,+), так и переходы Р, -> О„ -> Р,+) через начало координат. Достоинство рекуррентного метода в возможности реализации экономично- го движения при специальном выборе матриц С,. Недостатком метода явля- ется относительная сложность расчета таких матриц. Метод рекомендуется использовать в экономичном варианте при неполной информации о движе- нии объекта.
184 Гпава 2 □ Итеративное вычисление состояний объекта Vz= 1,2,... из состояния примитива Ро (рис. 2.28, б). В рамках данного подхода все гео- метрические объекты сцены исходно задаются примитивами, которые часто являются виртуальными, т. е. реально не существующими в сцене объектами. Примитивы удобны для выполнения преобразований относительно осей ко- ординат — масштабирования и вращений, после чего следует перенос центра объекта в нужную точку пространства о,- В следующее состояние Р,+] объект опять переносится из начала координат, будучи предварительно подготовлен для этого необходимыми преобразованиями масштабирования и вращения. Положительными аспектами итеративного метода являются: • экономия на переносах Р, —> О„ объекта в начало координат, которые тре- буются в одном из вариантов рекуррентного метода; • возможность использовать меньшее число примитивов, чем объектов сцены. Недостаток метода заключается в том, что два перехода Ро —> Pt и Ро —> Р,+ могут быть не эквивалентны одному экономичному переходу Р, —> Pi+l. Визу- ально это проявляется в виде эффекта нежелательного вращения движущегося объекта вокруг своей оси. Метод рекомендуется использовать при полностью определенных законах движения объекта. Рис. 2.28 Переходим к разработке кинематических алгоритмов— методов вычисления матриц преобразования состояний объекта с не полностью определенными эле- ментами движения. Итак, пусть даны два состояния объекта {oi, И1} и {02, Vi} с центрами в точках oi, 02 и векторами направления осей V\, V2. Относительное изменение размеров объекта охарактеризуем коэффициентом подобия
Геометрические преобразования 185 Попытаемся получить матрицу экономичного преобразования {oi, Vi} —» {02, Кг} по кратчайшим направлениям переноса 01 —> 02 и вращения V\ —> Кг. Кратчайшее изменение направления от V\ до V2 означает одновременный поворот всех точек объекта, перенесенного из oi в 02, на один и тот же минимальный угол у до со- вмещения V\ с V2 (рис. 2.29). Рис. 2.29 □ По методу разложения, основанному на преобразовании (2.30), выполним переход из {01, Ki} в {02, Кг} за пять фаз с соответствующими матрицами: • Ф1: {01, Ki} —> {Оз, Ki} — перенос из 01 в начало координат матрицей K(-oi); • Ф2: {О3, К}—> {о3, |К||г° }— совмещение вектора Ki с осью z матрицей Л(К.); • ФЗ: {о3, |K||z° }-» {03, |К2|г°} — масштабирование матрицей М(р, ц, ц); • Ф4: {о3, |K2|z° }—» {О3 , К2}— совмещение вектора |K2|z° с Кг матрицей • Ф5: {Оз, Кг} -> {ог, Кг} — перенос из начала координат в ог матрицей Цог). С учетом того, что фазы Ф2 и Ф4 включают до двух ЭП, суммарное число ЭП достигает семи. Матрица полного АП вычисляется по достаточно длинной формуле С = Г(-оД(к1)Л/(щ и, (2.49) На рис. 2.30 изображены выполняемые по описанному алгоритму фазы пре- образования несимметричного объекта — двухцветного флажка, древко ко- торого задает вектор направления К. Оказывается, что конечное состояние {ог, Кг} не полностью совпадает с результатом экономичного движения, изо- браженным на рис. 2.29. Совпали лишь концы вектора Кг. Остальные точки
186 Гпава 2 объекта дополнительно поворачиваются вокруг оси на угол вплоть до значе- ния 180° при |са - аз| = 180°. Рис. 2.30 В чем причина такого нежелательного эффекта? Очевидно в том, что сложное АП (2.49) не является экономичным: четыре элементарных вращения объекта на углы -со, Pi, az и -Рз, не лежащие в одной плоскости, не дают в совокупно- сти кратчайшего угла. Таким образом, метод разложения с промежуточной ориентацией объекта вдоль координатной оси не может дать экономичного ал- горитма решения кинематической задачи. □ В экономичней варианте алгоритма по методу разложения явно присутствует кратчайшее вращение объекта на угол у > 0. заключенный между векторами Vi и I'z (см. рис. 2.29). Значение этого угла у = arccos(p) определяется скаляр- ным произведением р = Ио^2. Ось кратчайшего вращения ортогональна плоскости {оз, Vi, Vz} и имеет направление нормали N= Vi х Из. В случае И1 || К2, когда |р| = 1, можно выбрать вектор N = хоз0, ортогональный к V\ и орту со0 # V\, где со 6 {х, у, z}. Фазы преобразования объекта (рис. 2.31) и их матрицы следующие: • Ф1: {oi, Vi} -> {Оз, Vi} —перенос из точки oi в начало СК матрицей Т(-о\). • Ф2: {х,у, z} -> {д', у', z'}— совмещение оси z с нормалью N матрицей Лэр(А); • ФЗ: {o3,pKf}—>{О3, 1'1} — вращение вокруг оси z матрицей 7?.(arccos(p)). которую экономичнее вычислять по варианту (2.32) как Я2,| р, 71-р2
ь метрические преобразования 187 без использования тригонометрических и обратных тригонометрических функций; • Ф4: {%', у', z'} —> {х, у, z} — восстановление СК матрицей /^(Л7); • Ф5: {О3, И^}—> {О3, рИ^} —масштабирование матрицей Л/(р, р, р,); • Ф6: {Оз, Кг} —> { 02, Иг} — перенос из начала координат в точку ог матрицей ЦО1). Рис. 2.31 р = И[оИ2, Ц = т—т В итоге матрица сложного АП, включающего до восьми ЭП, вычисляется по следующему алгоритму: , N = И] xif(|p| < 1: И2, if(|K|z|<|И||: z°, у0 (2.50) С = г(- О| Яр (А)Л2^р, Vl-P2^-* (р, р, р)т(о2 )- 71 По методу парных точек построим две ортогональные системы векторов, связанные с исходным и конечным состояниями объекта (рис. 2.32): • вычислив нормаль N- Vi х Иг (если И| || Иг, то при И(#г° полагаем N = И| хг°, а при И[ || z° — N = И| ху°) и бинормаль Wi = Hi х N, получим исходную систему векторов на четырех точках: {01, oi + Ki, oi + N, oi + (Hi}; • вычислив коэффициент подобия р = |Иг|/|И1| и бинормаль (Иг - Иг х N, получим конечную систему векторов на четырех точках: {ог, ог + Иг, ог + рА, 02 + (Иг}.
188 Гпава 2 Рис. 2.32 В связи с простотой, экономичностью и дальнейшим широким использовани- ем оформим алгоритм решения кинематической задачи методом парных то- чек в виде функции расчета матрицы аффинного преобразования по двум па- рам точек, возвращающей матрицу АП объекта из состояния {/л, И} в состояние {pi, Из}. £7 МАР2(о\, Hi, oi, Vi) { N = t\ xif(|n oF2|<1: И2, if(|r1;|<|И]|: z°, /)), M = возврат матрицы °1 11 1 °2 1' о,+И] 1 о2+И2 1 o\+N 1 о2 1 oi+^xW 1 + ^2 * N 1 (2.51) }О Ортогональность векторов обращаемой в (2.51) матрицы обеспечивает ее наилучшую обусловленность. Единственное условие существования реше- ния — ненулевые векторы V\ и Иг. Численные значения матриц, вычисленных по алгоритмам (2.50) и (2.51), совпадают, т. к. кинематическая задача имеет единственное экономичное решение. Трудоемкость же метода парных точек существенно меньше. Расчет матрицы преобразования системы координат из состояния {oi, И|} в состояние {oi, Иг} выполняется функцией MAP2(oi, Из, oi, И) = МАР2(о\, И|, 02, Иг)'. В качестве параметров начального состояния можно выбрать начало координат oi = Оз и один из ортов, например, И] = z°. Тогда преобразование с матрицей Ск(о,и) = MAP2(o,P,O3,z°)
'еометрические преобразования 189 переводит начало СК в точку о, а ось z' ориентирует по направлению вектора V. Положение осей х' и у' не регламентируется. Такая неопределенность ори- ентации системы координат вполне допустима в задачах на преобразования относительно только одной оси. Например, это вращение вокруг оси {о, И на угол выполняемое матрицей или отражение от плоскости {о, N} с помощью матрицы Ск (o,n)m(\, 1, -1 )С“* (о, /V). Сравним три алгоритма (два по методу разложения и один по методу парных точек) и два подхода (рекуррентный и итеративный) решения кинематической задачи на примере движения плоского полигона Р через последовательность со- стояний Р\ -> Pi Pm -> Pi, равномерно распределенных по окружности радиуса г в плоскости ху (рис. 2.33). Состояние Р, задается точкой центра поли- гона и вектором нормали к его плоскости: о, = z-x°Pz((z-1)Av), /V, = _у°Рг((/-1)Ду), где Avy = 2л / m. Соединение соседних состояний каждой из вершин полигона отрезками прямых з совокупности с изображением самих полигонов дает поверхность, классифи- цируемую в гл. 3 как трубчатая. Скручивание продольных каркасных линий на- глядно свидетельствует о вращении полигона вокруг своей оси (нормали) на пе- реходах между состояниями. На рис. 2.34, а изображена полностью определенная ^талонная поверхность без осевого вращения, поперечные сечения которой состояния полигона) рассчитаны по формуле Pi = Р0Лл.(-л/2)Лг(/Д^)г(о,) Vz = 1, m (2.52) гри in - 36, где Ро 6 ху — состояние полигона с центром в начале координат и чормалью z°.
190 Гпава 2 Наилучшие результаты — полное совпадение с эталоном — дали экономичные алгоритмы на основе рекуррентного подхода со следующими матрицами преоб- разований на переходе Р,^> Рм\ □ по рекуррентному методу разложения (2.50) =^xif(|p,|<l: Ni+l, if(pvj<pv,|: z°, >° )), / /---rx (2.53) C, = т(-о, )Лэр(^ )R2 J p„ 71 -p2 pip1 (w, )t(om ); П по рекуррентному методу парных точек (2.51) С/ = MAP2(oh Nh oM, Ni+l). (2.54) Остальные алгоритмы проносят полигон через состояния Р, неэкономично, с до- полнительным вращением вокруг нормали, что визуально наблюдается как скручивание продольных каркасных линий. Алгоритмы различаются степенью неравномерности угла скручивания по траектории движения полигона: □ по методу разложения (2.49) как в рекуррентной, так и итеративной формах неравномерная скрутка поверхности (рис. 2.34, б) наблюдается на тех участ- ках, где вектор А, меняет знак абсциссы 7V,v, из-за чего происходит вращение полигона на некоторый угол, вплоть до 180° (см. рис. 2.30); Рис. 2.34
Геометрические преобразования 191 □ итеративные методы экономичного разложения (2.50) и парных точек (2.51) дают равномерное скручивание (рис. 2.34, в), объясняемое тем, что экономич- ные переходы полигона Ро —» Р, и Ро —> Р,+) не эквивалентны экономичному рекуррентному переходу Р, —> Р,+|. На рис. 2.34, г, д, е показаны результаты моделирования переходов полигона по траектории произвольно расположенной в пространстве окружности. Рекур- рентные алгоритмы экономичного метода разложения (2.53) и парных точек (2.54) еще раз подтвердили свою работоспособность (см. рис. 2.34. г) в отличие от других изученных алгоритмов моделирования (см. рис. 2.34, д, е). Может возникнуть естественный вопрос: если есть точный метод кинематиче- ского расчета (2.52), то зачем нужны другие алгоритмы, некоторые из которых дают нежелательные визуальные эффекты движения? Ответ прост: в общем слу- чае движение может быть не полностью определенным. Например, трубчатая поверхность формируется протягиванием контура ее поперечного сечения по траектории осевой линии, но как ориентирован контур в каждом сечении — этот момент не оговаривается. Изображение такой поверхности выглядит неестест- венно, если ее продольные каркасные линии проходят не параллельно осевой линии, а закручиваются вокруг нее. Желаемый вид поверхности достигается с помощью экономичных рекуррентных алгоритмов движения, которые дают ми- нимальное или вообще нулевое кручение продольных линий. Общий неоостаток рассмотренных методов кинематических преобразований состоит в их нечувствительности (разной степени) к вращению объекта вокруг собственной оси из-за недостаточности задания только двух пар точек .01,01 + И1} и {ог, 02 + Иг} на оси движения. Если известна третья пара точек oi + W\ и ог + W-l вне оси, то матрица преобразования {oi, Hi, IVi} —> {02, Иг, №2} находится по (2.13) после расчета нормалей м - И1 X * Оз, N1 = Иг X W2 * Оз и четвертой пары точек 01 + Ni и 02 + N2. Оформим данный метод в виде функции расчета матрицы аффинного преобразо- вания по трем парам точек, возвращающей матрицу преобразования объекта из .остояния {01, И|, 1И|} в состояние {02, Иг, W2}. МАРЗ>(о\, Hi, Wi,02, Иг, ГИг) возврат матрицы °1 °1 + ,i °1 + ИхИ/1 11 'Г О2 1 1 о2 + И2 1 1 о2 + w2 1 1J [о2+И2ХИ/2 1 (2-55)
192 Гпава 2 Для преобразования СК из исходного положения [О3, х°, y°,z° j необходимо знать ее новое начало о и неколлинеарные векторы Ии W, задающие новые на- правления осей х' и у'. Матрица такого преобразования СК равна Ск=Л/Л/’з(о, V, W,O3,x°,y°\ Наконец, если известны четыре пары некомпланарных точек объекта в началь- ном и конечном состояниях, то для расчета матриц преобразования объекта С и системы координат Ск используются формулы (2.13) и (2.14) при и = 3. Состоя- ния объекта могут быть также полностью определены точками oi, 02 и тройками некомпланарных векторов {Ki, tZi} и {V2, Wz, U2}. Для этого случая введем функцию расчета матрицы аффинного преобразования по четырем парам точек. £7 MAP4(oi, Vi,Wi, Ui,O2, V2, Wz, U2) {возврат матрицы 01 Oi+Kj Ol+W7! ,°i +Ц 1 1 б>2 1 1 O2 + V2 1 1 o2+W2 \ 1 С>2 + ^2 1 (2.56) Эту функцию можно использовать для преобразования координат точки р из исходной СК {о3, х°, y°,z0} в другую декартову (не обязательно правую и ор- тонормированную) систему координат с началом в точке о и осями х', у', z', на- правления и масштабы которых заданы базисными векторами V, Wn U: р' = рСк, где Ск = MAP4^o, V, W, U, О3, х°, у°, z°). (2.57, a) Аналогично решается задача преобразования точкир е R2 из СК {о2, х°, j0} в другую декартову СК, имеющую начало в точке о и базисные векторы V и W: о 1 -1 ’0 0 1 Р = рСк, где Ск = о + И 1 1 0 1 о + И' 1 0 1 1 (2-57, б) Преобразование координат— полезный инструмент определения принадлежно- сти точки q некоторым специальным геометрическим объектам при выполнении совокупности условий-неравенств для координат прообразов q', вычислен- ных по (2.57): □ плоским параллелограмму П и треугольнику Т с одной из вершин в точке о и выходящими из нее векторами сторон V и W (рис. 2.35): П: 9? = {0<х'<1}П{0<У<1}; (2.58,а) Т: = {?>0}п{у'>0}П{х+/< 1}. (2.58,6)
Геометрические преобразования 193 Рис. 2.35 Например, для параллелограмма П с элементами о = [б -1], Г = [2 з] и И7 = [-2 1] получим матрицу преобразования 91= [7 2], 92= [-4 2], 93=[-3 1] имеют в СК {о, V, И7} координаты 9j= [0.875 0.375], 92 = [-0.5 4.5], д'ъ = [-0.625 3.875]. По (2.58, а) определяем, что точка 91 лежит внутри параллелограмма, а точки 92 и 93 — вне его. Эти же точки в системе координат треугольника Т с элемен- тами о =[-6 4], Г = [4 -2], ^ = [1 -5] и матрицей преобразования 0.278 -0.111 1 Ск = 0.056 -0.222 1 1.444 -0.222 1 имеют координаты q{ = [3.5 -1], 92 = [0.444 0.222], 93 = [0.667 О.ЗЗЗ]. По (2.58, б) определяем, что 91 е Т, 92 е Т, а точка 93 принадлежит границе Т; □ объемным параллелепипеду П и треугольной пирамиде Т с одной из вершин в точке о и выходящими из нее векторами ребер V,WnU(рис. 2.36): П: = {О<х'< 1}П{О<у< 1}П{0< z< 1}; (2. 59,а) Т: 9? = {/>0}n{y'>0}n{z,>0}n{x' + y + z,<l}. (2. 59, б)
194 Гпава 2 Рис. 2.36 2.2. Проективные преобразования Проецирование (от лат. projectio — выбрасывать вперед) — это отображение трехмерного объекта на двухмерную картинную плоскость (КП). Получение проекции базируется на методе трассировки лучей: из центра проецирования S (проектора) проводятся лучи через каждую точку объекта до пересечения с КП (рис. 2.37). След, образуемый точками пересечения лучей с КП, составляет проек- цию объекта. Если фокусное расстояние F во много раз больше габаритов объек- та и расстояния d от источника лучей до объекта, то пучок проецирующих лучей можно считать параллельным, а источник — дальним. Такая идеализация ото- бражения объемного мира на плоский экран облегчает построение проекций, за что приходится платить ухудшением реалистичности изображений. Рис. 2.37
Геометрические преобразования 195 За длительное время развития цивилизации придумано множество способов изо- бражения объемных объектов на плоскости, более или менее точно передающих их геометрическую форму. Поскольку проецирование— не аффинное преобра- зование и в принципе необратимо, то любая проекция всегда содержит в себе ошибку (лучше сказать — неопределенность) восстановления координат объек- та-образа. Назначение того или иного метода проецирования состоит в умень- шении неопределенности восприятия наиболее значимых свойств объекта за счет менее значимых. Например, архитектурный чертеж фасада здания абсолютно точно передает геометрическую ширину и высоту как всего фасада, так и его деталей, за счет полной неопределенности их глубины. К числу важнейших свойств метода проецирования относится достоверность восприятия объекта наблюдателем по его проекции, т. е. узнаваемость объекта по его плоскому изображению. Если свойство достоверности восприятия объяв- ляется доминирующим, то наилучшей может стать "живая" проекция с далеко не минимальной геометрической неопределенностью. Например, изометрическая проекция несет искаженную информацию о размерах объекта во всех трех изме- рениях, но лучше передает форму объекта в целом по сравнению с изображением объекта в "фас". ПРОЕКЦИИ к ( Параллельные ( Центральные Косоугольные ) Ортогональные ) Аксонометрические Виды ) К \ 1 Гриметрические Главные Диметре*. -е <ие ^Вспомогательные) V у Изометрические Левый Нижний Рис. 2.38 — С одной точкой схода . С двумя точками I схода ± С тремя точками ' схода Фронтальный ►^Горизонталоный ) Поофильный Задний На рис. 2.38 приведена общепринятая классификация проекций, используемых для изображения трехмерных объектов или сцен на картинной плоскости. С учетом вышесказанного следует признать, что наилучшей проекции не существует. Во-
196 Гпава 2 первых, критерий выбора проекции определяется ее назначением — достижение геометрической точности или получение эстетического удовлетворения. Во- вторых, "на вкус и цвет товарищей нет": автор данной книги, например, предпо- читает диметрическую аксонометрическую проекцию (это видно по большинст- ву рисунков), тогда как некоторые эстеты без ума от изометрии с ее чересчур правильной и скучной симметрией. Для лучшего восприятия ориентации объектов в пространстве мы иногда будем рисовать вместе с проекциями объектов еще и проекции осей МСК x'y’z', СКС хсУсгс или ОСК xoyozo. Эти проекции создаются по тем же алгоритмам, кото- рые используются для изображения объектов. 2.2.1. Ортографические проекции Для получения ортографических проекций (видов) оси ОСК ориентируются па- раллельно осям МСК, вдоль которых направляются пучки проецирующих лучей. Так как последние оказываются перпендикулярными координатным плоскостям, то в виде теряется информация о координате вдоль оси координат, параллель- ной пучку (рис. 2.39, о). Отдельные виды необратимы. Восстановление 3d- объекта возможно не менее чем по двум его видам, содержащим совместно все три координаты. Рис. 2.39 С целью точной передачи размеров деталей в инженерной практике применяются чертежи в составе трех главных видов (рис. 2.39, б): □ спереди или фронтальный (front) на КП f (ФКП), совпадающую с координат- ной плоскостью МСК ху. У проекции р' точки р координаты равны х' = х, у' = у, z' = 0;
Геометрические преобразования 197 □ сверху или горизонтальный (horizon) на КП h — плоскость MCK xz. Коорди- наты проекции точки р равны х' — х,у' — 0, z' = z; □ справа или профильный (profile) на КП р— плоскость MCK yz. Координаты проекции точки р равны х' = 0, у' = у, z' = z. Если сплошной (не каркасный) объект имеет сложную форму, которую нельзя передать с помощью главных видов, то как исключение в чертежах приводятся вспомогательные виды: левый, нижний и задний. Матрицы видового проецирования Of=diag[l 1 0], Oh=diag[l 0 1], Ор =diag[o 1 1] (2.60) вырождены, что подтверждает невозможность восстановления по формуле (2.2) всех трех координат точки только по одному ее виду. Область применения видов — машиностроительное черчение, архитектура и дру- гие приложения, требующие точных измерений по чертежу линейных и угловых размеров объектов благодаря параллельности измеряемых элементов плоскостям проецирования. Особое значение имеет фронтальное ортогональное проецирова- ние с матрицей Of как последняя фаза аксонометрического проецирования. Создание на плоскости иллюзии объемности с помощью только одного изобра- жения объекта возможно двумя способами. □ Во-первых, объект вместе с его ОСК подвергается преобразованиям враще- ния вокруг двух или трех неколлинеарных осей, в то время как проецирую- щие лучи остаются перпендикулярными к проективной плоскости. Так полу- чаются ортогональные аксонометрические проекции. □ Во-вторых, можно направить проецирующий пучок под углом к КП, осветив тем самым объект сбоку. Так образуются косоугольные проекции и их оптиче- ский аналог — тени объектов на плоскости. 2.2.2. Аксонометрические проекции Выберем для определенности фронтальную КП проецирования и последователь- ность вращений объекта и его ОСК х0 уо zo: <Р, -> <р ч -> <рг. Такая очередность поворотов дает привычную вертикальную ориентацию про- екции у' оси у0 при произвольных углах первых двух вращений (рЛ. и <рА. Лишь третье вращение ОСК на угол <р. поворачивает проекцию этой оси на такой же угол. В результате получим ориентацию ОСК относительно ФКП, изображен- ную на рис. 2.40.
198 Гпава 2 Рис. 2.40 Задача аксонометрии (от греч. axon — ось, metreo — измерять) состоит в опреде- лении координат проекций точек, осевых масштабов тх, тг пи и ориентации проекций осей ОСК х', у' и z' на ФКП. Рассчитаем матрицу сложного преобра- зования (трех вращений) объекта в неподвижной СК xyz: ff'xr mxy mxz myx myy myz mzx '»zy (2.61) Ее (/,у)-ые элементы тхх = cos(<py)cos((p,)- sin (<рЛ. )sin (<рЛ. )sin (<р,), тху = cos(<Py)sin(<рг)+ sin(<px)sin(<pj;)cos(<p,), mxz =-cos^^sinjcp^. тух = - cos(<px )sin (<рг ), myy = cos(<px )cos(<p.), myz = sin (<px ), /wzx = sin ((p^, )cos((p_)+ sin(<px )cos(<pj; )sin(<p,), mzy =sin(<p>,)sin((p-)-sin(<px)cos(<p},)cos((p_), = cos((px)cos(<p>1) (2-62) есть j-ые координаты z-ых ортов ОСК. Получим соотношения для расчета углов уЛ, хрЛ. и vp. наклона осей ОСК к ФКП: sin(vx)=wxz sin^^/w^, sin(yz )= mzz = -cosfajjsin^, = sin(q>J, = cos(<pA.)cos((p>,), (2.63)
Геометрические преобразования 199 из которых следуют независимость углов фти от угла <р. последнего в (2.61) вращения и условие связи углов sin2(xpv) + sin2)^) + sin2(\p_) = 1. (2.64) Оно означает, что свободно могут быть выбраны только один или два угла на- клона осей ОСК к ФКП. Примеры: □ фд. = 45°, фЛ = 30° => sin2(v;) = 0.25 => фг = 30°; □ vpv = 45°, = 45° => sin2(vp>.) = 0 => ф(. = 0°; □ = 90° => - ip = 0°. Из (2.63) следует решение обратной задачи: для получения желаемых углов vj/v, и углы вращения ОСК следует выбирать из условий <рд. = ф,„ = -arcsin sin(yJ cos(w,.) = arccos sin(y..) (2-65) Масштабные коэффициенты осевых искажений тх = +п1^у = ф -cos2(<px )sin2 (<pj;) = cos(vx) ^ 1, my = ijmjx + m}y = |cos((pv )| = cos(vj; )< 1, m. = + m^y = ^1 - cos2 (<pY )cos2 (<p v) = cos(y _) < 1 (2.66) есть длины отрезков — проекций ортов ОСК на КП. Из (2.64) и (2.66) следует условие взаимосвязи масштабов: 7 7 7 mi + mi + mi =2. Л z *- (2.67) Как и в (2.64), свободно могут быть выбраны только один или два масштаба. Иногда нужно обеспечить желаемые соотношения масштабов тх : ту : т: = А\.: ку : к.. Тогда, приняв ж, = г/<„ из условия (2.67) получим А2+А2+А2 ' 'ykx+ky+kz (2.68) Ориентация проекций осей ОСК на ФКП может быть определена, например, углами у,„ уду, у,.. и у., (рис. 2.41). причем у + уу: + у.д. = 360°: cos(yj; )= = cos(<pr ) => Yr = Ф- ; (2.69, а)
200 Гпава 2 тххтух + тху+туу _ siп (<ру )sin (фу ) >Пх>ПУ ^l-cos2fax)sin2^) myxmzx +туу+ mzy _ - sin (фх )соз(фу) mymz ^1-СО52(фх)сО82(ф5,) (2.69, 6) cos(y.J mzxmxx + mzy + тху mztnx __________cos2(<Px)sin((p>,)cos((p>,)__________ '1 - cos2 (фх )sin 2 (фу )^1 - cos2 (фх )cos2 (фу ) -90°«ру<0° -90°«ру<0° -90°«рх<0° 0°«р>.<90° 0°«рх<90° 0°«р>,<90° Рис. 2.42
Геометрические преобразования 201 Изобразим на рис. 2.42 ориентации осей х'. у', z' и моделей кубов в зависимости от знаков углов <рЛ и <рг Из анализа (2 69) следуют выводы: □ только углы <рд и <рЛ. определяют коэффициенты осевых искажений и углы ме- жду проекциями осей ОСК; □ только угол ф. последнего поворота ОСК определяет угол уу вертикальной ори- ентации проекции ОСК на ФКП. Именно поэтому вращение ОСК вокруг оси z выбрано последним, чтобы без него можно было получать разнообразные ра- курсы изображения объекта с привычным вертикальным расположением оси у'. Часто при построении аксонометрической проекции задаются масштабами т„ ту. и т., соответствующими единичным отрезкам на осях х',у' и z'. Тогда осталь- ные параметры ортогональной аксонометрической проекции можно рассчитать по вытекающим из (2.66) формулам: . , j 2 cos2 (фх) = т2 , cos2 (ф^, )= — ту cos(vx)=wx, cos(vr)=/wJ„ cos(vz)=/w2, (2.70) 2 2 2 cos2(Yxy)= cos2(yyz)= —cos2(yZx)= — 1 - my 1 - mz 1 - mx Полная матрица ортогонального аксонометрического преобразования на ФКП с учетом последней операции проецирования равна Af - Ryxz°t ~ тух та тху 0 Шуу 0 mzy 0 (2.71, о) Для того чтобы проекция имела вертикальную ориентацию оси у' (уу = 0), пово- рот объекта вокруг оси z не нужен, что следует из (2.69, а). При ф. = 0 матрица фронтального аксонометрического проецирования вычисляется как матрица сложного преобразования Af = Ryx Ot и с учетом (2.71, я) и (2.62) принимает вид sinfajJsin^tp.J cosfaj -sinfojcos^ -cosVPxJsin^J sin(<Px) cos(cpA. )cos (ф^,) cos (ф^ ) sin (фх )sin (ф^) 0 0 cos (фх) 0 sin^,) - sinfax )cos (ф^ ) 0 (2.71,6)
202 Гпава 2 Во многих задачах (построение теней и зеркальных отражений, расчет освещен- ности поверхностей и т. д.) требуется знать вектор направления на источник про- ецирующих лучей, выраженный в объектных координатах. В МСК это вектор S. Например, при фронтальном ортогональном проецировании S = [o 0 1], при горизонтальном— S = [o 1 О], профильном— S' = [1 0 б]. Преобразование сцены матрицей С изменяет и координаты вектора S в ОСК. Их легко получить с помощью обратного преобразования, описываемого матрицей С-1. Координаты вектора наблюдателя в ОСК вычисляются по формуле (2.15): So = S С’1. Обратная к (2.61) матрица равна yxz К: Кх Ку KyXZ, откуда получаем вектор источника в ОСК: (2-72, а) В частном случае фронтальной аксонометрии с вектором S = [о 0 1] и матри- цей Ryx с учетом (2.62) получим S0=['Wjc myz [“cos(<Px)s'n(4)>) ^(фх) cos(tPx)cos(<P>)]- (2.72,6) Рассмотрим построение аксонометрической проекции окружности p(t) радиуса г. лежащей в плоскости П под углом к КП, равным 90° — хр < 90°. Ее проекцией яв- ляется эллипс p'(t) с полуосями а - г и b - г sin(xp) < г, ориентированными относи- тельно проекции нормали к П как b || N' и а ± N' (рис. 2.43, а). Рис. 2.43
Геометрические преобразования 203 Так как координатные плоскости ОСК образуют с ФКП углы 90° - то длины н ориентации полуосей эллипсов как проекций окружностей на гранях модель- ного куба (рис. 2.43, б) равны «f = г ± z, ah = г ± у, Ор = г ± х, bt = || z', = гф-Шу || у, bp = || x. CD Пример 2.5. Построить аксонометрическую проекцию куба со вписанными в его грани окружностями при соотношении масштабов mx : my: т. = 6:5:4. Решение. Вычислив по (2.68) = 0.1612, тх 6с ® 0.967, mf = 5с ® 0.806, т: = 4с ® 0.645, определим по (2.69, б) углы ориентации проекций осей ОСК уд>. = 101.2°, уу: = 150.6°, у., = 108.2°, а по (2.73) длины полуосей эллипсов af = «ь = af = г, bt - 6.164r, bh - 0.592г, bf — 0.255г, являющихся фронтальными проекциями окружностей радиуса г на передней, верхней и правой гранях куба. Изображение объекта приведено на рис. 2.43, б. Для его построения по (2.69, а), (2.70) и (2.71,6) рассчитаны следующие углы вращения объекта и матрица проецирования: 0 <Р, 0.949 -18.4°, <рЛ = 36.3°, <р_. = 0°, Аг = 0 -0.316 -0.187 0.806 -0.562 0 .□ о Таким образом, мы рассмотрели основы аксонометрии— методики построения иамой общей триметрической ортогональной проекции, у которой все осевые масштабы попарно не равны друг другу. Количество триметрических проекций бесконечно, стандартная триметрия отсутствует. В диметрических проекциях два из трех масштабов равны друг другу, что дает три варианта выбора углов вращения ОСК. 23 Если тх - ту * т., то из (2.66) получим sin2(cpr) = tg2(q> J, откуда |<Рх| = |агс1Й'п(<Рт))| тх =ту =М<Рх)|. ту =V2|sin(<px)|, со52(у>2)=сов2(у,х) = tg(<Px) ^(2<Рх)’ 6f = r>/|cos(2<px)|, 6h =bp =r|sin(<px)|.
204 Гпава 2 Например, выбрав фл = -60°, получим tg2(ipv) = 0.75. Из четырех возможных углов выберем Фх = arctg и определим параметры диметрической проекции куба на рис. 2.44, а: тх = ту = 0.756, т. = 0.926, уЛ, = у,Л. = 110.7°, уху - 138.6°. □ Если ту = т. тх, то из (2.66) получим соя2(фЛ) = tg2^v), откуда ^x| = |arctg(cos^_J)|, тх = V2|sin(фх)| ’ ту = mz ~ |cos(<Px)|’ cos2(vJ=cos2(,J = |^il, bf =bh = r|sin(vJC)|, bp =r^\cos(2(px)\. Например, выбрав фЛ = -30°, получим tg^J = 0.75. Из четырех возможных углов выберем V3 <рх = arctg — ~ 40.9° и определим параметры диметрической проекции куба на рис. 2.44, б: тх = 0.926, ту = mz = 0.756, уху = у.Л. = 110.7°, yyz = 138.6°. □ Если тх = т,* ту, то из (2.66) получим sin2^,) = со52(ф>), т. е. выбор углов вращения ОСК должен быть таков: фЛ е {+45°, ±135°), фЛ. — любой. Тогда па- раметры диметрической проекции имеют вид 73-со8(2фх) тх = mz =------------, ту = |cos(Vx )|, 2, 2, 1-соб(2ф ) cos (^)-cos <^>°3_cos(2/i). bf = bp = lCOSJl*)lr, bh = /jsinfa, )|. Например, выбрав фЛ = -45° и фЛ.= 15°, получим параметры диметрической проекции куба на рис. 2.44, в: тх = тг = 0.73, ту = 0.966, уху = yyz = 104.5°, yxz = 151 °. В стандартной диметрической проекции соотношение масштабов составляет тх : my:mz = 2 : 2 : 1.
Геометрические преобразования 205 Фл=45°, Ф, =35.26°, <рг=30° Рис. 2.44 Тогда по (2.34) определяем 9%/9 -v9 mx = mv =--------= 0.943 , m =-------~ QA11, x y 3 3 а остальные параметры этой проекции (рис. 2.45) равны v7 г Yr = Yxv = 131.4°, y,.v = 97.2°, b{ = -yr = 0.882г, = Ар =- = 0.333г. Рис. 2.45
206 Глава 2 Для получения стандартной диметрии углы вращения ОСК должны быть заданы в соответствии с (2.70) равными <P_V -20.7°, <рх =arccos = 19.47° ,ф. 0°, тогда матрица проецирования и вектор источника по (2.71,6) и (2.72,6) будут равны л /?2 о 0 ' 0.935 -0.118 О' А = ^*дим 0 8 V9 0 0 0.943 0 ГТ -0.354 -0.312 0 1 7 -, - 0 V8 V 72 Ядам 4 1 V7]=[l 1 2.646]. (2-74) При построении ортогональной изометрической проекции выбор углов ния ОСК фг и <рЛ. связан условием тх = ту = т.. Тогда из (2.68) получаем враще- т, = J— =0.816, а из (2.70) и (2.73) следуют соотношения cos2 (ф,) = р cos2(v>,)=|, cos2 cos2(y^)= cos2(yzx)=-^-, 6f = 6ь = bp = -4=r = 0.577r. v3 Из этого можно сделать следующие выводы: □ изометрическая проекция объекта может быть получена вращением его на углы ф> е (±45°, ±135°} и фЛ. е {±35.26°, ±144.74°}; □ проекции осей ОСК ориентированы под углами, кратными 60°; □ проекции всех окружностей на координатных плоскостях ОСК подобны, от- личаясь лишь ориентацией осей. На рис. 2.44, г построена изометрическая проекция куба при углах вращения ФЛ - 45°, фу - 35.26° и ф. - 30°. Стандартная изометрическая проекция (рис. 2.46) получается при углах враще- ния объекта <Р, = -45°, = arccos = 35.26°, Фг 0°,
еометрические преобразования 207 mx .niy.m, = 1:1:1 Рис. 2.46 имеет симметрично ориентированные под углами ух> = уу: = yv. = 120° проекции осей ОСК, а матрица проецирования и вектор источника согласно (2.71, б) и (2.72, б) равны Sroo=[l 1 О- (2.75) 2.2.3. Косоугольные проекции Косоугольное проецирование отличается от ортогонального тем, что в нем для объемного видения объекта пучок параллельных проецирующих лучей не орто- гонален КП. При этом сам объект и его ОСК остаются неподвижными. Соответ- ственно, 5кос - S. Косоугольное проецирование — основной инструмент для по- строения тени объекта на плоскости и отражения объекта в плоском зеркале. Как показано на рис. 2.47, вектор направления на проецирующий пучок 5 = |лЛ. sy sz ] составляет с нормалью к ФКП угол проецирования Хг такой, что a +sy tg уч )- • sz Параметрическая функция луча, проходящего через точку р = [х у z] в на- правлении .8, есть р- St. Этот луч пересекает ФКП в точке р' = [х' у z']. Из \ словия z' -- z - s. tf = 0
208 Глава 2 получим параметр пересечения Ии остальные координаты точкир' е f: Z , Sx , Sy If = —, X =x——z, у = y——z. sz sz sz В векторной форме P' = pKt косоугольное проецирование на ФКП описывается матрицей Kf - 1 0 o’ 0 1 0 ~ сх ~су 0 Sx Sy > сх=—. СУ= — sz sz (2-76) Получим коэффициенты осевых искажений, проецируя косоугольно орты ОСК на ФКП: П 0 01 1 0 о’ 0 1 0 - 0 1 0 z=>mx = my = 1, mz=y/cx+Cy = tg(Zf) 0 0 1 ~СХ ~Су 0 (2.77) Углы ориентации проекций осей ОСК на ФКП определяются условиями улу = 90°, tg(y>2)=-^ = -^, tg(yzJ=-^ = -^. с_у Sy сх sx (2.78) Окружности в плоскостях, параллельных КП, проецируются в окружности, т. е. без искажений (рис. 2.48). Это главное отличие и основное преимущество косо- угольного проецирования перед аксонометрическим, позволяющее избежать по- строения эллипсов с произвольной ориентацией полуосей.
еометрические преобразования 209 На рис. 2.48. а изображена косоугольная фронтальная проекция сцены, состоя- щей из модельного куба с вписанными в его грани окружностями и осями ОСК. Рис. 2.48 Приведем по аналогии без вывода формулы расчета параметров косоугольных горизонтальной (рис. 2.48, б) 1 О о о О — cz О 1 сх= —> cz Sy *z Sy ’ (2.79, a) mx = m.= 1, my=-Jcx+cz = tg(Zh), / \ CY SY { \ C- s, Yza = 90°, tg(y )= —, tg(y^)= —- = —*- c7 s. CY SY (2.79,6) (2.79, e) и профильной (рис. 2.48, в) проекций: s= 0 -Су — cz 0 1 0 0 0 1 sy sz , Cy=—, cz=-^-, sx sx (2.80, a) ту = т. - 1, тх = jCy + cz = tg(zp ), (2.80,6) 90°, tg(Yzx)=-^ = - cz —, tg(y^)= sz J Cy Sy (2.80, e) Некоторые направления вектора 5 дают стандартные косоугольные проекции.
210 Гпава 2 □ Кабинетная проекция (косоугольная фронтальная диметрия), изображенная на рис. 2.48, а. образуется при S= [l I 2V2]. Тогда по (2.76)—(2.78) опреде- ляем ее параметры: т, = ту - 1, т. = 0.5, уд> = 90°, = у.Л. = 135°, = 0.354, SKa6=[l 1 2V2], "kt - arctg(0.5) ~ 26.6°, сх =с, 1 0 0 1 0 0 ^каб 0 1 0 0 1 0 (2.81) 1 1 0 -0.354 -0.354 0 2V2 2V2 - Данная проекция наиболее наглядна и проста в построении. Часто кабинет- ной проекцией ошибочно называют построенную на бумаге в клетку косо- угольную проекцию с соотношением масштабов тх :ту :т2 =2:2:близ- ким к соотношению 2:2:1 кабинетной проекции. □ Каеальерная или военная проекция (косоугольная фронтальная изометрия) изображенная на рис. 2.49, образуется при выборе S = [1 1 ^]. Тогда по (2.76)—(2.78) определяем параметры проекции: тх = ту = т. = 1, уДД1 = 90°, у>5 = у.Л. = 135°, Хг = arctg(l) = 45°, cx=cv = -J= = 0.707, 5кав=[1 1 Ji], V2 ^кав 1 о 1 о -0.707 0 0 1 0 -0.707 0 (2.82) Рис. 2.49
Геометрические преобразования 211 По сравнению с кабинетной проекцией лучи при кавальерном проецировании проходят более полого, под большим углом к КП. Из-за этого проекции объек- тов выглядят вытянутыми и несколько неестественными. В то же время каваль- ерная проекция удобна для измерения длин отрезков, параллельных осям коор- динат. Геометрическая точность и способность отображать объем объясняют использование в старину кавальерных проекций в фортификационном деле. □ Зенитная проекция (косоугольная горизонтальная изометрия) образуется при выборе направления проецирования S = [1 2 у!з]. Тогда по (2.74) находим ее параметры: тх = ту - т. = 1, у.А. - 90°, yV), = 120°, уу. - 150°, Xh = 45°, cx = 0.5, cy = 2il = 0.866, 5зеи = 1 2 7з], 1 0 0 10 0 ^•зсн -- 0 2 2 -0.5 0 -0.866 (2.83) 0 0 1 0 0 1 Данная проекция представляет наклонный вид на объект сверху. В аэрофото- съемке используется зенитная диметрия — вид с высоты птичьего полета — с углом наблюдения Хм ~0° и соотношениями осевых масштабов и координат точки наблюдения 2 2 2 2 тх: ту :т:= 1 : ky : 1, sx+sy = kysy. Выбор коэффициента сжатия высоты ку = ctg(Xh) « 1 позволяет изображать на чертеже вытянутые вверх объекты — горы, небо- скребы, башни и т. д. Если перед косоугольным проецированием выполнить вращения объекта, то по- ручим косоугольную триметрию — наиболее общий вид параллельного проеци- рования, в котором осевые масштабы связаны условием, обобщающим (2.67): тх +ту +т% = 2 + tg2(X). (2.84) 2.2.4. Центральные (перспективные) проекции При построении центральной проекции (ЦП) используются однородные коорди- аты и эквивалентные векторы. Декартовы [х у z 1] и однородные j Ь с h\ координаты расширенного вектора связаны соотношениями а Ь с Т’ У = ~Г’ h n n (2.85)
212 Гпава 2 Назовем операцию (2.85) приведением однородного вектора к декартовой форме, в которой h = 1. Эквивалентность векторов \hx hy hz h]~ [х у z 1] означает, что они имеют равные соответствующие декартовы координаты. За- дание масштаба h * 0 позволяет без арифметических операций изменить сразу все координаты в 1 / h раз. Возможны два способа работы с однородными векторами: □ все операции проводятся с векторами в декартовой форме, а полученные од- нородные векторы сразу переводятся по (2.85) в декартову форму; П операции проводятся с однородными векторами по специальным формулам, а перевод в декартову форму выполняется только на последнем этапе вывода изображения на экран дисплея. Основные операции с однородными векторами: Г) сложение и вычитание Ь fy]+[p2 h2]~ y- P2 _h2 1 ~\p\h{+P2h2 МгЬ 1 □ умножение вектора на скаляр £ h а[р /г]~а ар h 1 1 ~ р h а П скалярное произведение векторов [р] Л]]°[р2 Л2]~ -^- ° -p-V-'0/2 ~Ь°Р2 И ДМ hh2 М2]; □ векторное произведение векторов [pi М1а> = M2L (М IM М2 Рассмотрим методику получения центральной проекции точки р = [х у г] на фронтальную КП от точечного проектора с координатами 5' = [vx sy дг] (рис. 2.50). Через точку р проходит прямой луч, описываемый параметрической функцией 5 + (р - S)t X/t > 0. В отличие от параллельного проецирования, не все точки пространства имеют центральные проекции, а лишь те, которые вместе с КП лежат по одну сторону от проектора, т. е. удовлетворяют условиям z < s. при s. > 0 или z > s. при s. < 0.
Геометрические преобразования 213 Рис. 2.50 Координаты р' = [/ у о] проекции точки р на ФКП находим из условия z' = О пересечения луча с плоскостью ху: z' = s. + (z- s.)tt — 0 => If = — = £ h ’ (2.86, a) , 7 \ x - cxz Пол И ЭК1 учаем yp швалент [/ у Ди iS y • X f ’ h у = sy + (y sy)tf - hy , sx Sy 1 . cx =—Cy=^~, Cf =—, n = sz л sz sz авнения в однородных координатах hx' = х-cxz, hy' - у- cyz, hz' — 0,h — ное декартово решение в координатнс z' 1]~ [hx' hy hz' й]=[х у z 1] 1 - Cf z. 1 - CfZ й и векторной форм 1 0 0 0 ' 0 10 0 ~cx ~cy 0 ~cf 0 0 0 1 (2.86, 6) (2.87) ax: , (2.88) р'~рЦ{. 4 Это и есть решение задачи центрального проецирования точки на фронтальную плоскость, получаемое за два этапа: □ расширенный вектор координат точки умножается на матрицу Цг, □ полученный однородный вектор преобразуется в декартову форму.
214 Гпава 2 Между этапами следует выполнить проверку значения h. Условие существования центральной проекции tr > 0 согласно (2.86, а) равносильно условию h > 0. Ем\ удовлетворяют точкир\,рг ирз на рис. 2.50. При h < 0 центральной проекции точки на ФКП не существует. В частности, если луч .S' —параллелен ФКП, то z = v. Л = 0, а проекция р'д является вырожденной, т. е. удаленной в бесконечность: Тем не менее конечная величина отношения У _y~sy X X-Sx задает на ФКП направление на точку р'4. Наконец, если луч S -урз сразу после испускания удаляется от КП, то на первом этапе расчета центральной проекции получим h < 0 и —мнимую проекцию точки рз. Не трудно заметить сходство механизмов центрального проецирования и обра- зования тени точки q на плоскости по формуле (1.144) (см. рис. 1.63): в обоих процессах прообраз q’ может быть действительным (при h > 0 и 1Ч > 0), мнимым (при h < 0 и t4 < 0) или вырожденным (при Л = 0 и 1’, = 0). Есть и отличие: точка, расположенная относительно проектора за плоскостью проецирования, имеет действительную центральную проекцию, но не имеет действительной тени. Дру- гими словами, плоскость проецирования является прозрачной (часто она вообще виртуальная, т. е. мысленно подразумевается, но в действительности не сущест- вует), а плоскость тени реальная и непрозрачная, иначе, выходящие из источника лучи, обтекая объект, не создавали бы на ней освещенность вокруг тени. При удалении проектора от ФКП в бесконечность центральная проекция объек- та вырождается в параллельную. При этом, если: П проектор удаляется в ортогональном к картинной плоскости направлении, то kJ < со, к,1 < со, KI сх ~ су = ct=0, а в (2.88) получим Цг = Of— матрицу ортогонального фронтального проеци- рования из (2.60); П проектор удаляется в неортогоналъном к КП направлении, то |.v.| -> оо, 0 * |сЛ.| <оо, 0 * |су| < <ю, а = О, a Iff = Kt— матрица косоугольного фронтального проецирования из (2.76). Важнейшее свойство центрального проецирования, давшее ему второе назва- ние, — перспективное (от лат. perspicio — ясно вижу) схождение проекций парал- лельных линий. Изучим это интересное явление, благодаря которому плоские изображения выглядят объемно и реалистично.
Геометрические преобразования 215 Центральной проекцией отрезка прямой линии, например, р\рз на рис. 2.50, также является отрезок р[р^ на прямой пересечения ФКП с плоскостью, про- ходящей через три точки: S,pt и рз. Подставим уравнение прямой p(t) = ро + Vt в (2.88) МО y(t) z(t) 1]Z4 = = [x0 + Ext-cx(z0+E,t) y0 + Vyt-cy(z0+V.t) 0 l-cf(z0+K/)]~ *0 ~ cx-0 + (^x ~cx^z)? - CyZ0 + (*У ~ )f 0 J Г //Л '(Л l-c{z0-CfVzt \-CfZ0-cfVzt В том, что полученные координаты проекции x'(t) и y'(t) описывают прямую ли- нию, нетрудно убедиться, вычислив наклон этой линии: dy' _ dy'/dt _ (1 ~ cf zo У у ~ ~ cf zo Уz _ dx' dx'/dt (1 - cf z0 )VX - (cx - cf z0 )VZ Gz ~z0)vz Gz -z0)Vx-(sx-z0)f/z = const Vt. Таким образом, прямая линия проецируется также в прямую линию, но с нерав- номерной шкалой: движение точки по прямой p(t) с постоянной скоростью V дает неравномерное движение ее проекции p'(t). Убедимся также, что предельное положение (точка схода) проекции прямой ли- нии ро + Vt Pcf = lim p'(t)= sx —+sz Vz (2.89) не зависит от расположения точки ро, а определяется только координатами ис- точника 5 и направляющего вектора V. Все параллельные прямые, не парал- лельные плоскости проецирования, имеют на перспективной проекции одну и ту же точку схода. Ее можно просто получить, проведя из точки 5 прямую 5 + Vt до '’ересечения с ФКП. Если эта прямая параллельна проективной плоскости, то точка схода отсутствует. Из сказанного следуют выводы: □ центральные проекции пучка параллельных прямых сходятся в одну общую точку (2.89); □ условие существования точки схода: V, 0 — пучок параллельных прямых не должен быть параллелен плоскости проецирования: □ если V. - 0, то точка схода вырождена, т. е. удалена в бесконечность, а проек- ции параллельных прямых, параллельных картинной плоскости, параллельны.
216 Гпава 2 Аналогично (2.86)—(2.89) выводятся формулы для центрального проецирования на горизонтальную 1 0 0 0 Uh = ~сх 0 ~сг -А» Л„ S7 1 > сх=—, cz=~, ch= — 0 0 1 0 Sy Sy 0 0 0 1 (2.90) К. Sv Pch sx ~SV x tz •> У A 0 sz ——sv 17 У у = S— и профильную КП: ^P = 6 Cy Cz Cp 0 10 0 0 0 10 0 0 0 1 (2.91) Можно обойтись и одним фронтальным проецированием, поворачивая объект к проектору нужными гранями. Но если картинная поверхность состоит более чем из одной плоскости, то лучше использовать совместно разные виды перспектив- ных проекций для уменьшения числа геометрических преобразований и времени расчета. Центральные проекции условно классифицируются (см. рис. 2.38) по числу точек схода изображения куба или параллелепипеда. Например, проекции каркасных кубов на рис. 2.51 имеют одну (а), две (б) и три (в) точки схода по числу пучков параллельных ребер, не параллельных плоскости ху. Второй объект получен вращением первого вокруг вертикальной оси. Третий объект — вращением вто- рого вокруг оси, параллельной оси х. Условность классификации ЦП означает, что изображения других объектов могут вообще не иметь ни одной точки схода (например, тетраэдр) или более трех таких точек (октаэдр). Построение центральной проекции отрезка ab требует анализа четырех вариан- тов расположения его концевых точек а и Ь относительно плоскости проециро- вания и проектора в зависимости от значений параметров hu и П при {йа > 0}П {hb > б} отрезок а'Ь' есть действительная проекция отрезка ой; П при {ha <0}П{й6 <0} проекция отрезка отсутствует в силу мнимости (вырожденности) ЦП обоих его концов; □ в оставшихся двух вариантах проекцией является луч, начинающийся в точке действительной проекции и уходящий в бесконечность в направлении, проти-
Геометрические преобразования 217 воположном точке схода отрезка. Например, при {Ла > 0}П {hb <о} и направ- ляющем векторе V = b - а по (2.88) и (2.89) вычисляем точки а' ~ аЩ, Ьс = Sy vz Sz О по которым строим проекцию отрезка в виде луча а' —> 2а' - Ьс. При {Ло < 0}П {hb > О} получим проекцию-луч b' -> 2Ь' - ас, где Ь'~ЬЦ{, ас = VH Sy Vz Sz О «РсЗ Рис. 2.51 & Пример 2.6. Построить проекцию отрезка прямой ab на угол первого октан- та, образованный пересечением координатных плоскостей ху и zy. Координаты проектора .S' = [2 I 4], концов отрезка а = [О 1 б] е zy и 6 = [3 2 О] е ху (рис. 2.52).
218 Гпава 2 Решение. Рассчитаем по (2.88) и (2.91) матрицы центрального проецирования на фронтальную и профильную плоскости: 1 0 0 0 '0 -0.5 -2 -0.5 Uf = 0 -0.5 1 -0.25 0 0 0 -0.25 > Up 0 0 1 0 0 1 0 0 0 0 0 1 0 0 0 I Найдем однородные и декартовы координаты проекций концов отрезка на эти плоскости: Рис. 2.52 Из четырех проекций только две ap=a и b'{ =b являются действительными Проекции a'f и Ь'р — мнимые, лежащие на отрицательных продолжениях лучей 5 —> а и 5 —> Ь, что подтверждается значениями hj - -0.5 < 0 и /гЛР = -0.5 < 0.
Геометрические преобразования 219 Таким образом, мы имеем по одной точке проекции a'pezy и bf еху на гори- зонтальной и фронтальной картинных плоскостях. Полная проекция отрезка ab состоит из двух отрезков, для построения которых нужны еще две точки — по одной на каждой плоскости проецирования. Например, вычислив направляю- щий вектор К = b-a = [-3 -1 б] и по (2.89) и (2.91) точки схода Pcf = 4 3 0 , Рср - о 8 3 (их можно построить графически, проведя через точку 5 прямую, параллельную ab, до пересечения с плоскостями f и р), получим параметрические уравнения лучей p{(f)=b'+(b'(-pcf}tf =[з 2 о]+[-1 1/3 0]rf V/f>0, Рр(') = «р + U - Pep )tp = [О 1 б]+ [0 2/3 - 2]rp V/p > 0. При it = tf - 3 лучи пересекаются в точке с = [б 3 б] на оси у, обеспечивая пе- реход проекции отрезка с одной проективной плоскости на другую. Используя мнимые проекции b'pGzy и а'{еху, получим альтернативные (2.92) параметрические уравнения лучей Pf (t) — bf + (bf ~ af = [з 2 o]+[—3 1 oj/g* Рр(‘)=ар + ("p _/>p)fp =[° 1 6l+[° 2 -6]fpVrp>0, пересекающиеся при tr-tp- 1 в точке с = [б 3 б]. В итоге центральной проекцией отрезка ab является ломаная линия acb. Однако, если не проверять все точки проекций на мнимость, будет получена неверная ЦП, состоящая из двух отрезков abp и ba'f. □ Одним из видов центрального проецирования является так называемая "обратная перспектива". Построение изображений объемных тел в этом ракурсе широко применялось в византийской и унаследовавшей ее традиции древнерус- ской живописи. Ее яркими представителями являются знаменитая икона Андрея Рублева "Троица" XV в. (рис. 2.53, а) и миниатюра из Евангелия XVI в. (рис. 2.53, б). Визуально обратная перспектива отличается от прямой тем, что в ней из двух одинаковых фигур крупнее выглядит та, которая расположена от наблюдателя дальше, что придает изображению некоторую ирреальность, неес- тественную потусторонность. Рассмотрим геометрическую модель метода обратной перспективы и построение с помощью этой модели изображения объекта. Желаемый эффект достигается отделением активного процесса формирования проекции от пассивного процес- са ее созерцания. В соответствии с названием метода разместим наблюдателя и проектор 5 по противоположные стороны от ФКП (рис. 2.54), а именно: □ направление на дальнего наблюдателя зададим ортом z°;
220 Гпава 2 П положение проектора S = [о О -У7] на фокусном расстоянии F от ФКП за- дадим так, что минимальная аппликата объекта znnn > -F, а объект целиком располагался бы между наблюдателем и проектором. Рис. 2.53 Рис. 2.54 Таким образом, расчет обратной перспективы точки р = [х у z] выполняете» по формуле (2.88) с матрицей и координатами проекции '1 0 0 0 ' 0 1 0 0 , Fx , Fy Ц[ ~ , х - , у - 0 0 0 F 1 F + z F + z 0 0 0 1 (2.93)
Геометрические преобразования 221 На рис. 2.55 приведена рассчитанная по (2.93) обратная перспективная проекция сцены, состоящей из квадратного подиума и стола с квадратной крышкой, на которой лежит, немного свесившись вперед, книга в форме параллелепипеда. Рис. 2.55 2.2.5. Проективные алгоритмы сложных преобразований Проективные преобразования кроме своего непосредственного назначения — (зображения сцены в желаемом ракурсе— могут применяться для быстрого по- строения: □ различных фигур и изображений на плоских и криволинейных поверхностях; □ сцен от первого лица, изображаемых с позиции подвижного наблюдателя; □ простейших оптических эффектов — теней, отражений, преломлений. Основное преимущество проективных алгоритмов — возможность группового преобразования точек по (2.9), т. е. параллельных вычислений по одним и тем же формулам для всего множества точек. Такой подход к организации вычисли- тельного процесса составляет серьезную конкуренцию алгоритмам трассировки см. разд. 1.3), в которых проводятся индивидуальные лучи через каждую точку аждого объекта. Процесс трассировки более трудоемок по сравнению с группо- вым преобразованием и имеет преимущество лишь при малом числе точек и вы- сокой сложности их преобразования. Для расчета групповых преобразований по (2.8) и (2.9) необходимо сформиро- вать матрицу координат Q. Ее строками являются расширенные формы: □ точек р, =[р, 11 — центров объектов, концов отрезков прямых, вершин по- лигонов; □ векторов Ё; = б] — скоростей движений и направлений осей вращений; □ нормалей N, = [Д', б] к плоскостям граней полиэдров, теней и отражений.
222 Глава 2 При групповой организации координат всех объектов сцены в одной матрице общее преобразование сцены матрицей С выполняется за одно умножение: Q' = QC. Если требуется выполнить индивидуальное преобразование т-го объекта сцены матрицей С<я,>, то можно объединить строки координат этого объекта в блок Q<m>, тогда Q /<т> __ Q<’"> Q<ni> Построение изображения Зб-объектов на плоском экране дисплея может быть выполнено двумя способами (рис. 2.56). П Двухэтапное преобразование координат точек • из МСК в СК ФКП с помощью Сп — одной из проективных матриц Of Af, К{ или Це. Qr~QCn. (2.94.«) • из СК КП в ЭСК с помощью матрицы С, из (2.26) или (2.27): C, = CfC,. (2.94,6) Двухэтапный метод применяется при посзроении изображения сложной сце- ны, состоящей из множества объектов. Между первым и вторым этапами ре- шаются задачи визуализации изображения: • отсечения графических элементов, нс попавших на КП; • удаления невидимых элементов, заслоненных другими элементами; • освещенности видимых поверхностей; • расчета различных оптических эффектов — отражений, преломлений, теней При использовании центрального проецирования после первого этапа вы- полняется приведение координат к декартовой форме. Рис. 2.56 П Преобразование координат точек из МСК сразу в ЭСК: — Qf Сп,, где Си, — Сп С,. (2.95»
''еометрические преобразования 223 Одноэтапный метод удобен для параллельного проецирования одиночных выпуклых объектов прямо на экран дисплея. Решение задачи отсечения вы- полняется быстрыми целочисленными алгоритмами в ЭСК. Совмещение ЭСК с МСК превращает двухэтапное преобразование (2.94) в одно- этапное (2.95). Если при этом ось z, направлена к наблюдателю, то в левой ЭСК направления всех вращений будут обратными по сравнению с правой СК, что нужно учитывать при выборе параметров матриц вращений (2.21). При выводе элементов изображения на экран дисплея сразу после их расчета и при низком быстродействии ЭВМ наблюдается неприятный эффект "мерцания", при котором последовательность вывода замедлена и видна в реальном времени. У странение мерцания и "дергания" изображения достигается методом двойной буферизации [36], т. е. разделения массивов памяти, используемых для формиро- вания изображения и вывода его на экран. Если используемый программой гра- фический режим имеет хотя бы две страницы видеопамяти (буфера кадра), то одна из них выбирается пассивной видимой страницей, а другая — активной и невидимой. После построения всего изображения на активной странице по командам прикладной программы выполняется переключение страниц. В отсутствие второй видеостраницы в качестве буфера используется массив >перативной памяти размером с окно вывода, откуда данные блочно, т. е. быст- ро, копируются в видеопамять. Этот способ предпочтительнее, т. к. запись в ОЗУ выполняется быстрее, чем в видеопамять, но он требует от программиста созда- ния собственной библиотеки растровых функций построения прямых, окружно- стей, полигонов и решения задач заливки, отсечения, вывода текста, решаемых встроенными библиотечными функциями любого развитого языка программи- рования. 2.2.5.1. Проецирование пространственных линий на плоскость Применим проекционный подход к построению изображений графических объ- ектов на различных поверхностях. Вначале рассмотрим некоторые методы про- ецирования пространственных линий на плоскость, в том числе и на плоскость •крана. Они могут быть полезны программисту, создающему библиотеку функ- дий построения различных геометрических фигур. Общий подход к проецированию полностью детерминированной линии p(t) е R3 из МСК на плоскость экрана заключается в расчете по (2.95) матрицы проециро- вания Ст, выборе значений параметра t„ вычислении узловых точек р, = />(/,), их экранных проекций рЭ1 = рц, )СПЭ и соединении каждой пары соседних точек стрезком прямой линии функцией Ипе(рь, p>.,t \)- Проецирование обладает полезным свойством: локальные участки кривой p(f), ча которых вектор К(/) = dp(t) / dr составляет с нормалью к проективной плоско- сти малые углы, имеют на проекции p,(t) большую кривизну и сгущение узлов. Оптимальным является распределение узлов на кривой линии по следующему принципу: плотность точек р, пропорциональна кривизне самой кривой, а не ее
224 Гпава 2 проекции. Для изображения отрезка прямой достаточно проекций всего двух его концевых точек. Проецирование пространственной окружности на плоскость эквивалентно аф- финному сжатию плоской окружности в эллипс. Как показано на рис. 2.19, это преобразование автоматически сгущает удаленные от центра эллипса точки рЭ;, в то время как узлы р, распределены по окружности равномерно. Рассмотрим методы проецирования некоторых не полностью определенных ли- ний. Начнем с построения правильной n-сегментной ломаной линии Р = {р< ...р„ри+|}, вписанной в дугу окружности, с параметрами: □ f = {ро, N} — плоскость окружности; □ ро — центр окружности; □ N — нормаль к плоскости окружности; □ pi — первая вершина ломаной линии; □ 5 рад — угол раствора дуги окружности. Наиболее рациональный путь решения задачи состоит в построении образа ло- маной линии Ро е хр путем л-кратного вращения орта х° вокруг оси z на уго~ у = а/п, преобразовании образа в заданное положение Р на плоскости f и, на- конец, проецировании на картинную плоскость или экран (рис. 2.57). Рис. 2.57 Наличие трех элементов ро, pi и N, связанных с плоскостью f, позволяет постро- ить матрицу Со преобразования из СК xyz в СК x'y'z' с помощью функции МАРУ, определенной в (2.55). Зададим ее аргументы oi = Оз, = z°, И7! = х°, 02 = ро, И2 = N, Wi= р\ -ро
Геометрические преобразования 225 так, чтобы образ точки р\ был в х°, а коэффициент масштабирования по осям х и у был одинаковым и равным г = |/л -ро|. Отметим, что если задать Vi - N, то коэффициент масштабирования в направлении оси у будет равен r|7V], а ломаная линия Р е f будет вписана в дугу эллипса, а не окружности. На основе сказанного составим функцию проецирования дуги правильной лома- ной линии с матрицей проецирования Сп. S'pro_arc(p$, N,pi,a, п, Сп) R = R(a I ny, // матрица вращения на угол ц/ С = МАРз(рз,г°,х°, Po,N,pi - Ро)сп i И матрица проецирования р = х° , рэ = рС ; И образ первого узла и его проекция Vi = l, п И цикл построения сегментов ломаной линии {Я=Рй // запоминание проекции /-го узла р = pR\ И расчет образа (/ + 1)-го узла Рз = рС; // проекция (i + 1 )-го узла line(q, рз); И проекция отрезка ломаной линии Задание специальных значений аргументов функции pro_arc позволяет проеци- ровать различные пространственные линии. □ при a - 2л получим проекцию правильного п-угольникст, □ при достаточно большом значении п ломаная линия практически совпадает с дугой окружности. Например, выбор л = р80а/л^ располагает узлы ломаной линии на дуге описанной окружности через один градус. Следуя рекомендаци- ям, изложенным в комментариях к рис. 2.14, получим оптимальное значение ap.trN, "=ПМ~’ где г = \р\ -/?о|, а цэ — вычисляемый по (2.27, б) масштабный коэффициент пе- рехода из ОСК в ЭСК. Если все координаты и размеры элементов в МСК за- даны в пикселах, то ц, = 1; □ для проецирования окружности задаются а = 2л и большое число сторон ап- проксимирующего окружность правильного полигона, например, п - 360 или его оптимальное значение Иэ'- |«|
226 Гпава 2 Проекция представляет собой вписанный в эллипс н-угольник, плотносте расположения вершин которого пропорциональна кривизне эллипса, а ми- нимальное расстояние между вершинами составляет один пиксел. В описанном методе положение окружности в пространстве задается центром р и точкой pi, лежащей в плоскости {ро, N} и определяющей радиус окружное™ г = |pi -ро|. Часто исходными параметрами окружности могут быть ро, N и г, чтс делает ее построение неоднозначным, т. к. при этом остается неизвестной началь- ная точка pi. В условиях неполной определенности можно вычислить матрицу С преобразования из СК xyz в СК x'y'z' с помощью функции MAPI из (2.51) с ар- гументами OI = Оз, И] =2°, 02 = ро, V2=rN. Взяв теперь начало окружности образа в х°, получим точку р| = х°С0, лежашук в плоскости {ро, N} на расстоянии г от точки ро. Реализуем все сказанное в виде функции проецирования окружности радиуса г лежащей в плоскости {ро, N}. & pro_circle(r,po, N, Сп) Н И число вершин аппроксимирующего полигона R = Rz(2n/ л); // матрица вращения на угол между вершинами С = MAP2\pj,z°, р^, rN ; И матрица проецирования р = х° , рэ= рС ; V/ = 1, п И образ первой вершины и ее проекция И цикл построения сторон полигона p=pR\ Рэ=РС', // запоминание проекции i -ой вершины // расчет образа (/ + 1)-ой вершины И проекция (/ + 1)-ой вершины line(q,pi)-, } } О И проекция ребра полигона С помощью функции pro_circle были построены изображения окружностей, впи- санных в грани кубов, на рисунках данного раздела. & Пример 2.7. Построить в диметрической проекции изображение глобуса, со- стоящее из параллелей с шагом 30°, меридианов с шагом 45° и контура. Ради} с глобуса г, угол склонения вправо в плоскости хр равен фск = 23.5°.
Геометрические преобразования 227 Рис. 2.58 Решение. Желаемое склонение глобуса достигается вращением матрицей 0.917 -0.4 O' RCK =^Z(-<PCK) = VK Z \ < Vlx / 0.4 0.917 0 0 0 1 Диметрические проекции пяти параллелей, имеющих общие векторы нормалей Vn = >'°/?ск, различные радиусы и центры г(ап) = rcos(a„), рц (ап) = г sin (ап )у° RCK .гроятся функцией pro_circle(r(aB),pll(ci.B),Nn, АДИМСЭ) Van е {0°, ±30°, ±60°}. Диметрические проекции четырех меридианов, имеющих отличающиеся друг от друга векторы нормалей A(aM)=[cos(aM) 0 sin(aM)]/?CK, 'бщие нулевые центры и радиусы г, строятся функцией pro_circle(r,Oj,N(aM), АДИМСЭ) VaM е {0°, 45°, 90°, 135°}. Эртогональная фронтальная проекция контура глобуса создается большой ок- эужностью в его сечении, перпендикулярном вектору S' = [1 1 л/У] из (2.74), и : гроится функцией pro circle^",Oj,S,OfC3). □
228 Гпава 2 2.2.5.2. Стереографические проекции Во многих приложениях (компьютерные игры, тренажеры, авто- и авиасимуля- торы, управление манипуляторами и т. п.) важно создать восприятие глубины сцены, максимально близкое к реальной действительности. Проецирование на плоскость из единственного центра равносильно монокулярному зрению, кото- рое дает неполное ощущение трехмерности окружающего мира. Оно, конечно, лучше параллельного проецирования, которое вообще не способно к передаче глубины из-за бесконечной удаленности наблюдателя. Система монокулярного зрения человека преобразует двухмерную картинку на близкой к сферической поверхности сетчатке глаза в объемную, используя следующие "подсказки" на подсознательном уровне [26]: □ геометрическая перспектива — схождение в одну точку параллельных прямых; □ воздушная перспектива— ослабление толщей атмосферы цветового контра- ста и разрешающей способности глаза; □ параллакс движения— ближние к глазу объекты смещаются на плоскости проекции больше, чем дальние; □ относительный размер знакомых наблюдателю объектов; □ экранирование (перекрытие) дальних объектов ближними; □ фокусирующая аккомодация — зависимость напряжения фокусирующих мус- кулов глаза от расстояния до объекта. Система бинокулярного зрения обрабатывает дополнительную информацию: □ угол сведения оптических осей глаз; □ несогласованность местоположения проекций объекта на двух сетчатках, ис- пользуемая мозгом для оценивания расстояния до объекта. Программная имитация бинокулярного зрения состоит в разработке алгоритма построения стереографической проекции— двух центральных проекций на об- щую КП от двух разнесенных в пространстве проекторов (рис. 2.59). Пусть рас- стояние между глазами (оптическая база) равно 2D. Зрительная система фоку- сирует взгляд в некоторой точке — центре визуальной массы объекта или группы объектов, находящемся от наблюдателя на фокусном расстоянии F. Проведем через центр визуальной массы фронтальную плоскость проецирования ортогонально направлению взгляда. Глаза наблюдателя (проекторы) находятся в точках 5лев=[-П 0 F],Snp=lD О Г] и фокусируются под углом сведения ( DA y = arctg^— . Если D « F, то у« 0° и оба глаза видят объект практически одинаково. При сравнимых расстояниях D и F изображения, формируемые в сетчатке каждого глаза, отличаются друг от друга, чем и достигается эффект объемности при со-
Геометрические преобразования 229 единении мозгом двух картинок в одну. Наиболее комфортные для зрения усло- вия и наилучший стереоэффект достигаются при tg(y)®0.1, откуда у® 6° и Fa Ю£>. Например, при среднестатистической базе 2D = 70 мм получим F= 35 см — оптимальное гигиеническое расстояние для чтения, письма и точной ручной работы. Рис. 2.59 Стереоизображение состоит из двух центральных проекций объекта, рассчитан- ных отдельно для каждого глаза. Рассматривание стереопары производится с нулевым углом сведения глаз. Преобразования произвольной точки р в проек- ции левого и правого глаз состоят из операций вращения вокруг соответствую- щего глаза на углы флев = Y, фпр “ —у и центрального проецирования на ФКП, описываемого по (2.88) матрицами ' 1 0 0 0 ' 1 0 0 0 0 1 0 0 0 1 0 0 ^лев D 0 0 ’ Цпр - 0 0 F F F F 0 0 0 1 0 0 0 1 Таким образом, построение стереопары {рЛев,рпр} точки р выполняется по сле- дующим формулам: Рлев ~ рТ(—£лев)Ку(О)Т(8лев)Цлев , (2.96) Рпр ~ <7)^('^пр)^пр • На рис. 2.60 построено стереоизображение трех четвертей глобуса радиуса R - 20 мм при фокусном расстоянии F= 300 мм и оптической базе 2D = 70 мм. Рассматривать стереопару рекомендуется с расстояния 30 см с непрозрачной пе- регородкой между глазами на линии, разделяющей пространства левого и пра- вого изображений.
230 Глава 2 Рис. 2.60 Кроме пространственного существуют и другие методы разделения стереопар [5] □ цветовое: изображение левого глаза строится, например, красным цветом. правого — зеленым, а для просмотра используются цветные очки. Вместе цветовых фильтров можно использовать поляризованные. Недостаток спосо- ба в том, что по сути дела можно формировать только простые каркасные изображения, но зато реализация метода проста и полностью использует про- странственное разрешение дисплея; □ пространственно-временное: изображение для левого глаза строится в четных строках экрана, для правого — в нечетных, а для просмотра используются электронные или электромеханические очки, перекрывающие соответствую- щий глаз на время прорисовки четных или нечетных строк. Этот подход мо- жет быть реализован на дисплеях с чересстрочной разверткой, позволяв выводить быстро меняющиеся динамические цветные полутоновые изобра- жения, но с уменьшением вдвое разрешения по вертикали; □ временные: для левого глаза используется одна страница видеопамяти, для правого — другая, а их переключение происходит с достаточно большой час- тотой кадровой развертки. Для перекрытия глаз также должны использо- ваться электронные или электромеханические очки. Пространственное раз- решение по строкам здесь не теряется; □ наилучшие условия для восприятия стереоизображений созданы в системах виртуальной реальности, где в специальные очки или шлем вмонтирован би- нокулярный монитор из двух мини-дисплеев. На них подаются картинки рассчитанные отдельно для каждого глаза. Программа с помощью механиче- ских, инфракрасных или электромагнитных датчиков отслеживает повороть головы и, возможно, глаз, что создает удивительный эффект "погружения в действительность" со стереоскопическим изображением и изменением сцены в реальном времени в зависимости от движений головы или глаз наблюдателя В перспективе создание систем с лазерной прорисовкой изображений непо- средственно на сетчатке каждого глаза.
Геометрические преобразования 231 Карты вовсе не безгрешны И в пределах разных норм Нарушают верность линий, Площадей, углов и форм. 2.2.5.3. Картографические проекции К типичным, широко распространенным и общеизвестным представителям сложных проективных преобразований относятся картографические проекции, применяемые для составления плоских географических карт поверхности Земли. Последняя, являясь приближенно эллипсоидом вращения с соотношением эква- ториального радиуса к полярному 1.00336 : 1 [28], не может быть развернута на плоскость без складок и разрывов. В связи с этим фактом здесь уместно привести стихотворение известного картографа А. В. Гедымина: Изучая суть проекций, Надо помнить положение: С переходом сферы в плоскость Неизбежны искажения. Искажения, возникающие на карте, являются расплатой за удобство, которое мы получаем при пользовании плоским изображением вместо глобуса. Характер искажений зависит от способа проецирования и от вида картографической сет- ки — системы меридианов и параллелей на карте, т. к. в нее, как в "прокрустово ложе", приходится вгонять изображения материков. В зависимости от неиска- жаемого параметра принято следующее деление карт [3]: □ равноугольные — проекции Меркатора, сохраняющие угловые соотношения и конфигурацию фигур за счет искажения их площадей. В таких проекциях строятся навигационные карты, используемые в судовождении; □ равновеликие— проекции Ламберта, сохраняющие соотношения площадей фигур в разных частях карты за счет искажений их конфигураций, особенно сильных на краях карты. Такие проекции применяются для создания полити- ческих карт, где важно показать правильное соотношение размеров различ- ных стран; □ равнопромежуточные — эквидистантные проекции с равными расстояниями между определенными линиями (параллелями или меридианами) картогра- фической сетки во всех частях карты; □ произвольные — проекции, которым свойственны в разной степени как угло- вые, так и площадные, и дистантные искажения. Типовыми операциями картографической съемки являются преобразования ко- ординат образа из системы координат земной поверхности в другую систему, описывающую прообраз на поверхности проецирования, и развертывание по- следней на плоскость. Считая Землю сферой радиуса г = 1, зададим сферические координаты точки на ее поверхности вектором р = [1 ф у], в котором □ ф° е [- 180°, 180°] — долгота, отсчитываемая от Гринвичского меридиана; □ у° е [-90°, 90°] — широта, отсчитываемая от параллели экватора. Радианное а и градусное а° измерения угла связаны соотношением о 180 а =----а. л
232 Гпава 2 Системами координат проективной поверхности могут быть полярная, цилиндри- ческая или коническая. Механизм построения любой картографической проекции таков, что проектор и наблюдатель находятся по разные стороны от проективной поверхности. Такая проекция фактически является обратной перспективой (см. рис. 2.54), что хорошо заметно на некоторых видах карт. Важно отметить, что создание картографиче- ских проекций при неподвижном проекторе не всегда возможно. В этих случаях используются формулы прямого преобразования координат, которые аналити- чески выводятся в рамках проективного метода с подвижным проектором. Искажение какого-либо геометрического параметра образа характеризуется от- ношением к нему того же параметра прообраза на плоской карте. Примем в ка- честве образа прямоугольник на экваторе сферы с длинами сторон а по долготе и b по широте. Обозначим длины сторон фигуры прообраза а' и Ь'. Эта фигура будет близка к прямоугольнику лишь при достаточной малости значений а « 1 и b « 1. Определим коэффициенты долготного т^, широтного тч„ углового mz и площадного ти искажений'. Му lim — а lim тЛ=—^~ ,тЛ = mvmv. (2.97) На равноугольных и равновеликих картах будет, соответственно, тг - I и тя = 1. Для визуального оценивания искажений построенные ниже карты содержат про- екции черных квадратов, размещенных в разных местах поверхности сферы. При аналитическом выводе коэффициентов искажений в различных картографиче- ских проекциях (для этого автор использовал возможности символического про- цессора MathCAD) благодаря малости длин отрезков а и b можно считать, что на широте у они имеют измерения a sec(vp) по долготе и b по широте. В зависимости от формы и положения проективной поверхности наиболее рас- пространены следующие виды картографических проекций. Азимутальные проекции При построении азимутальной проекции проецирование точки сфер! р = [1 <р у] выполняется на плоскость, касающуюся сферы в некоторой точке р0=[1 Фо Фо] (рис. 2.61). Для превращения этой плоскости во фронтальную расположим начало системы координат х'у'г' в ро, а ее ось у' направим по каса- тельной к меридиану фо, который на карте будет расположен вертикально. Такое сложное преобразование системы координат описывается матрицей Са = Яу(-фоЖфоН-г°)-
'еометрические преобразования 233 Рис. 2.61 Расположив проектор в точке [о О -F] на оси z', проходящей через центр сфе- эы — точку [О О -1], получим матрицу проецирования (2.93) 1 О О ООО О О F-1 1 -огда с учетом взаимосвязи (1.3, б) сферических и декартовых координат полу- чим азимутальную проекцию точки: у 0 1]~ [sin(ip)cos(v) sin(v) cos(ip)cos(v) l]ca2/f. (2.98) ?адавая различные фокусные расстояния, получают следующие разновидности 'зимутальной проекции'. □ при F=1 (проектор в центре сферы) строится гномоническая проекция, для которой характерно разрежение линий сетки при удалении от центра карты. При выборе F> 1 становится возможным построение карты целого полушария; □ проекция, соответствующая F=2, называется стереографической. Проектор располагается в диаметрально противоположной точке -ро; □ проекция, построенная при фокусном расстоянии F>2, называется внешней, т. к. проектор находится вне сферы; □ при F—> оо азимутальная проекция вырождается в орпгографическую, при этом проецирующие лучи параллельны, а линии сетки сгущаются от центра карты к ее периферии. При всех значениях фокусного расстояния искажения отсутствуют в точке каса- -ия плоскости со сферой.
234 Гпава 2 Варьируя расположение плоскости проецирования, получают следующие азиму- тальные картографические проекции: П полярную-, плоскость касается сферы в полюсах при кро = ±90°. Сетка полярной карты состоит из концентрических окружностей параллелей и радиальных прямых меридианов. Коэффициенты долготных и широтных искажений, вы- численные по (2.97) при \ро = 90°, равны F _ (F-l)sin(y)+l „ W<₽ F-l+sin(y)’ (f-l+sin(y))2 (299) Полярную проекцию точки р = [1 <р у] удобнее описывать не декартовым (2.98), а полярным вектором [р ср —ср01 с модулем р и коэффициентом ши- ротного искажения mv: p(v. F)- Vmma = /7^... F-l+sin(y) Эу Например, при F= 1 получим параметры гномонической проекции р = ctg(y), mw - sin-'(y), = sin 2(y), /nz = sin '(y), - sin 4(y), искажающей как углы, так и площади. Аналогичны свойства и ортографиче- ской проекции с параметрами р = cos(y), m,f = 1, mv = тг = = sin (у). На рис. 2.62, а в этой проекции построена карта северного полушария. Таким образом, с точки зрения искажений гномоническая и ортографическая проек- ции являются произвольными. Уравнивая в (2.99) коэффициенты и /hv, получим способ построения ази- мутальной равноугольной карты Меркатора как стереографической (при F= 2) проекции с параметрами 2cos(y) 2 , 4 Р = ;—г-7-^ > "'<р = '«v = 7—“ГТ ’ = 1 ’ = 7-----ГАТТ l + sin(y) ф l + sin(y) (l + sin(y))2 На этой карте, как видно из рис. 2.62, б, сохраняются пропорции фигур в раз- ных ее частях при увеличении площади в четыре раза на краю по сравнению с центром. Равнопромежуточная полярная проекция с линейным модулем р = л / 2 - с имеет постоянный шаг параллелей и коэффициенты искажений = 1, /«ф = тя л/2-у cos(y) ----> т2--------------• cos(y) л/2 - у
Геометрические преобразования 235 Она реализуется при переменном фокусном расстоянии F(е [_!!_, з] Vlp6[o.„/21. v ' n/2-v-cos(v) [л-2 J Оптимальное по среднеквадратичному критерию л/2 ( (p(v,^)-("/2-v))2dV -э min J F О Г постоянное расстояние проектора от плоскости, дающее наиболее равномер- ную сетку параллелей, составляет 2.8. Практичный метод построения равнопромежуточных карт заключается в распрямлении каждого меридиана на плоскость проецирования, что как раз и описывается формулой p(V)=y-V. Равномерный масштаб позволяет изобразить всю поверхность земного шара внутри одной окружности, что и реализовано (без Антарктиды) в эмблеме Организации Объединенных Наций (рис. 2.62, в). На внешних краях такая карта имеет максимальные искажения; Рис. 2.62 П экваториальную', плоскость параллельна оси вращения сферы и касается па- раллели vpo = 0° в точке с долготой <ро. Соответствующий меридиан <ро распо- ложен на карте вертикально в центре. Дуги остальных меридианов сходятся на полюсах. Линия экватора на карте горизонтальна; параллели изображены
236 Гпава 2 дугами, кривизна которых уменьшается при удалении центра проецирования. В экваториальной стереографической (она является равноугольной) или внеш- ней проекциях обычно строятся карты полушарий Земли, например, восточ- ного при сро = 90°, фо = 0° и F= 2 (рис. 2.62, г). В этом ракурсе хорошо прояв- ляются свойства обратной перспективы; □ косую-, плоскость занимает произвольное касательное к сфере положение, а алгоритм проецирования дан в (2.98). Применяется, во-первых, для изобра- жения земного шара в наклонном положении, в котором кривые линии па- раллелей и меридианов наглядно подчеркивают его объемность (рис. 2.62, д). Во-вторых, косая азимутальная проекция дает малые искажения карты ло- кальной области земной поверхности, для чего параметрам фо и фо задаются значения координат географического центра этой области. Например, на рис. 2.62, е построена гномоническая карта Гренландии и ее окрестностей с центральной точкой фо = -40° и фо = 70°. Для изображения диагонально про- тяженной области можно изменить в (2.98) матрицу преобразования на Са = Ry (- ФО )RX (vo }RZ (y)H- z° ) с углом у между диагональю области и параллелью. Цилиндрическая проекция При построении цилиндрической или панорамной проекции точка сферы проеци- руется на боковую поверхность охватывающего сферу цилиндра, после чего тот развертывается на плоскость. В зависимости от положения оси цилиндра отно- сительно оси вращения сферы цилиндрические проекции делятся на продольные (все параллели горизонтальны, а меридианы вертикальны и равно отстоят друг от друга), поперечные и косые. На линии касания цилиндра со сферой искажения отсутствуют, а при удалении от нее увеличиваются. Горизонтальные искажения присущи всем цилиндрическим проекциям, а вертикальные зависят от способа образования проекции. Получим алгоритм проецирования точки р = [1 Ф ф] на поверхность продоль- ного цилиндра, касающегося сферы по экватору. Без внесения дополнительных широтных искажений эту криволинейную поверхность можно заменить верти- кальной плоскостью х’у', касающейся цилиндра по меридиану ф (рис. 2.63). Та- кое преобразование системы координат описывается матрицей Сц(фМД-<р)т(-7°). Разместив проектор в точке [о 0 - г] на оси z', рассчитаем по (2.93) матрицу Ц(. Развертывание боковой поверхности цилиндра эквивалентно переносу про- екции на расстояние ф вдоль оси х'. Таким образом, проекция точки р = [1 ф ф] на развертке цилиндра вычисляется следующим образом: q’ ~ [8т(ф)соя(ф) sin(v) cos^)cos(v) l]Cu(<p)//f, п Г 3 <2100) р =q + фх =|ф h 0j.
Геометрические преобразования 237 Рис. 2.63 Аналитическое выражение для ординаты проекции F-l+cos(y) позволяет исследовать влияние фокусного расстояния /'на искажения цилиндри- ческих карт. Коэффициенты долготных и широтных искажений, вычисленные по (2.97), равны 1 (F-l)cos(v)+l г dh(w, F) При F = 1 (проектор в центре сферы) получим зависимость Л(у/) = tg(y) с коэффициентами искажений m4, = cos-2(y), тл = cos_|(v)> /,;в = со5~3(ц/). Эта проекция, сильно искажающая на высоких широтах как углы, так и площа- ди, является произвольной. Уравнивая в (2.101) коэффициенты и тц„ получим дифференциальное уравнение дл(у/, е)________________________________1 Этр cos(v) Его решение h(\y) = Injsec(vp) + tg(vp)| = X(v)
238 Гпава 2 есть лямбда-функция [13] широты 1|/. Равноугольная цилиндрическая проекция Меркатора (рис. 2.64, а) с коэффициентами искажений = 1, тя = cos“2(\|>) проективно строится при переменном фокусе FW=W^^e0.u]vVe[O.,/2). Оптимальное по среднеквадратичному критерию л/2 j (A(v,F)-A(v))2dv —> min о F постоянное значение фокусного расстояния, дающее наименьшие угловые иска- жения, равно Fх 1.275. Изображение полюсов в проекции Меркатора невозмож- но, а приполярные области имеют большие искажения площадей. При F-> оо все проецирующие лучи горизонтальны, h(\y) = sin(vp), а коэффициенты искажений равны mv = cos(vp), mz = cos2(y), /»и = 1. Таким образом, это равноплощадная цилиндрическая проекция Ламберта (рис. 2.64, б). На ней параллели сгущаются от экватора к полюсам. Наконец, равнопромежуточная цилиндрическая проекция (рис. 2.64, в) получается при использовании линейной формулы А(у) = v с коэффициентами искажений mv. = 1, /«z = cos(vp), т,? = тя = cos '(у). Реализующий эти свойства проектор имеет переменное фокусное расстояние F(. vQ-eosW) Е Г^_ Л Vv е [0_ , 2| y-sin(y) L71-2 J Оптимальное по среднеквадратичному критерию п/2 / (л(у,т)-у)2<1у —> min о f постоянное значение фокуса, дающее наиболее равномерную сетку параллелей, равно Т» 2.8.
Геометрические преобразования 239 Рис. 2.64 Коническая проекция При построении конической проекции точка сферы р = [1 <р у] проецируется на боковую поверхность надетого на сферу конуса, после чего тот развертывается на плоскость. Сетку конической карты составляют концентрические дуги парал- лелей и радиальные прямые меридианов. Для уменьшения радиальных (широтных) искажений проективный конус должен касаться сферы по средней параллели картографируемой области уо * О (при уо = 0 конус становится цилиндром, и для построения карты должен использо- ваться алгоритм (2.100)). На этой параллели карты искажения отсутствуют, а при удалении от нее увеличиваются. Угол между меридианами <pi и <рэ на кониче- ской развертке равен |<pi - <рг| sin(yo). Измерив его, можно определить параллель уо, на которой объекты изображены без искажений. Для удобства пользования картой задается средний меридиан <ро, который на развертке должен быть вертикальным. Коническая проекция применяется для изображения протяженных по долготе областей средних широт 20° < |у°| < 70° (Россия, США, Канада), хотя и способна отобразить на одной карте объекты в разных полушариях. Получим алгоритм проецирования точки р = [1 <р у | на поверхность конуса, касающегося сферы по параллели уо. Без внесения дополнительных широтных искажений эту криволинейную поверхность можно заменить вертикальной плоскостью х'у', касающейся конуса по меридиану ср (рис. 2.65). Матрица такого преобразования системы координат равна CK(y)-^,(-<pK(y0)r(-z°).
240 Гпава 2 Рис. 2.65 Разместив проектор в точке [о 0 - F] на оси z', рассчитаем по (2.93) матрицу Цг. Развертывание поверхности конуса эквивалентно переносу системы коорди- нат в его вершину на вектор v = ctg(v0)Z (2.102) и вращению проекции вокруг оси z' на угол у = (ф- сро) sin(vpo). Таким образом, проекция точки сферы р = [1 ф у] на развертке конуса вычис- ляется по следующим формулам: q' ~ [sin^)cos(y) sin (у) cos^)cos(y) 1]ск(ф)//г, р/ = ?'т(-г)Л2(у). Ее положение можно описать также полярным вектором [р у] с модулем р(ф, V0,F) = ctg(V0) - Fsin(v Vo) F-l + cos(ig-v0) и используемым в (2.102) углом у = (ф-фо) sin(yo), отсчитываемым от вертикальной проекции меридиана фо. Исследуем влияние фокусного расстояния F на искажения углов и площадей. Коэффициенты дол- готных и широтных искажений, вычисленные по (2.97), равны _p(v,V0,F)sin(v0) _ (F-l)cos(v-v0)+l _ -Эр(у,у0, f) W(₽ cos(v) ’ (F_] + cos(v_Vo))2 Эф (2.103)
Геометрические преобразования 241 При F= 1 (проектор в центре сферы) получим зависимость p(w) = ctg(vpo) - tg(y - уо) и коэффициенты искажений и m , сильно отличающиеся от единицы на ши- ротах, далеких от уо. Следовательно, эта проекция является произвольной. Уравнивая в (2.103) коэффициенты mv и получим дифференциальное уравнение Эр(у,у0, С)_ -p(w,Wp, /7)sin(y0) Эу cos(y) с начальным условием р(уо, уо, F) - ctg(yo), решение которого есть р = ctg(y0 )esi"^X^o НМ) = ctg(Vo / sec(y0)+tg(yo)Yin(Vo) = ) sec(y)+tg(y) J Равноугольная коническая проекция Меркатора (рис. 2.66, а) с коэффициентами искажений = 1, тя = r2(y, уо) sin2(yo) cos~2(y) проективно строится при переменном фокусном расстоянии ) __ (ctg(Vo )~ r(w, Wo)) (1 - cos(y - Wo)) 0 ctg(yo)-r(w,Wo)-sin(w-Wo) Приравнивая в (2.103) произведение коэффициентов /иф и mv к единице, получим дифференциальное уравнение Эу sin(w0) с начальным условием р(уо, уо, F) = ctg(yo), решение которого есть Р = 72 + ctg2(Wo)-2sin~l(Wo)sin(‘P) = z(w, Wo) Равноплощадная коническая проекция Ламберта (рис. 2.66, 6) проективно стро- ится при переменном фокусном расстоянии \ (ctg(Wo)~/(w,Wo)) (l-cos(w~Wo)) 0 ctg(wo)-/(w,Wo)~sin(w-Wo) Наконец, равнопромежупючная коническая проекция с постоянным шагом па- раллелей (рис. 2.66, в) имеет коэффициенты искажений cos(w) -1 тш = 1, wz =-—7—г—--------х—7—v, w<p = = '«z cos(y0)-(w-Wo)sin(Wo) и строится либо по формуле р(у) = ctg(yo) - (у - уо),
242 Гпава 2 либо проективным методом при переменном фокусном расстоянии = (ctg(Wo)-(v-Wo))(l-cos(w)) ctg(vo)"(v-Vo)-sin(v) Рис. 2.66 2.2.5.4. Построение сцены с подвижным наблюдателем Далее рассмотрим методы построения сцены с подвижным наблюдателем, пере- мещающимся в трехмерном пространстве по некоторой траектории. Это типовая задача, решаемая при разработке компьютерных игр, в которых объекты сцены изображаются в перспективной проекции так, как их видит перемещающийся в пространстве наблюдатель. Положение объектов в MCK xyz описывается мно- жеством точек р,; векторов Г, и Nh расширенные формы которых р,, Й, и N, составляют строки матрицы координат Q. Объекты могут быть как неподвиж- ными относительно МСК (здания, рельеф местности, интерьер комнаты и др.), так и подвижными (герои игры, средства их передвижения, деревья, окна, двери, лифты зданий и др.). Для того чтобы составить модель сцены, представим, что перед глазами наблю- дателя на фокусном расстоянии F находится прямоугольная рамка, через кото- рую он рассматривает окружающий мир (рис. 2.67). Соотношения длин горизон- тальной, вертикальной сторон рамки и фокусного расстояния g-.v.F определяют горизонтальный а и вертикальный Р углы обзора: a = 2tg( —|, P = 2tg| —|. ^2F J (.2F J
Геометрические преобразования 243 Рис. 2.67 Среднестатистический глаз человека имеет углы обзора a » 150° и [3 — 110° [17]. Отсюда следует оптимальная пропорция параметров рамки g: v:F«7.5: 3: 1, при которой видимая область сцены заполняет всю рамку. Зададим положение рамки траекторией движения ее центра s(t), вектором нор- мали к плоскости Z(t), направленным к наблюдателю, и вектором Y(t) ± Z(/) ориентации вертикальной (относительно наблюдателя) стороны. В центре рамки разместим начало подвижной системы координат наблюдателя (СКН) хи Гн z» с ортами Л)=Г(<). ^(0=Z(r). (2.104) С помощью матрицы (2.55) преобразования из МСК в СКН //(/)= MAP3^(t), О3, у°, z° ) (2.105) вычисляются координаты элементов сцены в СКН: Q„(t) = Q(t) H(t). (2.Ю6) При выбранном расположении СКН наблюдатель находится на оси zH в точке S(l)=s(t)+FZ(t),
244 Гпава 2 имеющей в СКН постоянные координаты SH =[о О F], что упрощает уравне- ния (2.86) центрального проецирования точки [xH(z) _ун (') 4(z)= (2.107) Проекция точки действительна при zH < F, в противном случае точка находится сзади наблюдателя и через рамку не видна. Кроме того, невидимыми для наблю- дателя являются точки с zH < F. Их действительные проекции отсечены прямо- угольником рамки, т. е. не удовлетворяют условиям видимости (2.108) Рассмотрим подробнее особенности формирования в реальном времени парамет- ров положения рамки в пространстве. При разработке программы, отображаю- щей сцену глазами подвижного наблюдателя, определенным командам, пода- ваемым с клавиатуры или мышью, назначаются соответствующие движения наблюдателя и связанной с ним рамки. Возможна, например, следующая система клавишных команд управления'. П <Т> или <>L> — смещение вдоль оси zH на расстояние -d. (вперед) или гЛ (назад); □ <Shift>+<T> или <Shift>+<!>— смещение вдоль оси на расстояние dy (вверх) или -dy (вниз); □ <Shift>+«-> или <Shift>+<-» — смешение вдоль оси хн на расстояние -dx (влево) или dx (вправо); □ <<—> или <—» — поворот вокруг оси j’n на угол ф,. (влево) или -фЛ (вправо); □ <Ctrl>+<T> или <Ctrl>+<4>— поворот вокруг оси х„ на угол -cpv (наклон вперед) или <рЛ (наклон назад); П <Ctrl>+<<-> или <Ctrl>+<—>> — поворот вокруг оси zH на угол <р. (наклон влево) или -ф. (наклон вправо); □ отсутствие команды означает остановку в текущем положении. Для большего правдоподобия оси вращений виртуальной рамки должны прохо- дить не через ее центр, а через точку S(t) расположения действительных глаз на- блюдателя. Оси вращений при этом параллельны осям Хн, у» и zH. В самом общем виде движение рамки описывается в СКН матрицей преобразования Сн=7'(-5н)ЛЛ(±фх)^(±ф^К(±фг№)Н[±^ ±dy ±JZ]) (2.109) с соответствующими каждой команде значениями и знаками углов вращений и координатных смещений. Во избежание бесполезных умножений на единичные матрицы можно каждой конкретной команде сопоставить более простую, чем (2.109), матрицу АП. Например, в приведенной выше системе команд клавише
Геометрические преобразования 245 <Т> соответствует матрица Сн = r[-dzzo), а поворот влево по команде <<-> отрабатывается с помощью матрицы Сн = T(-SH )Ry (<Р3, . Важная проблема при разработке программ с подвижными элементами — обна- ружение и отработка столкновений наблюдателя с объектами сцены и объектов друг с другом. Столкновение наблюдателя с каким-либо объектом можно обна- ружить, например, тестами ориентации (1.122) и (1.123) точки S(t) внутри этого объекта. Столкновение объектов обнаруживается по расположению любой вер- шины одного объекта внутри другого (рис. 2.68, а) либо по пересечению любого ребра одного объекта с любой гранью другого (рис. 2.68, б). Рис. 2.68 Поведение наблюдателя и объектов при столкновении определяется их подвиж- ностью и упругими свойствами. Например, при столкновении с неподвижной стеной наблюдатель должен остановиться либо упруго от нее отскочить. Оста- новка означает отмену команды управления, приведшей к столкновению. Упру- гий отскок, удовлетворяющий законам отражения (см. рис. 1.56), требует расчета соответствующей команды. Аналогично отрабатываются столкновения объек- тов друг с другом. Ниже приводятся алгоритмы с остановкой при столкновении наблюдателя с объектами сцены. Пусть □ tk, к = 0, 1, 2,... — вырабатываемые по сигналам таймера ЭВМ моменты оп- роса устройств — источников команд управления; □ 5о, Zo и Уо— параметры начального положения рамки и вычисляемая по (2.105) матрица пересчета начальных координат из МСК в СКН; □ H0=MAP3^0,Yo,Zo,03,y0,z°)- TJ Qo — матрица начальных координат элементов сцены. Циклический алгоритм расчета перспективного изображения динамической сце- ны в зависимости от команд управления можно реализовать объективным и субъективным методами, отличающимися тем, какая система координат при- нимается неподвижной (см. рис. 2.67). В обоих методах на k-ом шаге движения вычисляются матрицы Снк и С^т> \/т = \,М собственных движений рамки в СКН и М объектов в МСК (у неподвижных элементов сцены матрицы движе-
246 Глава 2 ний единичные). Матрицы Нк и Нк+\ на соседних шагах моделирования связа- ны соотношением Нк+1 = ЯкСнк В объективно неподвижной МСК xyz движения наблюдателя и объектов рассчи- тываются независимо друг от друга. Проецирование выполняется на подвижную картинную плоскость, поэтому для визуализации сцены (отсечения проекций объ- ектов контуром рамки, удаления невидимых элементов, закрашивания видимых поверхностей) требуется преобразование координат всех объектов из МСК в СКН. На к-ом шаге алгоритма моделирования вычисляются: □ по (2.106) матрица координат объектов в СКН QHk = Qk Як, центральные проекции объектов и визуализация сцены на экране дисплея; □ по (2.109) матрица СнЛ и матрица движения наблюдателя в МСК Ск=ЯкС11кЯк1-, (2.110) П прогноз параметров рамки и наблюдателя на (к + 1 )-ом шаге: ?А+1 = ^кск> zk+i = zkck> (2.1П) Sji+i =fy+i +FZk+\, Hk+l = HkCHk ; П прогноз координат объектов сцены на (к + 1)-ом шаге: Qk'”> = Qkn,>Ckm> (2.112) □ если точка Sjt+i принадлежит хотя бы одному из in е [1, М\ объектов, то вы- полняется остановка: «+i = sk, Zk+\ = Zk, Qffi = Qkm>, = Hk (2-113) Субъективно (с точки зрения наблюдателя) полагая неподвижной СКН уК zH. мы должны перед циклом моделирования пересчитать начальные координаты всех объектов сцены из МСК в СКН по формуле группового преобразования Сно= Qo я0. Движение объекта в СКН есть суперпозиция двух движений: собственного и от- носительного, обратного движению рамки. Проецирование сцены выполняется на неподвижную фронтальную плоскость рамки. На Л-ом шаге алгоритма моде- лирования вычисляются: □ центральные проекции объектов и визуализация сцены на экране дисплея; □ по (2.109) матрица Снл и матрицы собственных движений объектов в СКН: с"^ = ЯкХСкт>Нк Ут = Гм- (2.114)
'еометрические преобразования 247 21 прогноз координат объектов сцены на (к + 1)-ом шаге: йХ1 = Сн2 V/» = ЦИ , Hk+l = HkC~l; (2.115) □ если точка SN = [о 0 с] принадлежит хотя бы одному из m е [1, М\ объек- тов с координатами Q^+i, то выполняется остановка: = (2.116) равнительный анализ двух методов построения сцены с подвижным наблюда- телем свидетельствует о несколько меньшей трудоемкости субъективного подхо- да, в котором все расчеты ведутся в системе координат, жестко связанной с на- блюдателем. С учетом направленности ее оси zH навстречу наблюдателю и зыраженности всех координат сцены относительно картинной плоскости субъ- ективный метод идеален для реализации алгоритмов визуализации как на про- ламином, так и на аппаратном уровнях. 2.2.5.5. Проективные алгоритмы построения оптических эффектов Переходим, наконец, к изучению проективных алгоритмов построения оптиче- :ких эффектов— тени объекта на плоскости, отражения от зеркальной плоско- сти и преломления на плоской границе раздела двух сред. В разд. 1 3.5 эти задачи решались методом трассировки путем поиска точек пересечения множества све- *овых лучей с поверхностью проецирования. Это универсальный способ по- :гроения эффектов на произвольной криволинейной поверхности. Для каждого л> ча задача пересечения решается индивидуально, что требует больших машин- ных ресурсов и не позволяет применять групповые методы преобразований, т. к. при неплоской поверхности отсутствует единая для всех точек объекта матрица проецирования. Роль проекторов в моделировании оптических эффектов играют две точки: Э L — источник прямых лучей, создающих тень; 2J S— позиция наблюдателя, выступающего в роли приемника прямых и ис- точника обратных лучей. Особенности дальнего и ближнего расположения этих элементов сцены относи- тельно объекта и плоскости проецирования эффекта обсуждаются в коммента- риях к рис. 1.61, 1.62. На рис. 2.69 построена схема вычисления оптических эффектов на плоскости f = {ро, N} от исходной точки q в МСК до экранного изображения ее оптическо- го эффекта 9, в ЭСК. Данная схема является развитием двухэтапного процесса, изображенного на рис. 2.56, и использует три самостоятельные СК со своими матрицами преобразований.
248 Гпава 2 Рис. 2.69 □ Система координат плоскости f— в ней формируется оптический эффект. Для перехода из МСК в СК f требуется вычислить матрицу Ск =MAP2(p0,N,O3,z°\ делающую плоскость построения эффекта фронтальной. В базисе СК f рас- ширенные формы точки qt, вектора Кг, источника Lt и наблюдателя St нахо- дятся следующим образом: • qf = qCK, ближние Lf = LCK и S{ = SCK ; • = ЙСК, дальние Lf = LCK и Sf = SCK. Координаты векторов Lt (при построении тени) или St (при построении от- ражения или преломления) определяют параметры матриц Kt косоугольного (2.76) или Цг центрального (2.88) проецирования на фронтальную плоскость f. что дает проекцию эффекта Qt = Qf^f или Qf ~ QfHf Дополнительным шагом вычисления эффекта отражения является ортого- нальное отражение Qf =QfM{ с матрицей Л/f =diag[l 1 -1], после чего находится проекция Qf = Qf ^f или Qf ~ Qf 4f Вычисление проекций эффектов всех точек объекта позволяет определить не- обходимые габариты плоскости f или, при заданных габаритах f, отсечь не попавшие на нее элементы алгоритмами clipl_cross (см. рис. 1.18) или clipljtest (см. рис. 1.19).
"еометрические преобразования 249 После каждой операции центрального проецирования точки qf ~ qfL[f или ее отражения q'( ~qt(MfLff) проверяется условие Лг> 0 существования действи- тельной проекции q'{. При выполнении этого условия она приводится по (2.85) в декартову форму. Индикатор правильности вычисления проекции в базисе СК f — значение z\ = 0. Проекцию эффекта в СК f можно получить сразу из образа в МСК как q’f ~ qCf с помощью матрицы Cf, вычисляемой в зависимости от вида эффек- та и типа проецирования как Ср = СкК{ либо Ct — СкЦг для нахождения тени и преломления или Cf = CK(A/fAf) либо Cf =CK^A/fZ/f j при расчете отражения. □ Мировая СК, переход в которую из СК f осуществляется с помощью матрицы С”1. Возможно получение эффекта в МСК сразу из образа в МСК как q'~qCM с помощью матрицы cw=cfc-'. □ Экранная СК, переход в которую из МСК дает окончательное изображение оптического эффекта q'3 ~ q'Cm и выполняется с помощью матрицы Спз из (2.95). Без учета преобразования из СК картинной плоскости в ЭСК можно считать, что Спз — одна из проективных матриц О{, Af, Kf или Ц(, завися- щих от положения наблюдателя 5. Эффект объекта должен выводиться на эк- ран раньше самого объекта q3 ~ qCm для недопущения экранирования объек- та его эффектом. Если требуется изобразить на плоскости f какую-либо текстуру, сетку или просто гладкую окраску, то ее точки pt легко проецируются на экран преобразованием Рз ~ Pf (‘ к ^пэ)- Поверхность построения эффекта должна выводиться на экран раньше самого эффекта для недопущения экранирования эффекта и объекта поверхностью. Теоретически возможно построение эффекта на экране сразу из образа в МСК по формуле Чэ ~ Я ^Рм^т) > т. е. за одно матричное умножение. В этом простом и чрезвычайно эффективном методе таится возможность расчетной ошибки в том случае, когда обе матрицы См и Спз содержат центральное проецирование, а нелинейная операция приведения
250 Глава 2 расширенного вектора к декартовой форме выполняется только один раз. Напри- мер, в задаче построения тени при ближних источнике и наблюдателе имеем СМ = СКЦ(СК 1 , Ст = z/кп f- Аналогичный случай имеет место и при расчете отражения с ближним наблюда- телем, где См =СКМ(Ц(СК 1 , Ст = 1/кги. Для получения на экране достоверного изображения можно идти двумя путями: П разделить одношаговый процесс на два преобразования, каждое из которых имеет по одному декартову приведению, например, <7f ~ <7(CK/Zf ), q'3 ~ qf (cK*/ZKnf ) В промежутке между этими действиями может решаться задача отсечения проекции эффекта ограниченной плоскостью f в ее системе координат; □ использовать альтернативный путь от точки q до изображения ее эффекта q" на рис. 2.69 с одним центральным преобразованием, например, Теперь задача отсечения решается в ЭСК. Отсекателем является проекция огра- ниченной плоскостью f, а объектом отсечения — экранная проекция эффекта. Преимущества проективных методов проявляются только при групповой обработ- ке данных, когда за одно матричное умножение вычисляются проекции сразу всех точек объекта. Как только возникает необходимость поточечных операций, ско- рость работы проективных алгоритмов резко снижается из-за замены параллель- ных вычислений последовательными. Такое бывает, когда разные точки одно к объекта отличаются свойствами существования эффекта. Например, тень объекта пересекающегося с плоскостью проецирования, создается лишь теми его точками, которые находятся относительно плоскости со стороны расположения источника света (см. рис. 1.64) Если в процессе движения объекта такая ситуация возможна, то придется искать пересечение с плоскостью отрезков его ребер и полигонов гра- ней. При этом возникают новые точки, отрезки и полигоны. Все это выбивает про- ективный алгоритм построения тени из русла группового метода. Аналогичная картина наблюдается при расчетах преломления, отражения, цен- трального проецирования, отсечения проекции контуром ограниченной плоскости проецирования. Следовательно, групповой подход имеет ограниченное применение. Рассмотрим подробнее проективные алгоритмы построения оптических эффек- тов с учетом проблем их существования и видимости. Тень Тень точки q на плоскости f является косоугольной (при дальнем источнике L либо центральной (при ближнем источнике) проекцией q' е f (см. рис. 1.63). Про-
геометрические преобразования 251 ективный алгоритм построения тени точки q на ограниченную плоскость f имеет следующий вид. t? Шаг 1. Вычисляются qf = qCK и Lt— векторы точки и источника в СК f. При Lt. qt. < 0 источник и точка не лежат по одну сторону от плоскости, тень не су- ществует, и алгоритм завершен. Шаг 2. Координаты вектора Lf дают матрицу Лт либо Ц{. Шаг 3. Вычисляется действительная проекция Й~?сг=Ь Уг zf Лг1 точки <7 на f. При ht < 0 она не существует и алгоритм завершен. На этом шаге используются матрицы Cf =CKKt либо Ct- СкЦг. Шаг 4. Если точка q'{ 6 f , т. е. лежит внутри границ плоскости f, то тень видима и на КП или экран выводится ее проекция <7э ~‘Уг (--к СПЭ).О & Пример 2.8. Решить проективным методом задачу построения тени каркасной лирамиды на плоскость f (см. пример 1.10) при расположении источника света в точке А = [б 3 1.5], т. е. при у= 1.5 (см. рис. 1.65). Изобразить на плоскости прямоугольную сетку с единичным шагом, целиком вмещающую тень объекта. Решение. Плоскость тени описывается в неявной форме вектором нормали \=[б 3 2] и точкой p^ = hzz° = [о 0 3], которую примем за начало СК гг rr zt. Пустим из нее оси лт, zf || N и yr е f в направлении точек р5=Лхл°=[1 0 б], р6 = р0 + N = [б 3 5], Py=Po+N*(p5-po)=[-9 20 °J- 1 аким образом, в СК лтyr zt плоскость f является фронтальной. Получим по (2.14) матрицы прямого и обратного перехода от МСК к СК f: Ро 1 -1 О3 г 0 0 3 1’ -1 0 0 0 Г Ск Р5 1 Рб 1 Р5 ~ Рб~ Ро Ро х° 1 2° 1 = 1 6 0 3 0 1 5 1 Vio” 0 0 0 0 7 1 1 J>1 Р1~ Ро У° 1 -9 20 0 1 0 7л/Т0 0 1 ’ 0.316 -0.407 0.857 О’ ‘ 0.316 0 -0.949 О’ = — 0 0.949 0.904 -0.136 0.429 0.286 0 0 К и = -0.407 0.857 0.904 0.429 -0.136 0.286 0 0 2.846 0.407 — 0.857 1 0 0 3 1
252 Гпава 2 Вычислим положение источника в СК f и необходимые матрицы проецирования: Af=[6 3 1.5 1]СК = [3.32 0.474 6 1], 1 0 0 0 0 10 0 Щ = -0 .553 -0.079 0 -0.167 •> 0 0 0 1 -0.158 -0.474 0 -0.143 -0.237 0.87 0 -0.071 Сг = C.J7r = -1.107 -0.158 0 -0.048 3.32 0.474 0 1.143 Определяем координаты точек р\ + рь и их проекций в СК f: Plf Г Pl Г ’4.743 2.936 3.143 f P2f 1 — P2 1 cK = 1.581 2.936 3.143 1 P3f 1 P3 1 2.53 0.813 5.286 1 P4f I Pi 1 3.476 1.4 1.714 1 Pl Г ’ 3.004 2.688 0 0.476 6.309 5.645 0 Г Pit f P2 1 Cr - -0.158 2.688 0 0.476 -0.332 5.645 0 1 P2i 1 P3 I ^1 -0.395 0.395 0 0.119 -3.32 3.32 0 1 P3i 1 Pi 1 2.53 1.265 0 0.714 3.432 1.771 0 1 .Pit 1 Все аппликаты точек Lt и р,годного знака и, кроме того, все значения Л,г > 0, сле- довательно, вся пирамида имеет действительную тень на плоскости f. Абсциссы и ординаты проекций p'f дают целочисленные границы -4 <лг < 7,0 <yt < 6 прямоугольника на плоскости f, целиком вмещающего тень объекта. На рис. 2.70 построена диметрическая проекция сцены с вектором направления на дальнего наблюдателя S = [l 1 VT], заданным в примере 1.10. Матрица Спз = Аднм приведена в (2.74). Расчет сцены выполняется в следующей последова- тельности: П с помощью функций /гне([о 0 0]Адим, [б 0 о]адим), /ще([о 0 о]Адим, [о 7 0]Адим), 0 о]Адим, [о О 7]Адим)
Геометрические преобразования 253 рисуем оси координат: ось х длиной 6, ось у длиной 7 и ось z длиной 7. Длины осей определены по максимумам соответствующих координат всех точек сцены; Рис. 2.70 □ строим прямоугольную сетку с единичным шагом на плоскости тени: //ие([л| О О 1]СК Адим, Ьт 6 О 1]СК Адим)\/х|- ——4,7, /Ц["4 Л О 1]С-’АДИМ, [7 уг 0 1]Ск-‘Адим)ууг =06; □ рассчитываем диметрические проекции точек тени р^Ск Адим V/ = 1,4 и со- единяем их шестью прямыми согласно топологии объекта; □ рассчитываем диметрические проекции точек объекта р, АДИм Vz = l, 4 и со- единяем их шестью прямыми согласно топологии объекта; □ рассчитываем диметрическую проекцию источника £АДим. 2] Отражение Отражение точки q от плоскости f является косоугольной (при дальнем наблю- дателе S) либо центральной (при ближнем наблюдателе) проекцией q' е f отра- женной точки q° (см. рис. 1.68). Проективный алгоритм построения отражения точки q от ограниченной плоскости f имеет следующий вид. Шаг 1. Вычисляются qt =qCK и St— векторы точки и наблюдателя в СК f. При St, qt, < 0 наблюдатель и точка не лежат по одну сторону от плоскости, от- ражение не существует, и алгоритм завершен. Шаг 2. Координаты вектора St дают матрицу Kt или Це
254 Гпава 2 Шаг 3. Вычисляется проекция q' точки q° иа f: Qi -qCf=[x( у{ z{ /?f]. Здесь используется матрица Cf = CKMfKf либо Q =CKMiUl. Шаг 4. Если точка q'f е f , т. е. лежит внутри границ плоскости f, то отражение видимо и на КП или экран выводится проекция 9э ~ (*“К ^пэ)- & Пример 2.9. Решить проективным методом задачу построения отражения каркасной пирамиды от плоского зеркала из примера 1.12 (рис. 1.70). Наблюда- тель находится в точке S =2[1 1 л/sj- Решение. В указанном примере установлено, что вершина пирамиды ри не может иметь отражения в зеркале, т. к. она с наблюдателем расположены по разные стороны от его плоскости. Там же найдены точки т/14= [1.429 0.857 -1.429], d24 = [1 0.75 -0.5], d34 = [1.409 0.273 -1] пересечения ребер /л р4, pipu и pi pt с бесконечной плоскостью зеркала. Таким образом, отражение пирамиды создается отрезками pi pi,p\ ръ.ргpi.pi du,pi du и Pi du. Вычислим необходимые векторы и матрицы проецирования с учетом, что плос- кость зеркала описывается в неявной форме нормалью N = [б 2 3] и точкой Ро = [о 0 2], а вершины полигона зеркала находятся в точках w,=/7zz°=[0 0 2]=р0, т2 =hxx° = [1 0 б], т3 = hyy° = [О 3 б], т4 = гщ +т3 -т2 = [“1 3 2]: /«1 Г -1 о3 г ‘ 0.447 -0.256 0.857 О' /и2 1 |/и2 -«1|х° 1 0 0.958 0.286 0 /И] + N 1 1 -0.894 -0.128 0.429 0 т\ + N х (т2 - /П]) 1 |?/||от2-лф0 1 1.789 0.256 -0.857 1 [Sf 1]=[2 2 2^8 1]ск= [-2.376 0.938 3.853 1], 1 0 0 0 0 10 0 0.617 0.617 0 -0.26 0 0 0 1
Геометрические преобразования 255 1 0 0 0 S = [2 2 5.657] ^спэ = 0 1 0 0 -0.354 -0354 0 -0.177 0 0 0 1 ' -0.21 -0.23 0 0.13 1 -0.403 0.923 0 0.043 С(угп ~ Ск^гСк Cjyj ~ отр К I к ПЭ -0.958 0.469 0 -0.112 1.21 0.23 0 0.87 Учитывая предупреждение о возможных ошибках декартова приведения, нахо- дим групповым методом экранные проекции точек полигона зеркала, пирамиды н ее отражения: w3 Г 1 1 1_ С = ^пэ '-0.707 1 0 -1.707 -0.707 0 3 2.293 0 0 0 0 0.646 1 1 0.646 - '-1.094 1 0 -2.641 -1.094 0 3 3.547 0 0 0 0 1 1 1 1 = /«1э ™2э «Зэ ™4э 1 1 1 1 Pl 1 '2.707 2.707 0 1.354' 2 2 0 Г Р э 1' Р2 1 0.646 2.646 0 0.823 0.785 3.215 0 1 Р2э 1 РЗ ^14 1 1 с ^пэ = 4.354 1.934 2.354 1.362 0 0 1.177 1.253 3.7 2 0 1.544 1.088 0 1 1 G »3э 1 ^14э 1 > ^24 1 1.177 0.927 0 1.088 1.081 0.852 0 1 6 24э । Уз4 1 - 1.763 0.626 0 1.177 1.498 0 532 0 1 0 Г34э к - - Pl - ' 1.901 2.554 0 1.44 1.32 1.773 0 г - Р1э 1 Р2 -1.168 2.301 0 1.018 -1.147 2.261 0 1 Р2э 1 РЗ ^14 1 1 О>тр = 0.523 1.934 1.625 1.362 0 0 1.588 1.253 0.329 1.544 1.023 1.088 0 0 1 1 РЗз 7]4э 1 1 ^24 1 1.177 0.927 0 1.088 1.081 0.852 0 1 ^24э 1 ^34 1 1.763 0.626 0 1.177 1.498 0.532 0 1 ^34э 1 По этим данным на рис. 2.71 построено изображение сцены, полностью совпа- дающее с картинкой на рис. 1.71, б. Отсеченные фрагменты проекций ребер пи- рамиды изображены пунктиром. Из всех ребер лишь проекция pi, рз, не подвер- глась отсечению экранной проекцией полигона зеркала {ть /м?, лйэ пи? шь}, т. е. ребро рз рз целиком видно в зеркале. Ребра pi рз, р\ рз и отрезки ребер pi du, рз видны в зеркале частично, а отрезок pj3d'l4j полностью отсечен проекцией зер- кала. □
256 Гпава 2 Рис. 2.71 Преломление Разработка проективного алгоритма преломления осложняется изломом лучей, проходящих от точек объекта к наблюдателю, на границе раздела сред с показа- телями преломления Аналогично лучевому алгоритму преломления (см разд. 1.3.5.3) рассмотрим два случая удаленности наблюдателя от плоскости преломления f и соответственно два варианта расчета в базисе f значения g = sin(y) для угла преломления у. 1. Наблюдатель бесконечно удален от плоскости f в направлении S, составляю- щем с нормалью к f угол преломления с синусом (1.154) (2.117) не зависящим от положения точки q. Следовательно, угол падения а и вектор падающего луча V также не зависят от q, а точка преломления q' g f является косоугольной проекцией q на плоскость f (см. рис. 1.73). Получим направление проецирования Vt масштабированием вектора наблю- дателя Sr в ортогональном к f направлении: Vt = Sr М( 1, 1, X), где Л = tg(?) »n~g2 tg(«) V 1-g2 ’ "1 = — «2 (2.118) Теперь становится возможным сформировать по (2.76) матрицу косоугольно- го проецирования Kt. необходимую для расчета точки преломления q\. Решение (2.118) определено при 0 < g < пп, что является условием отсутствия полного внутреннего отражения и совпадает с (1.158). Так как направление проецирования не зависит от положения точки q в среде с показателем пре- ломления т, то возможно групповое преобразование всех точек объекта, нахо- дящихся в этой среде.
257 Геометрические преобразования 2. Наблюдатель находится в конечной точке St (см. рис. 1.76). В отличие от парал- лельного проецирования здесь проявляется эффект аберрации', продолжения падающих лучей q —э q' для разных точек среды с показателем преломления т не пересекаются в единственной точке, которую иначе можно было бы считать центром проецирования. Действительно, т. к. теперь g * const, то высота . ds . %tg(v) Г tg(«) tg(«) Мп-g2 v i-g2 на которой продолжение падающего луча пересекает вертикаль p'S, зависит от расположения точки q. Это причина отсутствия единой матрицы централь- ного проецирования и невозможности группового преобразования всех точек объекта. Решая задачу индивидуально для каждой его точки, вычислим такое значение g = sin(y), при котором луч q —> q' после преломления попадет точно в наблю- дателя 5. Составим аналогичное (1.160) нелинейное уравнение: ' / 2g 2 lgfcl+ / g 2 lSfcl= -4k)2 + -Qfy)2 (2.119) v^n-g V,_g Оно всегда имеет численное решение g, удовлетворяющее условию 0 < g < пп. Далее по (2.118) находим вектор Vt, а по (2.76)— матрицу косоугольного проецирования Kt. Оформим проективный алгоритм построения преломления точки q на ограничен- ной плоскости f раздела двух сред в следующем виде. &Шаг1. Вычисляются qf = qCK и St— векторы точки и наблюдателя в СК f. При St-qt. >0 наблюдатель и точка не лежат по разные стороны от плоскости, преломление не существует, и алгоритм завершен. Шаг 2. По (2.117) либо (2.119) находится значение g. Если g g (0, Пп), то прелом- ление не существует, и алгоритм завершен. Шаг 3. Координаты вычисленного по (2.118) вектора Eir дают матрицу Kt. Шаг 4. Вычисляется проекция q' точки q на плоскость f: <7f ~ <?Cf = [л-f yf z{ /if]. Здесь используется матрица C{ = CKKf. Шаг 5. Если точка q'{ е f , т. е. лежит внутри границ плоскости f, то преломление существует и на КП или экран выводится ее проекция <7Э ~'<?(CfCK Спэ). □
258 Глава 2 I& Пример 2.10. Решить проективным методом задачу построения преломления каркасной пирамиды на гранях стеклянного аквариума из примера 1.14 (см. рис. 1.75, а). Вершины пирамиды равны ^=[1 3 1],р2 = [1 3 з], Л = [з 1 1],р4 = [0 0 11- Пересечение ребер пирамиды с поверхностью воды (верхней гранью аквариума) происходит в точках </13 = [2 2 0.5], J14 = [0.667 2 0.333], б/2з = I2 2 2], б/24 = [0.667 2 2.333]. Размеры аквариума d, = 3, dr = 2 и d: - 3. Вектор направления на дальнего на- блюдателя равен S = [2 1 з]. Решение. Построение сцены включает: □ изображение верхней, передней и правой граней аквариума; □ изображение не погруженных в воду отрезков р\ pi,p\ d\3,p\ dw,pi da и pi da’, □ расчет преломления и отсечения погруженных отрезков du рз, duр4, daрз и da рь в трех гранях аквариума. Прежде всего определим аксонометрическую проекцию, в которой должна изо- бражаться сцена. Найдем по (2.72. б) минимальные углы вращения сцены, даю- щие желаемый вектор S': sin(<Px)=^- => <px=arcsin = 15.5°; tg(<Py)=^ => <Py =-arctg(2/3)= -33.69°. Тогда по (2.71, б) получим матрицу трнметрнческого проецирования А = 79/13 -д/2/91 0 0 д/13/14 0 -74/13 -79/182 0 0.832 -0.148 О' 0 0.964 0 -0.555 -0.222 0 Экранные проекции вершин каркаса аквариума и концов отрезков надводной части пирамиды вычисляются как '0 0 0 ' 0 0 0‘ dx 0 0 2.496 -0.445 0 Pl 0.832 2.743 0’ Ply 0 dy 0 0 1.927 0 P2 -0.832 2.075 0 Р2э 0 0 ct A = -1.664 -0.667 0 dl3 A = 1.387 1.52 0 = d\33 dx dy 0 2.496 1.482 0 dl4 0.37 1.754 0 dl4j dx 0 dz 0.832 -1.112 0 d23 0.555 1.186 0 d23s 0 dy dz -1.664 1.26 0 d24. -0.74 1.31 0 _d243 _ dx dy <4 0.832 0.815 0
Геометрические преобразования 259 и на изображении (рис. 2.72) соединены друг с другом в соответствии с тополо- гией обоих каркасов. Для ориентирования приведена сетка экранной системы координат. Рис. 2.72 Построение преломления рассмотрим на примере ограниченной плоскости верх- ней грани аквариума. Найдем □ матрицу преобразования системы координат, совмещающую эту грань с фронтальной плоскостью f: ’10 0 О' ~СпУ о 0010 Ск = RX - \T(-d..z°) = ; к \2j J 0-100 0 0-21 □ вектор наблюдателя в новой СК f: Sf=SCK=[2 -3 1 О]; □ вектор направления падающих лучей (2.118): g = -^13/14 = 0.964 <лп = 1.33 => Л. = 3.43 => =[2 -3 3.43]; □ матрицу косоугольного проец фования: 1 0 О' 0 10; -0.583 0.875 0 □ матрицу преобразования исходных точек из МСК в экранные проекции их преломлений: ' 0.832 -0.148 0 О' ~ 0 0.281 0 0 СПр _CK^fC к А = к -0.555 -0.222 0 0 1.365 0 0 ’ 1
260 Глава 2 □ групповым методом находим точки в ЭСК, необходимые для расчета пре- ломления пирамиды и задних ребер аквариума в его верхней грани: РЗ Г 1.941 0.979 0 Г РЗэ 1“ Р4 1 -0.555 1.143 0 1 Р4э 1 ^13 1 1.387 1 52 0 1 ^13э 1 J14 1 0.37 1.754 0 1 4/|4э 1 ^23 1 0.555 1.186 0 1 ^23э 1 ^24 1 — Hip -0.74 1.31 0 1 = ^24э 1 О 1 0 1.365 0 1 оэ 1 dxX° 1 0.832 1.217 0 1 1 dyy° 1 0 1.646 0 1 dyy° 1 dzz° 1 -0.555 1.143 0 1 О N ^3 i 1 По этим данным на рис. 2.73, а построены преломления погруженных в воду от- резков пирамиды и результат отсечения их проекцией верхней грани аквариума с помощью функции clipl_cross (отсеченные фрагменты показаны пунктиром). Решая аналогичные задачи для передней и правой граней аквариума, получим изображения преломлений пирамиды на рис. 2.73.6 и 2.73, в. Объединяя все по- строенное на рис. 2.72 и 2.73 в одно целое, получим изображение сцены на рис. 1.75, б. □
Глава 3 Математические модели поверхностей и объектов В процессе построения сцены решаются геометрические и оптические задачи. К первоочередным относятся геометрические задачи формирования поверхно- стей, составления моделей объектов сцены, композиции объектов в пространстве сцены, отсечения элементов сцены, не попавших в отображаемую область, уда- ления невидимых элементов отображаемой области. В результате получается эскиз сцены. Далее решаются оптические задачи реалистичного изображения объектов: за- крашивание поверхностей с учетом их цвета, освещенности и ориентации в про- странстве, расчет теней, отражений и более сложных оптических эффектов — полутеней, переотраженнй, бликов, полупрозрачности и т. п. При этом могут появиться новые виртуальные, т. е. кажущиеся, объекты, которые усложняют эскиз сцены. Таким образом, построение сцены — процесс многошаговый. По окончании формирования изображения в буферной памяти ЭВМ оно выводится на экран дисплея. 3.1. Методы моделирования поверхностей Поверхность — это граница, отделяющая пространство, принадлежащее объек- ту, от внешнего мира. Модели поверхностей играют важную роль в конструиро- вании, производстве и изображении объемных объектов. Очевидными примера- ми областей их применения являются: ZJ проектирование корпусов и оболочек в машиностроении — автомобилей, кораблей, самолетов и их отдельных деталей; ZJ разработка программ обработки поверхностей для автоматических станков; ZJ дизайн изделий легкой промышленности — мебели, посуды, обуви и одежды; ZJ визуализация экспериментальных данных о границах раздела сред в естествен- ных науках— медицине (компьютерная томография), геологии и локации (построение рельефа поверхности Земли, морского дна, космических объектов).
262 Гпава 3 Из всех аспектов изучения поверхностей наибольший интерес, на наш взгляд, представляют методы конструирования математических моделей поверхностей и их реалистичного изображения на плоскости. В соответствии с этими двумя ка- тегориями на рис. 3.1 представлена схема классификации поверхностей, раскры- тие которой составляет содержание данной главы. Логично начать углубленное изучение поверхностей со способов их изображения, чтобы потом можно было иллюстрировать методы построения моделей в наглядной графической форме. Рис. 3.1 3.1.1. Методы изображения поверхностей Изображение является мощным графическим средством зрительного восприятия геометрической информации. Далеко не каждый человек может построить в сво- ем воображении объемную фигуру по ее словесному описанию или уравнениям математической модели. Основная задача компьютерной графики, собственно, и
Математические модели поверхностей и объектов 263 состоит в преобразовании геометрических моделей в наглядные визуальные формы, реалистично отображающие на плоскости строение и ориентацию объ- ектов, расположенных в пространстве. Как только появляется необходимость изобразить на экране дисплея какую-либо поверхность, тут же возникает множество вопросов. □ Какими изобразительными средствами можно достоверно передать форму поверхности? □ Как выбрать удачный ракурс изображения, раскрывающий на плоском экра- не особенности строения объекта? □ Как закрасить изображение поверхности, наиболее точно подражая игре све- та и тени на поверхности реального объекта? Начнем рассмотрение этих проблем в логически обоснованном порядке. 3.1.1.1. Выбор проекции изображения Выбор проекции изображения осуществляется из арсенала методов параллельно- го или центрального проецирования, подробно рассмотренных в гл. 2. Как пра- вило, конструируемая поверхность ориентирована своими осями симметрии па- раллельно координатным осям, поэтому ее орнюграфическая проекция на координатную плоскость выглядит невыразительно (рис. 3.2, а). Для большей наглядности поверхность рекомендуется повернуть в пространстве так, чтобы были видны характерные детали ее рельефа, а выпуклости как можно меньше заслоняли впадины. Такой ракурс характеризуется углами разворота <рт и накло- на <pv, модули которых рекомендуется выбирать в интервале 20° -г 60° (тримешрическая проекция). Большинство иллюстраций в книге выполнено в стандартных проекциях, хорошо передающих глубину объекта в пространстве: диметрической с углами <рЛ « -20°, <рЛ » 20° (рис. 3.2, б) и изометрической с углами ® -45°, <рх« 35° (рис. 3.2, в). Углы наклона <рх, близкие к 0° и 90°, делают изо- бражение плоским, со скрытыми важными деталями рельефа (рис. 3.2, г). Наиболее правдоподобно выглядит центральная проекция объекта, предвари- тельно развернутого в пространстве на диметрические или изометрические углы. Это более сложное, чем параллельное проецирование, преобразование содержит дополнительную операцию (2.85) приведения расширенных векторов к декарто- вой форме. Близость наблюдателя, собственно, и создает эффект перспективы. Он заметен при фокусном расстоянии, сравнимом с размерами объекта. Удален- ный от сцены наблюдатель видит все ее объекты в параллельных лучах. Из-за этого размеры проекций не зависят от приближения или удаления объектов, а смысл и эффект центрального проецирования здесь теряется. Таким образом, перспективная проекция рекомендуется для изображения про- тяженных в глубину сцены статических объектов, а также динамичных сцен, в которых наблюдатель и объекты перемещаются по глубине пространства. Переходим к выбору метода отображения рельефа поверхности. Не принимая всерьез совершенно не информативное решение выводить поверхность моно-
264 Гпава 3 хромно закрашенным внешним контуром (рис. 3.2, д) (это годится лишь для пло- ских полигонов и построения теней), выделим два наиболее распространенных в компьютерной графике способа изображения неплоских поверхностей: каркас- ный (рис. 3.2, е, ж) и точечный (рис. 3.2, а—г). Возможна также комбинация этих методов (рис. 3.2, з). Рис. 3.2 3.1.1.2. Каркасные поверхности Многие прикладные программы Зб-графики для быстрого эскизного изображе- ния поверхности выводят на экран дисплея не все ее точки, а лишь то их неболь- шое количество, которое достаточно реалистично передает характер искривле- ния поверхности в пространстве. Совокупность таких точек образует каркас — систему линий на поверхности. Эти условные линии разбивают ее на ячейки, гра- ничащие друг с другом по ребрам, которые соединяются в вершинах (узлах). В зависимости от способа описания поверхности строятся соответствующие кар- касные линии. □ Параметрическая поверхность p(t, т) изображается параметрическими линиями p{th т) и p(t, ту) (см. рис. 3.2, е), которые рассчитываются следующим образом: • задаются целые числа п и пг, определяющие индексную сетку {i,j}, в кото- рой i = 0, п, j = • выполняется дискретизация параметров t - to, t\,..., t„, т = TO, Tl, ..., т,„
Математические модели поверхностей и объектов 265 и создается параметрическая сетка {z„ ту}. В простейшем случае она может быть равномерной с интервалами дискретности: Az, = z, - z,~1 = const Vz, Ат,- = т= - т, -1 = const V/; • вычисляются узлы p(th Ту) и циклически строится каркасная сетка из про- екций отрезков между узлами =0,/и) V/= 0, и, р^Х/г =0, п, T^X/j =0,т. □ Неявная поверхность f(x,y,z) = 0 изображается семействами линий уровня или изолиний (рис. 3.2, ж) х ~ ХУЬ У ~ УУр z ~ ZW-’ расчет которых на примере изолиний х = ху„ параллельных координатной плоскости yz, следующий: • задается п значений уровней xyi X/i = 1, п; • рассчитываются сечения поверхности плоскостями, параллельными плос- кости yz, путем «-кратного решения нелинейного уравнения f(xy„y,z)-() X/i = \,n. Если поверхность допускает явное описание, например, у(х, z), то изоли- ния ху, превращается в аналитическую однопараметрическую функцию p(z)=[*yi >(*y<’Z) ZL При существовании явного описания z(x,y) для построения используется однопараметрическая функция р(у)= fcyz У zfryz»y)]- В [36] описан эффективный численный "метод маркированных квадратов", -троящий линии уровня поверхности, описываемой явной функцией z(x, j). Ме- тод основан на пространственной интерполяции функции двух переменных меж- ду узловыми значениями z(J на прямоугольной сетке (л„ Важный момент при построении каркасных моделей — разумный выбор числа лнтервалов дискретизации, определяющего размер ячеек и расстояние между аркасными линиями. Малое число крупных ячеек делает изображение криволи- нейной поверхности грубым и угловатым (рис. 3.2, з). Наоборот, при большой плотности каркасных линий они сливаются друг с другом и скрывают под собой рорму и цвет поверхности. Некоторым компромиссом может быть построение гамих кусочно-линейных линий с малым шагом дискретизации одного парамет- ра, а выбор расстояния между ними — с А-кратным шагом дискретизации друго- го параметра: p^i^jX/j = 0, km) Vz = 0, к,..., кп, p(z, VZ = 0, кп, ту ) V/ = 0, к,..., кт .
266 Гпава 3 При этом ячейки выглядят крупными и объемными, а ребра — криволинейными. Реальные же ячейки, построенные на всех узлах ру, в к раз мельче и лучше ап- проксимируют криволинейную поверхность. Ячейки каркасных поверхностей могут быть: □ прозрачными и непрозрачными; □ объемными и плоскими, которые называются гранями-, □ полигональными и криволинейными. Для изображения прозрачной каркасной поверхности (см. рис. 2.58) достаточно вывести на экран все ее ребра в произвольном порядке. Такая картинка часто выглядит как набор линий, неоднозначно передающих глубину поверхности, воспринимаемую каждым человеком по-своему. Изображение непрозрачного каркаса (см. рис. 2.60) включает только ячейки, ви- димые наблюдателем. Для их определения необходимо выполнить процедуру удаления невидимых ячеек или их фрагментов, заслоненных другими ячейками. Рассмотрим два простейших алгоритма, решающих эту задачу визуализации пу- тем упорядочения вывода экранных проекций ячеек. □ Алгоритм Робертса, предназначенный для построения выпуклых замкнуты поверхностей с плоскими гранями, выводит на экран только лицевые грани, обращенные внешней стороной к наблюдателю. Идентификация z-ой грани заключается в оценке угла видимости у, = ZN, S, между векторами наблюда- теля S, и внешней нормали N, (рис. 3.3, а). Ячейка является лицевой при ост- ром угле видимости, и это быстро определяется из условия А,- о S, > 0 без вычисления самого угла. Порядок вывода лицевых граней произволен. Рис. 3.3
Математические модели поверхностей и объектов 267 Модификация алгоритма Робертса для невыпуклых поверхностей заключается в присвоении каждой грани определенного приоритета вывода по правилу: чем внутреннее находится грань, тем выше у нее приоритет (рис. 3.3, б). По- прежнему, выводятся только лицевые грани, но теперь в порядке уменьшения приоритетов. Порядок вывода граней с равными приоритетами произволен. Данный метод обеспечивает корректное экранирование внутренних ячеек внешними при наложении их экранных проекций. Незамкнутая выпуклая каркасная поверхность (см. рис. 2.60) также может быть изображена модифицированным методом Робертса, если внутренним сторонам ячеек присвоить высший приоритет и определять их видимость по правилу N, о S, < 0, где N, — внешняя нормаль к плоскости /-ой ячейки. □ Алгоритм художника предназначен для изображения произвольных поверхно- стей и выводит на экран все ячейки целиком по мере их приближения к на- блюдателю. Проекции ближних граней могут частично или полностью нало- житься на ранее построенные проекции дальних граней подобно тому, как художник наносит на холст один мазок поверх ранее нанесенного мазка, тем самым скрывая последний от зрителя. Метод основан на вычислении удаленности (глубины) d, центров ячеек с, (в разных вариантах алгоритма используются и другие опорные точки ячеек) от наблюдателя, сортировке и выводе ячеек в порядке уменьшения элементов вектора d. При наблюдателе, находящемся в конечной точке Л1, глубина точки с, равна расстоянию dt = |с,-Я (3-1, а) а в вычислительном аспекте более эффективно использовать квадрат рас- стояния (3.1, а) как скалярное произведение //2=(c,-S)o(C/-S). (3.1,6) В случае наблюдателя, бесконечно удаленного в направлении вектора S, рас- стояния от него до всех точек также бесконечны. Впрочем, для сортировки можно использовать и относительные глубины, отсчитываемые вдоль любой оси d, противоположной направлению вектора А (рис. 3.4). Запишем проек- цию точки с, на вектор А: Cl Cj°S prSCi=tiS, где /,=-г. |5|2 Рис. 3.4
268 Гпава 3 Увеличение значения I, означает приближение точки с, к наблюдателю. Сле- довательно, в качестве эквивалента глубины, который должен уменьшаться с ростом можно принять легко вычислимое скалярное произведение di--c,oS. (3.1, в) Алгоритм художника отличается высоким быстродействием, но, к сожале- нию, имеет серьезный недостаток-, ячейки каркаса должны быть примерно одинакового и достаточно малого размера по сравнению с габаритами поверх- ности. При определенном ракурсе разновеликие ячейки могут вывестись на экран в неверном порядке, что иллюстрируется на рис. 3.5 изображениями боковой поверхности цилиндрической призмы с прямоугольными гранями. Ориентация поверхности на рис. 3.5, а выбрана так, что центр первой грани ci расположен к наблюдателю чуть-чуть ближе, чем центр второй грани с:. Вращение объекта всего лишь на угол <рЛ, - 2° из-за большой протяженности первой грани расположило точку п немного дальше точки сг, из-за чего вто- рая грань была выведена на экран позже первой и неестественно перекрыла ее (рис. 3.5, б). Общим недостатком рассмотренных алгоритмов, выводящих грани целиком, является невозможность правильного изображения двух пересекающихся ячеек каждая из которых видна лишь частично (см. рис. 2.68). Более совершенные ме- тоды удаления невидимых элементов рассматриваются в гл. 4. 3.1.1.3. Точечные поверхности Каркасные линии как средство передачи рельефа поверхности в действительно- сти не существуют. К тому же, будучи искусственно нанесенными на поверх- ность, они занимают часть ее площади, иногда значительную. Наиболее реали- стичным является точечное изображение криволинейной поверхности с индивидуальной закраской каждой ее видимой точки. Эффект объемности дос- тигается благодаря игре цвета, света и тени в исполнении искусного программи- ста-художника. Некоторые методы реалистичного закрашивания поверхностей рассматриваются е следующем разделе. А здесь сосредоточимся на конструктивной задаче опреде- ления порядка вывода точек криволинейной поверхности на экран.
‘Математические модели поверхностей и объектов 269 . амым распространенным алгоритмом визуализации произвольных поверхно- .тей является простой и достаточно эффективный метод z-буфера, аппаратно теализованный во всех современных графических ускорителях. Сущность метода включается в переборе точек поверхности и записи в видеопамять цветовых ко- з?в ближайших к наблюдателю точек. Для реализации процесса сортировки то- -ек по глубине сцены в памяти ЭВМ создаются две матрицы: Д буфер глубины Z, хранящий параметры удаления точек сцены, ближайших к наблюдателю и видимых им. Объем z-буфера равен width х height слов, где width - right - left + 1, height - down -up+ 1 есть размеры прямоугольного окна вывода на экране дисплея (см. рис. 2.10), а разрядность слова Nz определяется числом уровней 2Л’7 квантования уда- ленности точек от наблюдателя; И буфер кобра F, хранящий цвета точек окна вывода Объем буфера кадра равен width х height слов, разрядность которых Nr определяется числом уровней 2 ' квантования цветовых оттенков. Алгоритм работы метода z-буфера поясняется блок-схемой, приведенной на Рис. 3.6. Перед началом обработки поверхностей объектов сцены выполняется щиализация буферов глубины и кадра фоновыми значениями дальности и цве- "3. Фон — это любая картинка, заполняющая окно вывода в отсутствие объек- тов. Дальность фона задается числом, большим удаленности самой дальней точ- • и сцены от наблюдателя. Например, это может быть максимальное число Тлзрядной сетки процессора ЭВМ, условно говоря, оо. Поверхности или их отдельные ячейки проецируются на экран, отсекаются "эаницей окна вывода, после чего начинается сканирование точек каждой про- ;<цпи, которые можно перебирать в произвольном порядке. Эта процедура назы- вается разложением проекции в растр — двумерную матрицу пикселов, закра- _-.1ваемых независимо друг от друга. Для каждой точки растра рэ = [лэ уэ о] -еобходимо найти образ р = [х у z] на соответствующей поверхности, ис- -о.тьзуя ее уравнение. Физически это означает, что из точек растра проводятся .санирующие лучи в направлении наблюдателя и производится расчет точек пе- тесечения этих лучей с поверхностями. Понятно, что из нескольких точек, нани- анных на (цД-ый луч, наблюдатель увидит лишь самую ближайшую. Именно ту точку и следует изобразить на экране путем записи ее цвета су в </,Д-ый пиксел '?фера кадра. Если на луче нет ни одной точки, то цвет пиксела остается фоновым. Метод вычисления глубины d точки р к наблюдателю S’ зависит от используемой проекции изображения поверхности: 3 при ортографическом фронтальном проецировании система координат сцены остается неподвижной, вектор наблюдателя, ортогональный картинной плос- кости, равен S = z°, а в качестве эквивалента глубины точки можно с помо- щью (3.1, в) принять число d = -z;
270 Гпава3 □ при аксонометрическом проецировании на фронтальную плоскость МСК все объекты описываются в СК сцены, развернутой в пространстве матрицей R} из (2.61) на углы <pr <pv и ср.. Нормированный вектор наблюдателя в системе координат сцены находится по (2.72, а) и одинаков при любых углах враще- ния <р.: 5 = [0 0 1]/?^ =[-cos(9x)sin(9>,) sinfaj cosfajcos^)]. В стандартных аксонометрических проекциях удобнее использовать ненор- мированные формы этого вектора, приведенные в (2.74) и (2.75): £дим = [1 1 М^изо = [1 1 11- Преобразование pf = pRyxz = [*f yf Zf ] дает аппликату точки в МСК, рав- ную zt. Тогда вычисленная по формуле d = -zt
Математические модели поверхностей и объектов 271 глубина точкир будет уменьшаться по мере ее приближения к наблюдателю. Другой более быстрый способ заключается в вычислении по (3.1,в) эквива- лента глубины точки d--р ° S относительно бесконечно удаленного наблюдателя, связанного с координатой zr соотношением d = -zr |5"|; “1 при центральном проецировании на фронтальную плоскость МСК расчет глу- бины по формуле (3.1, а) как d = \р - Л'| (расстояние от точки р до наблюдателя 5) требует вычисления квадратного корня. В вычислительном аспекте выгод- нее ассоциировать глубину с квадратом расстояния (3.1, б) d=(p-S)°(p-S), вычисляемым всего за восемь арифметических операций. После нахождения величины d проверяется состояние (/,у)-го элемента z-буфера Ztj. При d < Zu точка р находится к наблюдателю ближе, чем другие точки по- верхности (или фон), имеющие такие же экранные координаты [/ у]. В z-буфер записывается новое состояние Z,; - d. а в элемент буфера кадра Ftj — код цвета точки с, вычисленный с помощью излагаемых чуть ниже моделей освещенности и формул закрашивания. По окончании перебора точек поверхностей всех объектов содержимое буфера кадра копируется в окно вывода на экране дисплея, начиная со строки up и столбца left. 3.1.1.4. Модели освещенности и закрашивание поверхностей При решении задачи закрашивания сконструированной поверхности програм- мист оказывается один на один со сложной дилеммой- □ с одной стороны, ему нужна модель взаимодействия света и материала, кото- рая бы максимально соответствовала реальным физическим процессам; □ с другой стороны, реализация этой модели в графической системе не должна сильно перегружать компьютер. Понятно, что никакая программа на самом мощном компьютере не в состоянии проследить пути всех лучей, пронизывающих пространство сцены (см. рис. 1.61), чтобы рассчитать энергетические и спектральные характеристики света, прихо- дящего к наблюдателю из всех видимых им точек. Следовательно, нужна такая модель расчета освещенности, которая была бы достаточно простой, не отсле- живала путь каждого луча, но создавала на экране распределение цветового по- ля, визуально близкое к реальной действительности. Цвет закраски непрозрачной поверхности определяется множеством факторов, важнейшими из которых являются □ физико-механические и оптические свойства поверхности, определяющие ее собственный цвет;
272 Гпава 3 □ освещение поверхности внешними источниками света; □ ориентация поверхности относительно источников и наблюдателя; □ цветовая палитра используемого графического режима. Цвет и свет неразрывно связаны. Нельзя говорить о цвете того или иного пред- мета, не указав, каким светом его освещают. В повседневной жизни мы рассмат- риваем цвет как свойство материалов. Спелый помидор— красный, весенняя трава— зеленая, небо — голубое, сера— желтая, снег— белый, а сажа— чер- ная. Естественно, мы оцениваем цвет предметов и материалов при дневном свете. Более того, привычные цвета знакомых вещей кажутся нам таковыми и при иных условиях освещения: ночью снег и при освещении красной лампой про- должает казаться нам белым. Мы также говорим о цвете световых потоков и считаем цвет свойством света, как, например, цвет лучей светофора, прошедших через красный, желтый или зеленый светофильтр. Являются ли эти бытовые определения цвета правильными? Очевидно, нет. Ведь окраска незнакомого предмета в сумерках и при люминесцентном освещении различна, а световой луч в темноте вообще невидим (не проявляет своего цвета), если он не попадает непосредственно в глаз, ни с чем не пересекается и в воздухе нет пыли. Цветовые свойства света и объектов проявляются лишь тогда, когда прямые или косвенные лучи попадают в глаз наблюдателя. Объективные наблю- дения показывают, что материалы и свет не являются цветными. Великий Исаак Ньютон, изучая свет в своей книге "Оптика" (1704), четко уста- новил: "В действительности явно выраженные лучи ... не являются цветными В них нет ничего, кроме определенной способности и предрасположения вызывать у нас ощущение того или иного цвета" [1]. Таким образом, вместо того, чтобы говорить: "Этот свет красный", более правильно было бы сказать: "Цвет, вызы- ваемый этим светом, красный". В психофизическом аспекте цвет есть характери- стика светового стимула или просто цветовой стимул, который вызывает опреде- ленное ощущение у стандартного наблюдателя, имеющего нормальное цветовое зрение. Построение реалистических изображений включает как физические, так и пси- хологические аспекты. Свет после взаимодействия с окружающей средой попада- ет в глаз, где в результате физических и химических процессов вырабатываются электромагнитные импульсы, которые далее идут по нервным волокнам в мозг Восприятие света мозгом в виде цвета — приобретаемое свойство, и во всем ви- димом диапазоне оно доступно лишь человеку и высшим животным —приматам. Зрительная система воспринимает электромагнитную энергию в диапазоне волн Л = [380 нм, 780 нм] как видимый свет. Он попадает в приемник (глаз) двумя пу- тями (см. рис. 1.59). Во-первых, непосредственно от излучателя— тогда свет имеет цвет излучателя. Во-вторых, косвенно в результате отражения или пре- ломления на поверхности раздела оптических сред. При распространении он ис- пытывает поглощение, рассеяние на частицах среды и поляризацию составляю- щих электромагнитной волны. Эти факторы изменяют исходные параметры излученного света — его спектральный состав и интенсивность.
Математические модели поверхностей и объектов 273 Таким образом, цвет отраженного света определяется как цветом излученного света, так и поглощающими, отражательными и преломляющими свойствами оптической среды, выступающей в роли косвенного источника вторичных лучей. Например, желтая поверхность желта только при освещении белым светом, т. к. она отражает красную и зеленую компоненты, которые, смешиваясь в глазу, воспринимаются как желтый цвет. При освещении красным светом поверхность будет красной, а синим — черной. В зависимости от состава спектра и распределенной по нему энергии свет бывает: □ белым, содержащим все цвета спектра от фиолетового до красного, имеющие равную и максимальную энергию; □ ахроматическим, содержащим все цвета примерно равной, но не максималь- ной энергии. Уровень средней энергии определяет степень серости цвета. Чем меньше энергия, тем он выглядит чернее. Ахроматический источник кажется белым, а отраженный или преломленный ахроматический свет— белым, се- рым или черным. Белыми выглядят объекты, отражающие более 80% белого света, черными — менее 3%. Промежуточные значения коэффициента отра- жения дают оттенки серого цвета; □ хроматическим или окрашенным, содержащим комбинацию различных цве- тов неравной энергии. Доминирующий энергетический всплеск определяет преобладающую окраску цвета; □ монохроматическим, содержащим узкополосную спектральную составляющую света, воспринимаемую как цветовой тон. Установлено [I], что нормальный че- ловеческий глаз может различить около 200 цветовых тонов, из которых толь- ко четыре унитарных цвета (красный, желтый, зеленый и синий) не восприни- маются как смеси. Все другие цветовые тона рассматриваются как смеси унитарных тонов, например, оранжевый как смесь красного и желтого. Из существующих теорий цветного зрения лучше других объясняет его свойства трехцветная теория Ломоносова—Юнга—Гельмгольца [I, 14, 16, 17]. Согласно ей — и зто подтверждено экспериментально — сетчатка глаза содержит свето- чувствительные рецепторы трех типов с областями чувствительности в коротко- волновой (фиолетово-синей), ср