Здавалка
Главная | Обратная связь

Задание на выполнение работы



 

1) Создать перспективную модель куба с длиной ребра 2h для произвольных сферических параметров:

r =EQ- расстояние до точки наблюдения;

q -угол в горизонтальном направлении от оси x;

j -угол, измеренный по вертикали от оси z;

d-расстояние между экраном и точкой наблюдения.

(Макет программы приведен в приложении).

2) Исследовать видоизменение модели от указанных параметров и коэффициентов c1 и с2,определяющих размеры экрана.

3) Преобразовать каркасную модель в модель твердого тела путем внесения изменений в программу.

 

Указания для выполнения

 

Точка О начала системы мировых координат выбирается в центре куба. Длина каждого ребра равна 2h.

Тогда координаты вершин куба будут иметь следующие координаты:

A(h,-h,-h) B(h,h,-h) C(-h,h,-h) D(-h,-h,-h)

E(h,-h,h) F(h,h,h) G(-h,h,h) H(-h,-h,h).

Для перемещения пера в заданную точку используется функция mv(x,y,z),а для вычерчивания ребра- dw(x,y,z), аналогичные moveto(x,y) и lineto(x,y).

Функция perspective() реализует как видовое, так и перспективное преобразование. Функция coeff () реализует вычисления составляющих матрицы V и других вспомогательных коэффициентов, не зависящих от координат точек.

 

Содержание отчета

1) Распечатку программы с нужными комментариями.

2) Виды полученных моделей.

 

 

Контрольные вопросы

 

1) Что из себя представляет проволочная модель?

2) Какой математический аппарат используется для перспективных и проектных преобразований?

3) Напишите матрицу переноса системы координат в трехмерном пространстве.

4) Опишите различие видовых, мировых и экранных координат.

5) Какие изменения необходимо предусмотреть в программе для преобразования проволочной модели в модель твердого тела?

 

Лабораторная работа №6

Построение полигонов сложной формы

 

Цель работы: Практическое использование функций fillpoly() и drawpoly(), а так же преобразования системы координат для построения полигонов сложной формы.

 

Содержание работы

 

Полигоны или многоугольники можно рисовать самыми различными способами, например, с помощью функций line() и lineto(). В Турбо Си имеются две функции для построения полигонов: drawpoly() и fillpoly(). Drawpoly() вычерчивает полигон обычным способом как любую ломаную, заданную совокупностью координат некоторого множества точек. Это может быть как сложная геометрическая фигура, так и график математической функции, заданной в табличном виде.

Fillpoly() отличается тем, что вычерчивает сам полигон и заполняет его внутреннюю область. Объявление fillpoly() в файле GRAPHICS.H выглядит так

 

void far fillpoly(int numpoints, int far*polypoints);

 

Параметр numpoints обозначает количество пар координат (X,Y) точек ломаной, которые задаются через второй аргумент polypoints.

Если полигон имеет n вершин (пронумерованных 0,1,2,...n-1), то значение переменной numpoints должно быть равно n+1 и polipoints является начальным адресом следующей последовательности целых чисел

 

X0,Y0, X1,Y1,.....,Xn-1,Yn-1 , X0 ,Y0.

 

Нам необходимо замкнуть контур многоугольника самостоятельно, записав одну пару координат дважды (точка X0,Y0). В результате как первый аргумент numpoints, так и число пар координат должно быть равно n+1.Заметим, что здесь нужно задавать целочисленные пиксельные координаты.

Используем функцию fillpoly() для построения полигона, представленного на рис.24, называемого “магическим“ треугольником. Данный полигон получается заполнением областей и граней треугольника, предложенного Эшером [5].

Чтобы организовать “заливку“ (т.е. раскраску) полигона, надо использовать функцию, писанную в файле GRAPHICS.H следующим образом:

 

void setfillstyle(int pattern, int color);

 

Эта функция применяется для выбора типа шаблона и цвета, которые будут использоваться в процессе заполнения области. Имеются двенадцать типов шаблонов заполнения, которые можно использовать (см. табл.3). Если этих шаблонов недостаточно, то можно определить свой собственный шаблон, используя функцию setfillpattern().

 

Y y

       
 
   
 


 

X3

 

 

X4

 

 

x

O Xc,Yc

 

 

X0 b w

X5

 

X1 X2

 

 

X

Рис.24

 

Чтобы построить “магический” треугольник используем тригонометрические функции и свойства равностороннего треугольника. Пусть оси координат проходят через центр (воображаемой) окружности (xc y ), вписанной во внутренний треугольник, причем ось y направлена снизу вверх.

Радиус вписанной окружности r=4*R*sin(A/2)*sin(B/2)*sin(C/2),

где R- радиус описанной окружности,

А, В, С- углы при вершинах треугольника.

Для равностороннего треугольника Ð А=ÐВ=ÐС=60 0, следовательно, r=R/2.

Обозначим за а длину стороны внутреннего треугольника. Тогда

 

R=a *sin(A)= a* , r=0.5* a* /3.

 

Замечаем, что sin(1200)= sin(600), a cos(1200) = -cos(600). Это нам необходимо для того, чтобы, построив фактически один угол одного из трех треугольников, затем двумя поворотами по 1200 построить недостающие грани “магического” треугольника для шести точек. Для примера, приведенного на рис.24, при таком повороте точка X0 перейдет на место точки X2, а точка X1 перейдет в точку Z (не вычисляется).

При составлении программы можно, следовательно, вычислить только cos(1200) и sin(1200) и значение sin(1200) использовать еще для нахождения дополнительного параметра треугольника .

b= w/ sin(1200). sin( ).

где b- длина стороны трех малых треугольников, которые отсекаются в вершинах наибольшего треугольника (см. рис.24),

w-толщина стороны каждого закрашиваемого треугольника,

 







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.