Главная Случайная страница


Категории:

ДомЗдоровьеЗоологияИнформатикаИскусствоИскусствоКомпьютерыКулинарияМаркетингМатематикаМедицинаМенеджментОбразованиеПедагогикаПитомцыПрограммированиеПроизводствоПромышленностьПсихологияРазноеРелигияСоциологияСпортСтатистикаТранспортФизикаФилософияФинансыХимияХоббиЭкологияЭкономикаЭлектроника






Генерация изображений отрезков на прямоугольном растре

Генерация изображений отрезков на прямоугольном растре

Одним из графических примитивов в двумерной графике является отрезок прямой линии, задаваемый координатами своих концевых точек. Отображение таких отрезков в растровой графике отнюдь не просто. Связано это с тем, что изображение отрезка на прямоугольном растре является совокупностью горизонтальных, либо вертикальных отрезков и отдельных точек рис. 1.1.

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

 


Рис. 1.1. Растровое представление отрезков прямых линий.

 

Алгоритм №1. Несимметричный цифровой дифференциальный анализатор (несимметричный ЦДА)

В основу работы этого алгоритма положен тот факт, что производная функции, представляющей прямую линию на плоскости, является величиной постоянной, т.е. . Если у нас имеется отрезок прямой, заданный координатами своих концевых точек и ( ), то величину этой производной можно рассчитать следующим образом: .

Алгоритм «несимметричный ЦДА» использует эту величину, чтобы рассчитать значение смещения по одной из координат, при смещении по другой на 1. Этот алгоритм можно описать следующей последовательностью действий (подразумевается, что хотя бы одно из значений или не равно нулю).

1. Рассчитаем величину и определим, ось, вдоль которой будем продвигаться, следующим образом:
Если , то наш отрезок является вертикальным, тогда , продвигаться будем вдоль оси .
Если , то наш отрезок является горизонтальным, тогда , и продвигаться будем вдоль оси .
Если , тогда, продвигаться будем вдоль оси .
В противном случае, , и продвигаться будем вдоль оси .

2. Подсветим пиксель с координатами .

3. Увеличим координату, соответствующую оси, вдоль которой продвигаемся, на 1 (-1), а другую на , и подсветим пиксель, соответствующий этим координатам.

4. Повторять пункт 3, до тех пор, пока не нарисуем весь отрезок.

Рассмотрим работу алгоритма на следующих примерах рис. 1.2.


Рис. 1.2. Генерация отрезков несимметричным ЦДА.

Отрезок а):

1. Поскольку , то , продвигаться будем
вдоль оси y.

2. Подсветим пиксель с координатами (3, 1).

3. Увеличим на 1, а на . Получим . Подсветим пиксель с координатами (3 ( ), 2).

4. Далее повторяем пункт 3, пока не нарисуем весь отрезок.

На следующем шаге получим . Подсветим пиксель (3, 2). Далее получим . Подсветим пиксель (4, 2) и т.д.

Отрезок б):

1. Поскольку , то , продвигаться будем
вдоль оси x.

2. Подсветим пиксель с координатами (7, 1).

3. Увеличим на 1, а на 0,5 Получим . Подсветим пиксель с координатами (8, 2 (1,5≈2)).

4. Далее повторяем пункт 3, пока не нарисуем весь отрезок.

На следующем шаге получим . Подсветим пиксель (9, 2). Далее получим . Подсветим пиксель (10, 3) и т.д.

 

Задания к лабораторной работе №1

Перед выдачей заданий, студентов необходимо поделить на пары. Если количество студентов нечетное, то оставшемуся без пары студенту предлагается выполнять вариант №1.

Все задания к лабораторной работе №1 необходимо выполнять, используя псевдопиксель, в виде закрашенного сплошным цветом квадрата размером n х n пикселей. Для выполнения заданий необходимо в первую очередь реализовать соответствующие алгоритмы генерации отрезков на используемом языке программирования. Затем, используя эти алгоритмы, выполнить соответствующий вариант задания.

При выполнении вариантов заданий ЗАПРЕЩАЕТСЯ пользоваться встроенными функциями рисования отрезков!

 

Вариант №1.

Нарисовать наибольший равносторонний треугольник, который поместится в области вывода. Одна из сторон треугольника должна идти вдоль нижней границы области вывода рис. 1.4. Боковые стороны необходимо нарисовать красными линиями, используя алгоритм Брезенхема. Основание нарисовать зеленой линией алгоритмом несимметричного ЦДА. Размер псевдопикселя для всех отрезков составляет 20х20 пикселей.


Рис. 1.4. Наибольший равносторонний треугольник.

Добейтесь, чтобы размеры треугольника изменялись при изменении размеров области вывода (окна).

 

Вариант №2.

Нарисовать наибольший правильный шестиугольник, который поместится в области вывода и построить все его диагонали рис. 1.5. Стороны шестиугольника необходимо нарисовать оранжевым цветом, используя алгоритм несимметричный ЦДА и псевдопиксель размером 20х20 пикселей. Диагонали изобразить тремя различными цветами (красным зеленым и синим) алгоритмом Брезенхема псевдопикселями размером 10х10 пикселей.


Рис. 1.5. Наибольший шестиугольник.

Добейтесь, чтобы размеры рисунка изменялись при изменении размеров области вывода (окна).

 

Вариант №3.

Нарисовать наибольший прямоугольник с соотношением сторон 2/3, который поместится в области вывода и построить все его диагонали рис. 1.6. Прямоугольник расположить по центру экрана. Короткие стороны необходимо расположить параллельно горизонтальной стороне экрана. Прямоугольник необходимо нарисовать красным цветом, используя алгоритм несимметричный ЦДА и псевдопиксель размером 20х20 пикселей. Диагонали изобразить двумя различными цветами (зеленым и синим) алгоритмом Брезенхема псевдопикселями размером 10х10 пикселей.


Рис. 1.6. Наибольший прямоугольник с соотношением сторон 2/3.

Добейтесь, чтобы размеры рисунка изменялись при изменении размеров области вывода (окна).

 

Вариант №4.

Нарисовать наибольшую пятиконечную звезду, которая поместится в области вывода и пятиугольник внутри нее рис. 1.7. Звезду необходимо нарисовать красным цветом, используя алгоритм Брезенхема и псевдопиксель размером 20х20 пикселей. Пятиугольник нарисовать синим цветом алгоритмом несимметричный ЦДА псевдопикселями размером 10х10 пикселей.

 

Рис. 1.7. Наибольшая пятиконечная звезда и пятиугольник.

Добейтесь, чтобы размеры рисунка изменялись при изменении размеров области вывода (окна).

 

Вариант №5.

Нарисовать наибольшую шестилучевую звезду, которая поместится в области вывода рис. 1.8. Стороны верхнего треугольника необходимо нарисовать зеленым цветом, используя алгоритм несимметричный ЦДА и псевдопиксель размером 10х10 пикселей. Стороны нижнего треугольника необходимо нарисовать красным цветом, используя алгоритм Брезенхема и псевдопиксель размером 20х20 пикселей.


Рис. 1.8. Наибольшая шестилучевая звезда.

Добейтесь, чтобы размеры рисунка изменялись при изменении размеров области вывода (окна).

 

Вариант №6.

Нарисовать зеленым цветом наибольшее изображение октаэдра, которое поместится в области вывода рис. 1.9. Стороны октаэдра наиболее близкие к наблюдателю (жирные линии) нарисовать, используя алгоритм несимметричный ЦДА и псевдопиксель размером 20х20 пикселей. Стороны дальние необходимо нарисовать, используя алгоритм Брезенхема и псевдопиксель размером 10х10 пикселей.


Рис. 1.9. Наибольший октаэдр.

Добейтесь, чтобы размеры рисунка изменялись при изменении размеров области вывода (окна).

 

Вариант №7.

Нарисовать красным цветом наибольшее изображение куба, которое поместится в области вывода рис. 1.10. Ребра куба наиболее близкие к наблюдателю (жирные линии) нарисовать, используя алгоритм Брезенхема и псевдопиксель размером 20х20 пикселей. Стороны дальние необходимо нарисовать, используя алгоритм несимметричный ЦДА и псевдопиксель размером 10х10 пикселей.

Рис. 1.10. Наибольший куб.

Добейтесь, чтобы размеры рисунка изменялись при изменении размеров области вывода (окна).

 

Вариант №8.

На базе алгоритма несимметричный ЦДА разработать алгоритм рисования пунктирной линии. Пунктирная линия состоит из отрезков, разделенных промежутками. Длина отрезка не может быть больше
10 псевдопикселей. Длина промежутка составляет половину длины отрезка. Линия начинается и заканчивается отрезком. Все отрезки и промежутки должны иметь примерно одинаковую длину. Используя алгоритм Брезенхема и псевдопиксель 20х20, нарисовать зеленым цветом наибольший прямоугольник, который поместится в области вывода. Диагонали прямоугольника провести пунктирной линией красного цвета, используя псевдопиксель 5х5 рис. 1.11.

Рис. 1.11. Наибольший прямоугольник с диагоналями.

Добейтесь, чтобы размеры рисунка изменялись при изменении размеров области вывода (окна).

 

Вариант №9.

Нарисовать красным цветом наибольшее изображение икосаэдра, которое поместится в области вывода рис. 1.12. Ребра икосаэдра, наиболее близкие к наблюдателю, (жирные линии) нарисовать, используя алгоритм несимметричный ЦДА и псевдопиксель размером 20х20 пикселей. Ребра дальние необходимо нарисовать, используя алгоритм Брезенхема и псевдопиксель размером 10х10 пикселей.

Добейтесь, чтобы размеры рисунка изменялись при изменении размеров области вывода (окна).

 

Рис. 1.12. Наибольший икосаэдр.

 

 


Лабораторная работа №2. Геометрические преобразования на плоскости

Цель: Научиться выполнять геометрические преобразования над плоскими фигурами.

Задача: Используя матричное представление геометрических преобразований на плоскости, разработать программу анимации плоских фигур.

Результат: программа анимации заданных плоских фигур. Отчет в печатном виде, оформленный в соответствии с приложением 1.

 

Способы представления геометрических преобразований на плоскости

Рассмотрим следующую систему уравнений:

Эти уравнения можно интерпретировать двояким образом:

1. Все точки на плоскости ху перемещаются вправо на расстоя­ние а рис. 2.1.а.

2. Координатные оси х и у перемещаются влево на расстояние а рис. 2.1.б.

 

       
 
   


Рис. 2.1. а) — перенос точек; б) — перенос системы координат

 

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

Пусть необходимо повернуть точку вокруг начала ко­ординат О на угол. Изображение новой точки на рис. 2.2 обоз­начим через .

Рис. 2.2. Поворот вокруг точки О на угол φ

 

Уравнения, задающие поворот точек на плоскости относительно начала координат:

Эта система уравнений описывает поворот вокруг точки О — начала системы координат. Но часто это не то, что нам нужно. Если требуется выполнить поворот относительно заданной точки , то в этих уравнениях можно заменить x на , y на , x’ на, y’ – на :

 

Система уравнений:

описывает изменение масштаба относительно точки О – начала системы координат. При этом координата x всех точек плоскости изменяется в a раз, а координата y – в b раз. Если a = b то искажения изображения объектов не происходит, и тогда говорят о равномерном масштабировании. В противном случае, изображение объектов искажается, и такое преобразование называется неравномерным масштабированием.

Если требуется выполнить масштабирование относительно заданной точки (x0, y0), то в этих уравнениях также можно заменить x на , y на , x’ на , y’ – на :

Система уравнений поворота точки относительно начала координат может быть записана в виде одного матричного уравнения:

Можно записать в матричной форме и систему уравнений для масштабирования:

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

Задания к лабораторной работе №2

Перед выдачей заданий, студентов необходимо поделить на пары. Если количество студентов нечетное, то оставшемуся без пары студенту предлагается выполнять вариант №1.

Фигуру, подвергающуюся преобразованию, задайте массивом векторов, где каждый вектор представляет координаты одной из вершин фигуры.

Необходимое преобразование задавайте матрицей 3х3. Матрицу преобразования, являющегося комбинацией нескольких преобразований, формируйте путем последовательных перемножений матриц соответствующих преобразований.

Следует программировать задачу в общем виде, используя параметры (угол поворота, величину перемещения, коэффициент масштабирования) и предполагая произвольную фигуру, но отлаживать программу на примере, указанном в задаче в скобках!

На рисунках, приведенных в вариантах заданий, жирными линиями изображено первоначальное положение фигуры.

Включив в программу необходимые задержки (используйте таймер), добейтесь желаемой скорости смены – изображений. В конце некоторых заданий есть дополнения. Их необходимо выполнять только после того, как будет готова программа, для базового задания.

 

Вариант №1

Поворачивать любую фигуру, образованную замкнутой ломаной линией (секундную стрелку), вокруг одной из ее вершин (оси вращения) на небольшой угол r по часовой стрелке (соот­ветствующий секунде) рис.2.3. Совершить n поворотов .

Рис. 2.3. Секундная стрелка

 

Дополнение:

На основе полученной программы создайте часы - будильник, звонящие по достижении задан­ного времени. К рисунку добавьте часовую, минутную стрелки и стрелку будильника.

 

Вариант №2

Поворачивать любую фигуру, образованную отрезками прямых (велосипедное колесо), и расположенную у левого края экрана, вокруг заданной точки фигуры (оси колеса), на угол r по часовой стрелке (на половину угла между со­седними спицам), сдвигая, фигуру, по горизон­тали вправо на величину t. Фигуру перемещать до правого края экрана. Один, из отрезков (спицу колеса) изобразить контрастным цветом. Величину t рассчитайте так, чтобы создавалось впечатление катящегося колеса, и проведите пунктирную горизонталь, через точки вращения рис. 2.4.

Рис. 2.4. Колесо.

Дополнение:

Создайте картину движущегося по экрану велосипеда.

 

Вариант №3

Задана любая фигура двумя замкнутыми ломаными линиями (треугольник внутри квадрата). Требуется поворачивать фигуру вокруг заданной точки z (центра квадрата) на угол r (15 градусов) по часовой стрелке, незначительно уменьшая относительно точки и часть фигуры, образованную первой ломаной линией (треугольник), и во столько же раз увеличивая другую часть фигуры (квадрат). Преобразования повторять, пока уменьшающаяся часть не превратится в точку.

Картина должна напоминать "вертушку", со­стоящую из удаляющегося при вращении треуголь­ника и приближающегося квадрата рис. 2.5. Затем повторить процесс, только уменьшать вторую часть фигуры и увеличивать первую. Повторять чередование, пока пользователь не завершит работу программы.

Рис. 2.5. Вертушка.

Вариант №4

Поворачивать любую фигуру, образованную отрезками прямых (маятник в крайнем левом положении, отклоненный, на 45 градусов от вертикали), вокруг точки в центре верхней половины экрана (оси маятника) на небольшой угол r (5 градусов) против часовой стрелки. Совершить k поворотов (достигнув крайнего правого положения). Затем, аналогично, выполнить
k поворотов по часовой стрелке (до крайнего левого положения). Выполнить
колебания фигуры, пока пользователь не завершит работу программы.

Процесс должен напоминать колебание маятника рис. 2.6.

Рис. 2.6. Маятник.



Дополнение:

Изменяйте скорость поворота маятника в соответствии с гармоническим законом колебаний. Создайте программу часов с маятником.

 

Вариант №5

Поворачивать любую фигуру, образованную отрезками прямых (лист дерева) и находящуюся в правой половине экрана, вокруг точки Р, лежащей в центре верхнего края экрана, на угол r (10 градусов) по часовой стрелке, каждый раз незначительно увеличивая фигуру относительно точки P. Повороты выполнять до тех пор, пока фигура не займет примерно симметричное первоначальному положение в левой половине экрана. Затем, аналогично, поворачивать фигуру против часовой стрелки вокруг той же точки P. Чередовать такие колебания фигуры, пока она остается в пределах экрана.

Картина должна напоминать падение осен­него листа, сорвавшегося с дерева рис. 2.7.

Рис. 2.7. Падение листа.


Вариант №6

Задана любая фигура, состоящая из отрезков (треугольник и прямоугольник с общей стороной, напоминающие кабину колеса обозрения); одна из точек фигуры особо выделена (точка подвески кабины). Поворачивать фигуру так, чтобы особая точка поворачивалась вокруг центра экрана на угол r (15 градусов) против часовой стрелки при каждом повороте. Совершать полные обороты фигуры вокруг центра экрана, пока пользователь не завершит работу программы. Картина должна напоминать вращение кабины колеса обозрения рис. 2.8.

Рис. 2.8. Колесо обозрения.

Дополнение:

Создайте полную картину вращающегося колеса обозрения с шестью кабинами.

 

Вариант №7

Поворачивать любую фигуру, заданную зам­кнутой ломаной линией с яркой точкой на фигуре (многоугольник, похожий на круг, с ярким "пятном" на окружности), вокруг центра фигуры на угол r (30 градусов) по часовой стрелке, сдвигая фигуру так, чтобы она перемещалась по диагонали экрана, и незначительно увеличивая размеры фигуры в а раз (1.2 раза) относительно своего центра, но так, чтобы пятно, вращаясь вместе с фи­гурой, оставалось на прежнем расстоянии от ее центра. Картина должна напоминать катящийся с горы нарастающий снежный ком, а пятно напоминать о первоначальных размерах кома. Нарисовать гору и остановить ком в углу экрана рис. 2.9.

Рис. 2.9. Снежный ком.

 

Вариант №8

Задана любая фигура замкнутой ломаной линией (квадрат). Поворачивать фигуру вокруг своего центра на угол r (35 градусов) против часовой стрелки и одновременно вокруг центра экрана на угол s (20 градусов) по часовой стрелке. Одну из сторон фигуры выделить другим цветом. Со­вершать полные обороты фигуры вокруг центра экрана, пока пользователь не завершит работу программы. Картина должна напоминать карусель с вращающейся кабиной рис. 2.10.

Рис. 2.10. Карусель с вращающейся кабиной.

Дополнение:

Создайте полную картину карусели с четырьмя вращающимися кабинами.

 

Вариант №9

Поворачивать любую фигуру, заданную замкну­той ломаной линией (вытянутый прямоугольник, стоящий у левого края экрана на наклонной линии), на угол r (90 градусов) по часовой стрелке вокруг первой вершины фигуры, затем на тот же угол вокруг второй вершины и т. д. k раз (каждый раз в качестве точки поворота выбирать нижний правый угол очередного прямо­угольника, Одну из сторон фигуры (короткую) выделить другим цветом
рис. 2.11.

Рис. 2.11. Кувырок.

 

Дополнение:

Добейтесь того, чтобы прямоугольник стоял на выделенной стороне дольше, чем на остальных, и докувыркался до правого края экрана.


Задания к лабораторной работе № 3

Перед выдачей заданий, студентов необходимо поделить на пары. Если количество студентов нечетное, то оставшемуся без пары студенту предлагается выполнять вариант №1.

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

Рис. 3.10. Каркасная модель куба.

Объекты задаются параметрически, т.е. вы должны в программе рассчитать координаты вершин объекта, и построить списки ребер, для заданных значений основных параметров объекта и его расположения относительно мировой системы координат. Например, объектом является куб, со стороной равной а (конкретное значение задается пользователем). Центр симметрии куба находится в точке О начала системы координат. Ребра куба параллельны соответствующим осям координат. На основе этой информации можно построить объект, показанный на рис. 3.11.

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

z

Рис. 3.11. Параметрически заданный куб.

Рис. 3.12. Получение проекции трехмерной сцены.


Вариант № 1.

Объектом является цилиндр, аппроксимируемый правильной n-гранной призмой рис.3.13. Основания цилиндра параллельны плоскости xy. Нижнее основание лежит в плоскости xy. Центр нижнего основания совпадает с точкой О начала мировой системы координат. Число граней призмы n, радиус описанной вокруг основания окружности r, высота призмы h, и координаты точки наблюдения E задаются пользователем. Вектор наблюдения направлен в точку О. Необходимо построить параллельную и перспективную проекции данной сцены.

Рис. 3.13. Цилиндр. Вариант №1.

 

Вариант № 2.

Объектом является цилиндр, аппроксимируемый правильной n-гранной призмой рис. 3.14. Основания цилиндра параллельны плоскости xy. Нижнее основание лежит в плоскости xy. Центр нижнего основания совпадает с точкой О начала мировой системы координат. Число граней призмы n, длина стороны основания призмы a, высота призмы h, и координаты точки наблюдения E задаются пользователем. Вектор наблюдения направлен в точку О. Необходимо построить параллельную и перспективную проекции данной сцены.

Рис. 3.14. Цилиндр. Вариант №2.

Вариант № 3.

Объектом является конус, аппроксимируемый правильной n-гранной пирамидой рис. 4.15. Основание конуса лежит в плоскости xy. Центр основания совпадает с точкой О начала мировой системы координат. Число граней пирамиды n, радиус описанной вокруг основания окружности r, высота пирамиды h, и координаты точки наблюдения E задаются пользователем. Вектор наблюдения направлен в точку О. Необходимо построить параллельную и перспективную проекции данной сцены.

Рис. 3.15. Конус. Вариант №3.

Вариант № 4.

Объектом является конус, аппроксимируемый правильной n-гранной пирамидой рис. 4.16. Основание пирамиды лежит в плоскости xy. Центр основания совпадает с точкой О начала мировой системы координат. Число граней пирамиды n, длина стороны основания пирамиды a, высота пирамиды h, и координаты точки наблюдения E задаются пользователем. Вектор наблюдения направлен в точку О. Необходимо построить параллельную и перспективную проекции данной сцены.

Рис. 3.16. Конус. Вариант №4.

Вариант № 5.

Объектом является конус, аппроксимируемый правильной n-гранной пирамидой рис. 3.17. Основание конуса лежит в плоскости xy. Центр основания совпадает с точкой О начала мировой системы координат. Число граней пирамиды n, радиус описанной вокруг основания окружности r, угол раскрыва конуса β, и координаты точки наблюдения E задаются пользователем. Вектор наблюдения направлен в точку О. Необходимо построить параллельную и перспективную проекции данной сцены.

Рис. 3.17. Конус. Вариант №5.

Вариант № 6.

Объектом является конус, аппроксимируемый правильной n-гранной пирамидой рис. 3.18. Основание пирамиды лежит в плоскости xy. Центр основания совпадает с точкой О начала мировой системы координат. Число граней пирамиды n, длина стороны основания пирамиды a, угол раскрыва конуса β, и координаты точки наблюдения E задаются пользователем. Вектор наблюдения направлен в точку О. Необходимо построить параллельную и перспективную проекции данной сцены.

Рис. 3.18. Конус. Вариант №6.

Вариант № 7.

Объектом является сфера, аппроксимируемая многогранником рис. 3.19. Центр сферы совпадает с точкой О начала мировой системы координат. Число параллелей n, число меридианов m, радиус сферы r, и координаты точки наблюдения E задаются пользователем. Вектор наблюдения направлен в точку О. Необходимо построить параллельную и перспективную проекции данной сцены.

Рис.3.19. Сфера. Вариант №7.

Вариант № 8.

Объектом является сфера, аппроксимируемая многогранником рис. 3.20. Центр сферы совпадает с точкой О начала мировой системы координат. Число параллелей n, число меридианов m, длина стороны меридиана a, и координаты точки наблюдения E задаются пользователем. Вектор наблюдения направлен в точку О. Необходимо построить параллельную и перспективную проекции данной сцены.

Рис. 3.20. Сфера. Вариант №8.

Вариант № 9.

Объектом является полусфера, аппроксимируемая многогранником
рис. 3.21. Основание полусферы лежит в плоскости xy. Центр основания совпадает с точкой О начала мировой системы координат. Число параллелей n, число меридианов m, радиус основания полусферы r, и координаты точки наблюдения E задаются пользователем. Вектор наблюдения направлен в точку О. Необходимо построить параллельную и перспективную проекции данной сцены.

Рис. 3.21. Полусфера. Вариант №9.


Задания к лабораторной работе №5

Перед выдачей заданий, студентов необходимо поделить на пары. Если количество студентов нечетное, то оставшемуся без пары студенту предлагается выполнять вариант №1. В данной работе необходимо получить на экране компьютера параллельную и перспективную проекции трехмерной сцены с удалением невидимых поверхностей с помощью алгоритма z-буфер.

Для каждого варианта задания необходимо взять трехмерную сцену из предыдущей работы и визуализировать ее, используя алгоритм удаления невидимых поверхностей z-буфер.

 

Приложение 1. Пример оформления отчета о работе

ФГОУ ВПО СИБИРСКИЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ

Постановка задачи

Задание №18 (Вращающаяся стрелка)

Поворачивать любую фигуру, образованную замкнутой ломаной линией (стрелку), вокруг заданной точки на небольшой угол r по часовой или против часовой стрелки. Одну из линий стрелки выделите другим цветом. Совершить n поворотов.

Дополнение:

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

Ход решения задачи.

Представим стрелку в виде четырехугольника следующей формы рис. 1.

Рис. 1. Вид стрелки и нумерация ее вершин.

Точку С – центр стрелки разместим в центре окна, и координаты вершин стрелки будем рассчитывать, используя координаты точки С как базисные. Примем, что координаты точки С представлены вектором . Тогда, координаты точки 0 зададим как вектор , точки 1 – , точки 2 - , точки 3 - . В однородных координатах, координаты вершин стрелки будут следующими:

Для имитации вращения стрелки вокруг своего центра, необходимо над координатами всех вершин выполнять преобразование поворота относительно заданной точки на заданный угол. Координаты точки - центра вращения, это координаты точки С. Преобразование можно представить как комбинацию трех элементарных преобразований, а именно:

1. Преобразование параллельного переноса начала системы координат в точку С.

2. Преобразование поворота точек плоскости на заданный угол относительно начала новой системы координат.

3. Преобразование параллельного переноса начала системы координат на старое место.

В матричной форме запишем наше преобразование в виде произведения матриц

,

где M – результирующая матрица преобразования,

- матрица переноса начала системы координат в точку С,

- матрица поворота точек плоскости на угол φ относительно начала координат,

- матрица преобразования переноса начала системы координат на старое место.

Чтобы изобразить вращающуюся стрелку, применим следующий алгоритм:

1. Определим координаты центра окна cx и cy.

2. Рассчитаем на их основе координаты вершин стрелки, и занесем их в массив векторов.

3. Отобразим стрелку на поверхности окна.

4. Рассчитаем матрицу преобразования для поворота на угол 5 или -5 в зависимости от направления вращения стрелки, используя в качестве координат центра вращения, координаты cx и cy.

5. Применим полученную матрицу к векторам координат вершин стрелки.

6. Через небольшой промежуток времени, сотрем изображение стрелки на поверхности окна, и нарисуем ее заново, используя новые координаты вершин.

7. Будем повторять пункты 4 – 6 пока не будет получена команда на прекращение вращения.

8. Если пользователь произвел щелчок левой кнопкой мыши на поверхности окна, заменим координаты cx и cy на соответствующие координаты курсора мыши.

Примечание: пункт 8 выполняется параллельно с циклом 4 – 6.

Листинг программы.

Библиотека для работы с векторами и матрицами

Заголовочный файл Vectors2.h

//---------------------------------------------------------------------------

// О

Последнее изменение этой страницы: 2016-07-23

lectmania.ru. Все права принадлежат авторам данных материалов. В случае нарушения авторского права напишите нам сюда...