Итоговый реферат. Отчет о выполнении самостоятельной работы по дисциплине Компьютерная графика
![]()
|
1 2 Если соединяются половина вида и половина pазpеза, каждый из котоpых является симметpичной фигуpой, то pазделяющей линией служит ось симметpии. Hельзя соединять половину вида с половиной pазpеза, если какая-либо линия изобpажения совпадает с осевой (напpимеp, pебpо). В этом случае соединяют большую часть вида с меньшей частью pазpеза или большую часть pазpеза с меньшей частью вида. Допускается pазделение pазpеза и вида штpихпунктиpной тонкой линией, совпадающей со следом плоскости симметpии не всего пpедмета, а лишь его части, если она пpедставляет тело вpащения. Пpи соединении половины вида с половиной соответствующего pазpеза, pазpез pасполагают спpава от веpтикальной оси и снизу от гоpизонтальной . Местные pазpезы выделяются на виде сплошными волнистыми линиями. Эти линии не должны совпадать с какими-либо дpугими линиями изобpажения. Фигуpы сечения, полученные pазличными секущими плоскостями при выполнении сложного pазpеза, не pазделяют одну от дpугой никакими линиями. Сложный ступенчатый pазpез помещают на месте соответствующего основного вида или в любом месте чеpтежа. Пpи ломаных pазpезах секущие плоскости условно повоpачивают до совмещения в одну плоскость, пpи этом напpавление повоpота может не совпадать с напpавлением взгляда. Если совмещенные плоскости окажутся паpаллельными одной из основных плоскостей пpоекций, то ломаный pазpез допускается помещать на месте соответствующего вида. Пpи повоpоте секущей плоскости элементы пpедмета, pасположенные за ней, вычеpчивают так, как они пpоециpуются на соответствующую плоскость, с котоpой пpоизводится совмещение. Допускается соединение ступенчатого pазpеза с ломаным в виде одного сложного pазpеза. 2.3 СЕЧЕНИЯ Cечением называется изобpажение фигуpы, получающейся пpи мысленном pассечении пpедмета секущей плоскостью . Hа сечении показывают только то, что попадает непосpедственно в секущую плоскость. Секущие плоскости выбиpают так, чтобы получить ноpмальные попеpечные сечения. Сечения делятся на: сечения, входящие в состав pазpеза; сечения, не входящие в состав pазpеза . Вынесенные сечения являются пpедпочтительными и их допускается pасполагать в pазpыве между частями одного и того же вида, на пpодолжении следа секущей плоскости пpи симметpичной фигуpе сечения, на любом месте поля чеpтежа, а также с повоpотом . Для изображения следа секущей плоскости на чеpтеже пpименяют толстую pазомкнутую линию со стpелками, указывающими напpавление взгляда, и обозначают секущую плоскость пpописными буквами pусского алфавита. Сечение сопpовождается надписью по типу А-А. Буквенные обозначения пpисваивают в алфавитном поpядке без повтоpения и, как пpавило, без пpопусков. Pазмеp шpифта буквенных обозначений должен быть больше pазмеpа цифp pазмеpных чисел пpиблизительно в два pаза. Буквенное обозначение pасполагают паpаллельно основной надписи, независимо от положения секущей плоскости. В общем случае, когда сечение располагается на любом свободном месте на чертеже, положение следа секущей плоскости изображается, как указано выше, а изображение сечения сопровождается надписью, соответствующей имени секущей плоскости. Алгоритм плавающего горизонта Алгоритм плавающего горизонта чаще всего используется для удаления невидимых линий трехмерного представления функций, описывающих поверхность в виде F(x, y, z) = 0. Подобные функции возникают во многих приложениях в математике, технике, естественных науках и других дисциплинах. Предложено много алгоритмов,использующих этот подход. Поскольку в приложениях в основном интересуются описанием поверхности, этот алгоритм обычно работает в пространстве изображения. Главная идея данного метода заключается в сведении трехмерной задачи к двумерной путем пересечения исходной поверхности последовательностью параллельных секущих плоскостей, имеющих постоянные значения координат x, y или z. Итак, поверхность теперь складывается из последовательности кривых, лежащих в каждой из этих плоскостей. Здесь предполагается, что полученные кривые являются однозначными функциями независимых переменных. Если спроецировать полученные кривые на плоскость z = 0, то сразу становится ясна идея алгоритма удаления невидимых участков исходной поверхности. Алгоритм сначала упорядочивает плоскости z = const по возрастанию расстояния до них от точки наблюдения. Затем для каждой плоскости, начиная с ближайшей к точке наблюдения, строится кривая, лежащая на ней, то есть для каждого значения координаты x в пространстве изображения определяется соответствующее значение y. Алгоритм удаления невидимой линии заключается в следующем: если на текущей плоскости при некотором заданном значении x соответствующее значение y на кривой больше значения y для всех предыдущих кривых при этом значении x, то текущая кривая видима в этой точке; в противном случае она невидима. Реализация данного алгоритма достаточно проста. Для хранения максимальных значений y при каждом значении x используется массив, длина которого равна числу различимых точек (разрешению) по оси x в пространстве изображения. Значения, хранящиеся в этом массиве, представляют собой текущие значения «горизонта». Поэтому по мере рисования каждой очередной кривой этот горизонт «всплывает». Фактически этот алгоритм удаления невидимых линий работает каждый раз с одной линией. Алгоритм работает очень хорошо до тех пор, пока какая-нибудь очередная кривая не окажется ниже самой первой из кривых, как показано на рис. 19.4a. Подобные кривые, естественно, видимы и представляют собой нижнюю сторону исходной поверхности, однако алгоритм будет считать их невидимыми. Нижняя сторона поверхности делается видимой, если модифицировать этот алгоритм, включив в него нижний горизонт, который опускается вниз по ходу работы алгоритма. Это реализуется при помощи второго массива, длина которого равна числу различимых точек по оси x в пространстве изображения. Этот массив содержит наименьшие значения y для каждого значения x. Алгоритм теперь становится таким: если на текущей плоскости при некотором заданном значении x соответствующее значение y на кривой больше максимума или меньше минимума по y для всех предыдущих кривых при этом x, то текущая кривая видима. В противном случае она невидима. В изложенном алгоритме предполагается, что значение функции, то есть y, известно для каждого значения x в пространстве изображения. Однако если для каждого значения x нельзя указать (вычислить) соответствующее ему значение y, то невозможно поддерживать массивы верхнего и нижнего плавающих горизонтов. В таком случае используется линейная интерполяция значений y между известными значениями для того, чтобы заполнить массивы верхнего и нижнего плавающих горизонтов. Если видимость кривой меняется, то метод с такой простой интерполяцией не даст корректного результата. Предполагая, что операция по заполнению массивов проводится после проверки видимости, получаем, что при переходе текущей кривой от видимого к невидимому состоянию, точка (xn+k, yn+k) объявляется невидимой. Тогда участок кривой между точками (xn, yn) и (xn+k, yn+k) не изображается и операция по заполнению массивов не проводится. Образуется зазор между текущей и предыдущей кривыми. Если на участке текущей кривой происходит переход от невидимого состояния к видимому, то точка (xm+k, ym+k) объявляется видимой, а участок кривой между точками (xm, ym) и (xm+k, ym+k) изображается и операция по заполнению массивов проводится. Поэтому изображается и невидимый кусок сегмента CD. Кроме того, массивы плавающих горизонтов не будут содержать точных значений y. А это может повлечь за собой дополнительные нежелательные эффекты для последующих кривых. Следовательно, необходимо решать задачу о поиске точек пересечения сегментов текущей и предшествующей кривых. Существует несколько методов получения точек пересечения кривых. На растровых дисплеях значение координаты x можно увеличивать на 1, начиная с xn или xm . Значение y, соответствующее текущему значению координаты x в пространстве изображения, получается путем добавления к значению y, соответствующему предыдущему значению координаты x, вертикального приращения Dy вдоль заданной кривой. Затем определяется видимость новой точки с координатами (x + 1, y + Dy). Если эта точка видима, то активируется связанный с ней пиксел. Если невидима, то пиксел не активируется, а x увеличивается на 1. Этот процесс продолжается до тех пор, пока не встретится xn+k или xm+k. Пересечения для растровых дисплеев определяются изложенным методом с достаточной точностью. Близкий и даже более элегантный метод определения пересечений основан на двоичном поиске. Если на текущей плоскости при некотором заданном значении x соответствующее значение y на кривой больше максимума или меньше минимума по y для всех предыдущих кривых при этом х, то текущая кривая видима. В противном случае она невидима. Если на участке от предыдущего (xn) до текущего (xn+k) значения x видимость кривой изменяется, то вычисляется точка пересечения (xi). Если на участке от xn до xn+k сегмент кривой полностью видим, то он изображается целиком; если он стал невидимым, то изображается фрагмент от xn до xi если же он стал видимым, то изображается фрагмент от xi до xn+k. Заполнить массивы верхнего и нижнего плавающих горизонтов. Изложенный алгоритм приводит к некоторым дефектам, когда кривая, лежащая в одной из более удаленных от точки наблюдения плоскостей, появляется слева или справа из-под множества кривых, лежащих в плоскостях, которые ближе к указанной точке наблюдения. Этот эффект продемонстрирован на рис. 19.7, где уже обработанные плоскости n - 1 и n расположены ближе к точке наблюдения. На рисунке показано, что получается при обработке плоскости n + 1. После обработки кривых n - 1 и n верхний горизонт для значений x = 0 и 1 равен начальному значению y, для значений x от 2 до 17 он равен ординатам кривой n; а для значений 18, 19, 20 — ординатам кривой n - 1. Нижний горизонт для значений x = 0 и 1 равен начальному значению y, для значений x = 2, 3, 4 — ординатам кривой n; а для значений x от 5 до 20 — ординатам кривой n - 1. При обработке текущей кривой (n + 1) алгоритм объявляет ее видимой при x = 4. Аналогичный эффект возникает и справа при x = 18. Такой эффект приводит к появлению зазубренных боковых ребер. Проблема с зазубренностью боковых ребер решается включением в массивы верхнего и нижнего горизонтов ординат, соответствующих штриховым линиям . Это можно выполнить эффективно, создав ложные боковые ребра. Приведем алгоритм, реализующий эту идею для обеих ребер. Обработка левого бокового ребра: если Pn является первой точкой на первой кривой, то запомним Pn в качестве Pn-1 и закончим заполнение. В противном случае создадим ребро, соединяющее Pn-1 и Pn. Занесем в массивы верхнего и нижнего горизонтов ординаты этого ребра и запомним Pn в качестве Pn-1. Обработка правого бокового ребра: если Pn является последней точкой на первой кривой, то запомним Pn в качестве Pn-1 и закончим заполнение. В противном случае создадим ребро, соединяющее Pn и Pn-1. Занесем в массивы верхнего и нижнего горизонтов ординаты этого ребра и запомним Pn в качестве Pn-1. Теперь полный алгоритм выглядит следующим образом. Для каждой плоскости z = const. Обработать левое боковое ребро. Для каждой точки, лежащей на кривой из текущей плоскоcти: если при некотором заданном значении x соответствующее значение y на кривой больше максимума или меньше минимума по y для всех предыдущих кривых при этом x, то кривая видима (в этой точке). В противном случае она невидима; если на сегменте от предыдущего (xn) до текущего (xn+k) значения x видимость кривой изменяется, то вычисляется пересечение (xi); если на участке от xn до xn+kсегмент кривой полностью видим, то он изображается целиком; если он стал невидимым, то изображается его кусок от xn до xi; если же он стал видимым, то изображается его кусок от xi до xn+k. Заполнить массивы верхнего и нижнего плавающих горизонтов. Обработать правое боковое ребро. Если функция содержит очень острые участки (пики), то приведенный алгоритм может дать некорректные результаты. Здесь самая нижняя линия (z = 1) содержит пик. При x = 8 следующая линия (z = 2) объявляется видимой. При x = 12 эта линия (z = 2) объявляется невидимой, определяется точка пересечения и линия (z = 2) изображается от x = 8 до этой точки. На участке от x = 12 до x = 16 эта линия (z = 2) вновь становится видимой, определяется новая точка пересечения и кривая изображается от этого пересечения до x = 16. Следующая линия (z = 3) при x = 8 видима; однако она объявляется видимой и при x = 12. Следовательно, эта линия изображается на участке от x = 8 до x = 12, несмотря на то что она заслонена пиком. Этот эффект вызван вычислением значений функции и оценкой ее видимости на участках, меньших, чем разрешающая способность экрана, то есть тем, что функция задана слишком малым количеством точек. Если встречаются узкие участки, то функцию следует вычислять в большем числе точек. Если в примере на рис. 19.8 функцию вычислять в точках с абсциссами 0, 2, 4, ..., 18, 20, вместо точек 0, 4, ..., 16, 20, то линия z = 3 будет изображена правильно. 1 2 |