Имя
|
Назначение
|
main
()
|
Главная функция
|
Init_kubik
(), init_piramida ()
|
Функции
инициализации: куб, усеченная пирамида
|
Vvod_dannyh
()
|
Ввод данных по
объектам
|
Draw_kubik
(),draw_piramida (),draw_vector () draw_kubik2 (),draw_kubik3 (),
draw_piramida2 (),draw_piramida3 (),
|
Рисование куба
и усеченной пирамиды и вектора
|
Zapolnenie_kubik
(),Zapolnenie_piramida ()
|
Закраска куба и
усеченной пирамиды
|
vvod_D
(),vvod_A (),vvod_W (),vvod_S (), vvod_Q (),vvod_E (),vvod_O (),vvod_P (),
vvod_K (),vvod_L (),vvod_N (),vvod_M () vvod_R ()
|
Нажатие горячих
клавиш
|
rotate_vector_piramida
()
|
Вращение
усеченной пирамиды вокруг произвольного вектора
|
povorot_x_kubik
(),povorot_y_kubik (), povorot_z_kubik () povorot_x_piramida
(),povorot_y_piramida (), povorot_z_piramida ()
|
Вращения куба и
призмы вокруг координатных осей
|
perenos_kubik
(),perenos_piramida ()
|
Перенос куба и
усеченной пирамиды
|
z_buffer
(),z_buffer2 ()
|
Вычисление значения
координаты z
|
menu
(),menu1 (), menucamera (), vvod (),selectmodel (),knopki () vyvod_dannyh
(),ramka (),vvod_vector ()
|
Подменю
|
osi
()
|
Рисование
координатных осей на экран
|
Vid_pr_kubik
(),vid_pr_piramida (), vid_pr_vectora ()
|
Видовое
преобразование куба, усеченной пирамиды и вектора.
|
Proec_kubik
(),proec_piramida (), proec_vectora ()
|
Проецирование
куба, усеченной пирамиды и вектора.
|
5. Алгоритмы
основных функций программы
5.1
Voidvid_pr_kubik (inti), voidvid_pr_piramida (inti), voidvid_pr_vectora (inti)
1. Данные функции предназначаются для преобразования
мировых координат вершин в видовые координаты.
2. Входным параметром функцииявляется номер вершины
. Результатом выполнения функции является значение
видовых координат вершины, занесенное в соответствующий массив
. Последовательность видового преобразования подробно
рассмотрено на стр.8.
. Листинг программы страница -
5.2 Void
proec_kubik (int i), void proec_piramida (int i), void proec_vectora (int i)
1. Данные функции предназначаются для преобразования
видовых координат вершины в экранные координаты.
2. Входным параметром функцииявляется номер вершины
. Результатом выполнения функции является значение
экранных координат вершины, занесенное в соответствующий массив
. Последовательность проецирования подробно
рассмотрено на стр.8.
. Листинг программы страница -
5.3 Void
init_piramida (),void init_kubik ()
1. Данные функции предназначены для первичной
инициализации усеченной пирамиды/куба, т.е. заданию положения опорных точек в
мировой СК.
2. Функция использует переменную, хранящую количества
граней
. Результатом работы функции является заполненные
массивы координат опорных точек в мировой СК
. Блок-схема алгоритма функции представлена на рисунке
5.
. Листинг программы на странице -
Рисунок 5. Алгоритм функции init_piramida ().
5.4
Voiddarw_piramida (),voiddraw_kubik (),draw_vector (), void draw_kubik2 (),
void draw_piramida2 (), void draw_kubik3 (), void draw_piramida3 ()
1. Предназначены для рисования усеченной пирамиды, куба
и вектора в буфер кадра и заполнения z-буфера значениями глубины точек пирамиды
2. На входе функции мировые координаты опорных точек
фигуры.
. Результатом работы функции является заполненный
буфер кадра и z-буфер
. Блок-схема алгоритма функции представлена на рисунке
6.
. Листинг программы на странице -
Рисунок 6. Алгоритм функции draw_piramida ().
Рисунок
7.
5.5
Voidpovorot_x_kubik (),voidpovorot_y_piramida (),voidpovorot_z_kubik (),
voidpovorot_x_piramida (), voidpovorot_y_piramida (), voidpovorot_z_piramida ()
1. Данные функции предназначены для преобразования
координат объекта через матрицу поворота вокруг одной из координатных осей
2. На входе функции мировые координаты опорных точек
фигуры.
. Результатом работы функции является преобразованные
мировые и угол поворота координаты
. Последовательность поворота рассмотрена на стр.9,
поэтому не требует иллюстрации.
. Листинг программы на странице -
5.6 Void
perenos_kubik (int a, int b, int c), void perenos_piramida (int a, int b, int
c)
1. Данные функции предназначены для изменения положения
фигуры на заданные величины.
2. На входе функции величины a, b, c, на которые изменяется
положение по осям X, Y, Z соответственно.
. Функция возвращает измененные мировые координаты
вершин.
. Алгоритм данной функции линеен и не требует иллюстрации.
. Листинг программы на странице -
5.7 Void
z_buffer (), void z_buffer2 ()
1. Предназначены для рисования buf_kadrв закрашенной модели и
модели с удалением невидимых линий.
2. В зависимости от того какая выбрана модель,
происходит рисование тел.
. Результатом работы функции является нарисованная
область буфера кадра.
. Алгоритм данной функции линеен и не требует
иллюстрации.
. Листинг программы на странице -
.8 Voidzapolnenie_kubik
(intcolor),zapolnenie_piramida (intcolor)
1. Предназначены для закраски усеченной пирамиды, куба и
отображения закрашенной фигуры в кадр.
2. На входе функции массив граней по ребрам, массив
ребер и экранные координаты опорных точек фигуры, а также цвет которым следует
её закрасить.
. Результатом работы функции является заполненный
буфер кадра и z-буфер.
. Алгоритм данной функции основывается на алгоритме
построчного сканирования. Для удаления невидимых линей и поверхностей применен
алгоритм, использующий z-буфер. Алгоритм представлен на рисунке 8.
. Листинг программы на странице -
5.9
Voidrotate_vector_piramida (floatalfa)
6. Предназначены для закраски усеченной пирамиды, куба и
отображения закрашенной фигуры в кадр.
7. На входе функции массив граней по ребрам, массив
ребер и экранные координаты опорных точек фигуры, а также цвет которым следует
её закрасить.
. Результатом работы функции является заполненный
буфер кадра и z-буфер.
. Алгоритм данной функции основывается на алгоритме
построчного сканирования. Для удаления невидимых линей и поверхностей применен
алгоритм, использующий z-буфер. Алгоритм представлен на рисунке 8.
. Листинг программы на странице -
5.10 Прочие
функции
Ввиду линейности и простоты не были описаны следующие
функции:
§ Menu () - функция отображения
титульного листа курсовой работы
§ Menu1 () - основное меню программы
§ Vvod () - подменю ввода
параметров фигур
§ Menucamera () - подменю ввода
параметров камеры
§ Selectmodel () - функция установки
модели отображения фигур
§ Osi () - функция рисования
координатных осей
§ Knopki () - функция рисования
кнопок
§ Vyvod_dannyh () - функция вывода
заданных параметров на экран
§ Ramka () - функция рисования
рамок для оформления интерфейса
§ Vvod_D (),Vvod_A (),Vvod_W (),Vvod_S (),Vvod_Q (),Vvod_E (),Vvod_R (),Vvod_O (),Vvod_P (),Vvod_K (),Vvod_L (),Vvod_N (),Vvod_M () - функции работы с
горячими клавишами
Рисунок 8 Алгоритм функции zapolnenie_piramida ().
6.
Руководство пользователя
6.1 Основные
файлы программы
Данная программа требует для запуска следующие файлы:
§ YsPir&kub. exe - основной исполняемый
файл
§ EGAVGA. BGI - подключаемый файл,
работа без данного файла невозможна.
6.2 Запуск
программы
Внимание, запуск программы на системах WindowvVistaи Windows7 невозможен. Для запуска
программы на данных ОС следует предварительно установить программу DosBox. Для запуска программы
надо запустить исполняемый файл Yspir&kub. exe. После запуска на экране появится сообщение о
старте программы и нажав любую клавишу вы окажетесь в главном меню.
6.3 Пункты
главного меню
Главное меню содержит следующие пункты:
§ Vvodparametrovobjektov - переход в подменю
ввода параметров куба и усеченной пирамиды.
§ Vvod parametrov kamery - подменю задания
параметров камеры.
§ Vvodparametrovvektorov - подменю задания
параметров вектора.
§ Vybormodeliizobrazheniya - выбор модели
отображения объектов 1 - каркасная, 2 - с закраской, 3-с удалением невидимых
линий.
§ Zapusknavypolnenie - выполнение программы.
§ Vyhodizprogrammy - выход из программы.
6.4 Горячие
клавиши
Горячие клавиши работают после первого запуска на выполнение.
На экране отображаются кнопки с символом, который следует нажать для
срабатывания горячей клавиши. Для возврата обратно используйте клавишу Esc. Горячие клавиши для
изменения положения куба: D, A, W, S, Q, E. Горячие клавиши для измененияпараметров камеры: O, P, K, L, N, M. Горячая клавиша R для вращения усеченной
пирамиды.
алгоритм буфер программа пользователь
Литература
1. Федотова Т.Н. Пособие по выполнению лабораторных работ по
дисциплине "Компьютерная графика". M: МГТУГА 2002.
. Федотова Т.Н. Конспект лекций по дисциплине
"Компьютерная графика"
. Роджерс Д.Ф. Алгоритмические основы машинной графики.
Москва "Мир". 1989.
Приложения
Приложение 1
Листинги программы.
#include<stdlib. h>
#include<iostream. h>
#include<graphics. h>
#include<math. h>
#include<dos. h>
#include<conio. h>
#include<CTYPE. H>
#include<bios. h>
#include<stdio. h>
#include<string. h>s1, s2, x1, y1;N, R1,
R2, H;
//
___________________________________________________________
// -------------------------------koordinaty
kuba---------------------------------------
float xw_kubik [8], yw_kubik [8], zw_kubik [8];
// mirovye koordinaty kubaxe_kubik [8], ye_kubik [8], ze_kubik [8]; // vidovye
koordinaty kubax_kubik [8], y_kubik [8]; // ekrannye koordinaty kuba
//
__________________________________________________________________
// -------------------------------koordinaty
piramidy----------------------------------xw_piramida [8], yw_piramida [8],
zw_piramida [8]; // mirovye koordinaty piramidy
float xe_piramida [8], ye_piramida [8],
ze_piramida [8]; // vidovye koordinaty piramidyx_piramida [8], y_piramida [8];
// ekrannye koordinaty piramidyMR_kubik [12] [2]
={{0,1},{1,2},{2,3},{3,0},{4,5},{5,6},{6,7},{7,4},{1,7},{2,6},{0,4},{3,5}};MR_piramida
[20] [2], mgr_piramida [10] [10],mgv_piramida [10] [10];
int VK [4] [6];VP [4] [6];z_buf [70]
[70];buf_kadr [70] [70];
//
____________________________________________________________
// -------------------------------koordinaty
vectora------------------------------------
float xvectw_piramida [2], yvectw_piramida [2],
zvectw_piramida [2];
float xvecte_piramida [2], yvecte_piramida [2],
zvecte_piramida [2];xvect_piramida [2], yvect_piramida [2];
int h_kubik; // chirina osnovaniya kuba
float fi, te, al, ro;
int model=1;color1, color2;mgr_kubik [6] [4]
={{0,1,2,3},{4,5,6,7},{7,8,0,10},{5,9,2,11},{4,11,3,10},{6,9,1,8}};mgv_kubik
[6] [4] ={{0,1,2,3},{4,5,6,7},{0,4,7,1},{2,6,5,3},{0,3,5,4},{1,7,6,2}};
int prg_kubik [6], prr_kubik [12];prg_piramida
[6], prr_piramida [12];
//
__________________________________________________________________
// -------------------------------Funkciya
inicializacii kuba--------------------------init_kubik ()
{x0 [8]
={-h_kubik/2,-h_kubik/2,h_kubik/2,h_kubik/2,-h_kubik/2,h_kubik/2,h_kubik/2,-h_kubik/2};y0
[8]
={h_kubik/2,-h_kubik/2,-h_kubik/2,h_kubik/2,h_kubik/2,h_kubik/2,-h_kubik/2,-h_kubik/2};z0
[8]
={h_kubik/2,h_kubik/2,h_kubik/2,h_kubik/2,-h_kubik/2,-h_kubik/2,-h_kubik/2,-h_kubik/2};(int
i=0; i<8; i++)
{_kubik [i] =x0 [i];_kubik [i] =y0 [i];_kubik [i]
=z0 [i];
}
}
//
_________________________________________________________________
// -------------------------------Funkciya
inicializacii piramidy---------------------init_piramida ()
{=l*atan (1) /45.0;_piramida [i] =R1*cos
(angle);_piramida [i] =-H/2;_piramida [i] =R1*sin (angle);+=dl;
}(i; i<N*2; i++)
{=l*atan (1) /45.0;_piramida [i] =R2*cos
(angle);_piramida [i] =H/2;_piramida [i] =R2*sin (angle);+=dl;
}(i=0; i<N-1; i++)
{_piramida [i] [0] =i;_piramida [i] [1] =i+1;
}_piramida [i] [0] =i;_piramida [i] [1] =0;(i=N;
i<N*2-1; i++)
{_piramida [i] [0] =i;_piramida [i] [1] =i+1;
}_piramida [i] [0] =i;_piramida [i] [1] =N;(i=3;
i>=N/2; i--)
{_piramida [ (N*3-1) - i] [0] =i;_piramida [
(N*3-1) - i] [1] =i+N;
}(i=0; i<N/2; i++)
{_piramida [i+ (N*3-2)] [0] =i;_piramida [i+
(N*3-2)] [1] =i+N;
}(int j=0; j<N; j++)_piramida [0] [j] =j;(j=N;
j<N*2; j++)
mgr_piramida [1] [j-N] =j;
for (i=2; i<N+1; i++)
{_piramida [i] [0] =i-2;_piramida [i] [1]
=i-1+N*2;_piramida [i] [2] =i-2+N;_piramida [i] [3] =i-2+N*2;(N>4)(j=4;
j<N; j++)
mgr_piramida [i] [j] =-1;
}_piramida [N+1] [0] =N-1;_piramida [N+1] [1]
=N*2;_piramida [N+1] [2] =N*2-1;_piramida [N+1] [3] =N*3-1;_piramida [0] [0]
=0;_piramida [0] [1] =N-1;_piramida [0] [2] =N-2;_piramida [1] [0] =N;_piramida
[1] [1] =N+1;
mgv_piramida [1] [2] =N+2;(i=2; i<N+2; i++)
{_piramida [i] [0] =i-2;_piramida [i] [1]
=i-1;_piramida [i] [2] =i-1+N;
}
}
//
_________________________________________________________________
// -------------------------------Funkciya
inicializacii piramidy1--------------------
void init_piramida1 ()
{x0 [8]
={-h_min_piramida/2,-h_piramida/2,h_piramida/2,h_min_piramida/2,h_min_piramida/2,h_min_piramida/2,h_piramida/2,-h_piramida/2};y0
[8]
={h_piramida/2,-h_piramida/2,-h_piramida/2,h_piramida/2,h_piramida/2,h_piramida/2,-h_piramida/2,-h_piramida/2};z0
[8]
={h_min_piramida/2,h_piramida/2,h_piramida/2,h_min_piramida/2,h_min_piramida/2,-h_min_piramida/2,-h_piramida/2,-h_piramida/2};
for (int i=0; i<8; i++)
{_piramida [i] =x0 [i];_piramida [i] =y0
[i];_piramida [i] =z0 [i];
}
}
//
____________________________________________________________
// ---------------------------Funkciya vidovogo
preobrazovaniya kuba------------vid_pr_kubik (int i)
{_kubik [i] = - xw_kubik [i] *sin (te) +yw_kubik
[i] *cos (te);_kubik [i] = - xw_kubik [i] *cos (fi) *cos (te) - yw_kubik [i]
*cos (fi) *sin (te)
+zw_kubik [i] *sin (fi);_kubik [i] = - xw_kubik
[i] *sin (fi) *cos (te) - yw_kubik [i] *sin (fi) *sin (te)_kubik [i] *cos (fi)
+ro;
}
//
____________________________________________________________
// ---------------------------Funkciya vidovogo
preobrazovaniya piramidy-------vid_pr_piramida (int i)
{_piramida [i] = - xw_piramida [i] *sin (te)
+yw_piramida [i] *cos (te);_piramida [i] = - xw_piramida [i] *cos (fi) *cos
(te) - yw_piramida [i] *cos (fi) *sin (te)
+zw_piramida [i] *sin (fi);_piramida [i] = -
xw_piramida [i] *sin (fi) *cos (te) - yw_piramida [i] *sin (fi) *sin
(te)_piramida [i] *cos (fi) +ro;
}
//
____________________________________________________________
// ---------------------------Funkciya vidovogo
preobrazovaniya vectora---------vid_pr_vectora (int i)
{_piramida [i] = - xvectw_piramida [i] *sin (te)
+yvectw_piramida [i] *cos (te);_piramida [i] = - xvectw_piramida [i] *cos (fi)
*cos (te) - yvectw_piramida [i] *cos (fi) *sin (te)
+zvectw_piramida [i] *sin (fi);_piramida [i] = -
xvectw_piramida [i] *sin (fi) *cos (te) - yvectw_piramida [i] *sin (fi) *sin
(te)_piramida [i] *cos (fi) +ro;
}
//
____________________________________________________________
// -------------------------------Funkciya
proecirovaniya kuba----------------------
void proec_kubik (int i)
{_kubik [i] =xe_kubik [i] +x1;_kubik [i]
=-ye_kubik [i] +y1;
}
//
____________________________________________________________
// -------------------------------Funkciya
proecirovaniya piramidy-----------------proec_piramida (int i)
{_piramida [i] =xe_piramida [i] +x1;_piramida [i]
=-ye_piramida [i] +y1;
}
//
____________________________________________________________
// -------------------------------Funkciya
proecirovaniya vectora-------------------proec_vectora (int i)
{_piramida [i] =xvecte_piramida [i] +x1;_piramida
[i] =-yvecte_piramida [i] +y1;
}
//
____________________________________________________________
// -----------------------------------Funkciya
risovaniya kuba-----------------------
void draw_kubik ()
{(int i=0; i<8; i++) {_pr_kubik (i);_kubik (i);
}(i=0; i<12; i++)
{=MR_kubik [i] [0];=MR_kubik [i] [1];(x_kubik
[s1],y_kubik [s1],x_kubik [s2],y_kubik [s2]);
}
}
//
____________________________________________________________
// -----------------------------------Funkciya
risovaniya piramidy------------------
void draw_piramida ()
{(int i=0; i<8; i++) {_pr_piramida
(i);_piramida (i); }(i=0; i<12; i++)
{=MR_piramida [i] [0];=MR_piramida [i]
[1];(x_piramida [s1],y_piramida [s1],x_piramida [s2],y_piramida [s2]);
}
}
// ____________________________________________________________
// -----------------------------------Funkciya
risovaniya vectora--------------------
void draw_vector ()
{(int i=0; i<2; i++)
{_pr_vectora (i);_vectora (i);
}(xvect_piramida [0],yvect_piramida
[0],xvect_piramida [1],yvect_piramida [1]);
}
//
____________________________________________________________
// ------------------------------Funkciya
povorota kuba otnositelno osi x----------
void povorot_x_kubik ()
{(int i=0; i<8; i++)
{k=yw_kubik [i];_kubik [i] =yw_kubik [i] *cos
(al) - zw_kubik [i] *sin (al);_kubik [i] =k*sin (al) +zw_kubik [i] *cos (al);
}
}
//
____________________________________________________________
// ------------------------------Funkciya
povorota kuba otnositelno osi y-------
void povorot_y_kubik ()
{(int i=0; i<8; i++)
{k=xw_kubik [i];_kubik [i] =xw_kubik [i] *cos
(al) +zw_kubik [i] *sin (al);_kubik [i] =-k*sin (al) +zw_kubik [i] *cos (al);
}
}
//
_________________________________________________________________
// ------------------------------Funkciya
povorota kuba otnositelno osi z---------
void povorot_z_kubik ()
{(int i=0; i<8; i++)
{k=xw_kubik [i];_kubik [i] =xw_kubik [i] *cos
(al) - yw_kubik [i] *sin (al);_kubik [i] =k*sin (al) +yw_kubik [i] *cos (al);
}
}
// ____________________________________________________________
// --------------------------Funkciya povorota
piramidy otnositelno osi x--------
void povorot_x_piramida ()
{(int i=0; i<8; i++)
{k=yw_piramida [i];_piramida [i] =yw_piramida [i]
*cos (al) - zw_piramida [i] *sin (al);_piramida [i] =k*sin (al) +zw_piramida
[i] *cos (al);
}
}
//
____________________________________________________________
// --------------------------Funkciya povorota
piramidy otnositelno osi y--------
void povorot_y_piramida ()
{(int i=0; i<8; i++)
{k=xw_piramida [i];_piramida [i] =xw_piramida [i]
*cos (al) +zw_piramida [i] *sin (al);_piramida [i] =-k*sin (al) +zw_piramida
[i] *cos (al);
}
}
//
____________________________________________________________
// --------------------------Funkciya povorota
piramidy otnositelno osi z---------povorot_z_piramida ()
{(int i=0; i<8; i++)
{k=xw_piramida [i];_piramida [i] =xw_piramida [i]
*cos (al) - yw_piramida [i] *sin (al);_piramida [i] =k*sin (al) +yw_piramida
[i] *cos (al);
}
}
// ____________________________________________________________
// -----------------------------------Funkciya
perenosa kuba-------------------------
void perenos_kubik (int a, int b, int c)
{(int i=0; i<8; i++)
{_kubik [i] += a;_kubik [i] += b;_kubik [i] += c;
}
}
//
____________________________________________________________
// -----------------------------------Funkciya
perenosa piramidy---------------------
void perenos_piramida (int a, int b, int c)
{(int i=0; i<8; i++)
{_piramida [i] += a;_piramida [i] += b;_piramida
[i] += c;
}
}
//
____________________________________________________________
// -----------------------------------Funkciya
zakraski kuba------------------------
void zapolnenie_kubik (int color)
{{ygr, dy,miny,minx,maxx;dx, x,zz;
} SR [4], SAR [4], temp;f,f1,f2;z2,a1,b1,c1;(int
i=0; i<6; i++)
// if (prg_kubik [i] ==0)
{(color! =0)++;(int n=0; n<4; n++)
{[n]. ygr=0;[n]. dx=0;[n]. dy=0;[n]. x=0;[n].
zz=0;[n]. miny=0;[n]. minx=0;
SR [n]. maxx=0;[n] =SR [n];
}=VK [0] [i];=VK [1] [i];=VK [2] [i];(int
j=0,j1=0; j<4; j++)
{[j]. dy=0;=mgr_kubik [i] [j];=MR_kubik [f]
[0];=MR_kubik [f] [1];( (int) y_kubik [f1]! = (int) y_kubik [f2])
{(y_kubik [f2] <y_kubik [f1])
{=f2;=f1;=f;
}[j1]. ygr=y_kubik [f2];[j1]. miny=y_kubik
[f1];[j1]. dy=y_kubik [f2] - y_kubik [f1];
SR [j1]. x=x_kubik [f2];[j1]. maxx=x_kubik
[f2];[j1]. minx=x_kubik [f1];[j1]. zz=ze_kubik [f2];[j1++]. dx=float (x_kubik
[f2] - x_kubik [f1]) /float (y_kubik [f1] - y_kubik [f2]);
}
}a=SR [0]. ygr,j2,str=0,str1,str2,str3;(j=1;
j<j1; j++)(a<SR [j]. ygr)=SR [j]. ygr;(j=0, j2=0; j<j1; j++)(SR [j].
ygr==a)[j2++] =SR [j];(j2! =0)
{
// if (j2==1) j2=2;(int l=0; l<j2; l++)(int
z=0; z<j2-l; z++)( (SAR [z]. dy==0) || ( (SAR [z]. x>SAR [z+1]. x)
&& (SAR [z+1]. dy! =0)))
{=SAR [z];[z] =SAR [z+1];
SAR [z+1] =temp;
}(j=0; j<j2; j+=2)
{=SAR [j]. zz;=SAR [j]. dy;=int (SAR [j]. miny) -
int (SAR [j+1]. miny);= (int (SAR [j+1]. maxx) - int (SAR [j]. maxx)) * (int
(SAR [j+1]. minx) - int (SAR [j]. minx));
for (int x=SAR [j]. x,h=0; x<SAR [j+1]. x;
h++, x++)
// putpixel (x,a,color);
{(z_buf [x] [a] <=z2)
{_buf [x] [a] =z2;( (h==0) || ( ( (str==0) ||
(str1==1)) && (str2==0) && (str3! =0)))_kadr [x] [a] =15;_kadr
[x] [a] =color;
}(c1! =0)-=a1/c1;
}(z_buf [x] [a] <=z2)
{_buf [x] [a] =z2;_kadr [x] [a] =15; }
}=j2;(j=0; j<f; j++)
{[j]. ygr--;[j]. dy--;[j]. x+=SAR [j]. dx;
if (c1! =0)[j]. zz-= (a1*SAR [j]. dx+b1) /c1;(SAR
[j]. dy<=0)--;
}-;++;(j=0; j<j1; j++)(SR [j]. ygr==a)(int
k=0; k<4; k++)(SAR [k]. dy==0) {[k] =SR [j];++;;
}
}
}
}
// ___________________________________________________________
// -----------------------------------Funkciya
zakraski piramidy--------------------
void zapolnenie_piramida (int color)
{{ygr, dy,miny,minx,maxx;dx, x,zz;
} SR [4], SAR [4], temp;f,f1,f2;z2,a1,b1,c1;(int
i=0; i<6; i++)
// if (prg_piramida [i] ==0)
{(int n=0; n<4; n++)
{[n]. ygr=0;[n]. dx=0;[n]. dy=0;[n]. x=0;[n].
zz=0;[n]. miny=0;[n]. minx=0;[n]. maxx=0;[n] =SR [n];
}=VK [0] [i];=VK [1] [i];=VK [2] [i];(int
j=0,j1=0; j<4; j++)
{[j]. dy=0;=mgr_piramida [i] [j];
f1=MR_piramida [f] [0];=MR_piramida [f] [1];(
(int) y_piramida [f1]! = (int) y_piramida [f2])
{(y_piramida [f2] <y_piramida [f1])
{=f2;=f1;=f;
}[j1]. ygr=y_piramida [f2];[j1]. miny=y_piramida
[f1];[j1]. dy=y_piramida [f2] - y_piramida [f1];[j1]. x=x_piramida [f2];[j1]. maxx=x_piramida
[f2];[j1]. minx=x_piramida [f1];[j1]. zz=ze_piramida [f2];[j1++]. dx=float
(x_piramida [f2] - x_piramida [f1]) /float (y_piramida [f1] - y_piramida [f2]);
}
}a=SR [0]. ygr,j2,str=0,str1,str2,str3;(j=1;
j<j1; j++)(a<SR [j]. ygr)=SR [j]. ygr;(j=0, j2=0; j<j1; j++)(SR [j].
ygr==a)[j2++] =SR [j];(j2! =0)
{
// if (j2==1) j2=2;(int l=0; l<j2; l++)(int
z=0; z<j2-l; z++)( (SAR [z]. dy==0) || ( (SAR [z]. x>SAR [z+1]. x)
&& (SAR [z+1]. dy! =0)))
{=SAR [z];[z] =SAR [z+1];
SAR [z+1] =temp;
}(j=0; j<j2; j+=2)
{=SAR [j]. zz;=SAR [j]. dy;=int (SAR [j]. miny) -
int (SAR [j+1]. miny);= (int (SAR [j+1]. maxx) - int (SAR [j]. maxx)) * (int
(SAR [j+1]. minx) - int (SAR [j]. minx));
for (int x=SAR [j]. x,h=0; x<SAR [j+1]. x;
h++, x++)
// putpixel (x,a,color);
{(z_buf [x] [a] <=z2)
{_buf [x] [a] =z2;( (h==0) || ( ( (str==0) ||
(str1==1)) && (str2==0) && (str3! =0)))_kadr [x] [a] =5;_kadr
[x] [a] =color;
}(c1! =0)-=a1/c1;
}(z_buf [x] [a] <=z2)
{_buf [x] [a] =z2;_kadr [x] [a] =5; }
}=j2;(j=0; j<f; j++)
{[j]. ygr--;[j]. dy--;[j]. x+=SAR [j]. dx;
if (c1! =0)[j]. zz-= (a1*SAR [j]. dx+b1) /c1;(SAR
[j]. dy<=0)--;
}-;++;(j=0; j<j1; j++)(SR [j]. ygr==a)(int
k=0; k<4; k++)(SAR [k]. dy==0) {[k] =SR [j];++;;
}
}
}
}draw_kubik2 ()
{f0;f1;f2;f3;(int i=0; i<12; i++)_kubik [i]
=0;(i=0; i<6; i++)_kubik [i] =0;(i=0; i<4; i++)
{(int ii=0; ii<6; ii++)[i] [ii] =0;
}(i=0; i<8; i++)
{_pr_kubik (i);_kubik (i);
}(int g=0; g<6; g++) // // // // // // matrix
kubik
{=mgv_kubik [g] [0];=mgv_kubik [g] [1];=mgv_kubik
[g] [2];=mgv_kubik [g] [3];[0] [g] = (ye_kubik [f0] - ye_kubik [f1]) *
(ze_kubik [f0] +ze_kubik [f1]) +
(ye_kubik [f1] - ye_kubik [f2]) * (ze_kubik [f1]
+ze_kubik [f2]) +
(ye_kubik [f2] - ye_kubik [f3]) * (ze_kubik [f2]
+ze_kubik [f3]) +
(ye_kubik [f3] - ye_kubik [f0]) * (ze_kubik [f3]
+ze_kubik [f0]);[1] [g] = (ze_kubik [f0] - ze_kubik [f1]) * (xe_kubik [f0]
+xe_kubik [f1]) +
(ze_kubik [f1] - ze_kubik [f2]) * (xe_kubik [f1]
+xe_kubik [f2]) +
(ze_kubik [f2] - ze_kubik [f3]) * (xe_kubik [f2]
+xe_kubik [f3]) +
(ze_kubik [f3] - ze_kubik [f0]) * (xe_kubik [f3]
+xe_kubik [f0]);[2] [g] = (xe_kubik [f0] - xe_kubik [f1]) * (ye_kubik [f0]
+ye_kubik [f1]) +
(xe_kubik [f1] - xe_kubik [f2]) * (ye_kubik [f1]
+ye_kubik [f2]) +
(xe_kubik [f2] - xe_kubik [f3]) * (ye_kubik [f2]
+ye_kubik [f3]) +
(xe_kubik [f3] - xe_kubik [f0]) * (ye_kubik [f3]
+ye_kubik [f0]);[3] [g] =- ( (VK [0] [g]) *xe_kubik [f0] + (VK [1] [g])
*ye_kubik [f0] +
(VK [2] [g]) *ze_kubik [f0]);
}_kubik (9);
}draw_kubik3 ()
{f0;f1;f2;f3;(int i=0; i<12; i++)_kubik [i]
=0;(i=0; i<6; i++)_kubik [i] =0;(i=0; i<4; i++)
{(int ii=0; ii<6; ii++)[i] [ii] =0;
}(i=0; i<8; i++)
{_pr_kubik (i);_kubik (i);
}(int g=0; g<6; g++) // // // // // // matrix
kubik
{=mgv_kubik [g] [0];=mgv_kubik [g] [1];=mgv_kubik
[g] [2];=mgv_kubik [g] [3];[0] [g] = (ye_kubik [f0] - ye_kubik [f1]) *
(ze_kubik [f0] +ze_kubik [f1]) +
(ye_kubik [f1] - ye_kubik [f2]) * (ze_kubik [f1]
+ze_kubik [f2]) +
(ye_kubik [f2] - ye_kubik [f3]) * (ze_kubik [f2]
+ze_kubik [f3]) +
(ye_kubik [f3] - ye_kubik [f0]) * (ze_kubik [f3]
+ze_kubik [f0]);[1] [g] = (ze_kubik [f0] - ze_kubik [f1]) * (xe_kubik [f0]
+xe_kubik [f1]) +
(ze_kubik [f1] - ze_kubik [f2]) * (xe_kubik [f1]
+xe_kubik [f2]) +
(ze_kubik [f2] - ze_kubik [f3]) * (xe_kubik [f2]
+xe_kubik [f3]) +
(ze_kubik [f3] - ze_kubik [f0]) * (xe_kubik [f3]
+xe_kubik [f0]);[2] [g] = (xe_kubik [f0] - xe_kubik [f1]) * (ye_kubik [f0]
+ye_kubik [f1]) +
(xe_kubik [f1] - xe_kubik [f2]) * (ye_kubik [f1]
+ye_kubik [f2]) +
(xe_kubik [f2] - xe_kubik [f3]) * (ye_kubik [f2]
+ye_kubik [f3]) +
(xe_kubik [f3] - xe_kubik [f0]) * (ye_kubik [f3]
+ye_kubik [f0]);[3] [g] =- ( (VK [0] [g]) *xe_kubik [f0] + (VK [1] [g])
*ye_kubik [f0] +
(VK [2] [g]) *ze_kubik [f0]);
}_kubik (0);
}draw_piramida2 ()
{f0;f1;f2;f3;(int i=0; i<12; i++)_piramida [i]
=0;(i=0; i<6; i++)_piramida [i] =0;(i=0; i<4; i++)
{(int ii=0; ii<6; ii++)[i] [ii] =0;
}(i=0; i<8; i++)
{_pr_piramida (i);_piramida (i);
}(int g=0; g<6; g++) // // // // // // matrix
piramida
{=mgv_piramida [g] [0];=mgv_piramida [g]
[1];=mgv_piramida [g] [2];=mgv_piramida [g] [3];[0] [g] = (ye_piramida [f0] -
ye_piramida [f1]) * (ze_piramida [f0] +ze_piramida [f1]) +
(ye_piramida [f1] - ye_piramida [f2]) *
(ze_piramida [f1] +ze_piramida [f2]) +
(ye_piramida [f2] - ye_piramida [f3]) * (ze_piramida
[f2] +ze_piramida [f3]) +
(ye_piramida [f3] - ye_piramida [f0]) *
(ze_piramida [f3] +ze_piramida [f0]);[1] [g] = (ze_piramida [f0] - ze_piramida
[f1]) * (xe_piramida [f0] +xe_piramida [f1]) +
(ze_piramida [f1] - ze_piramida [f2]) *
(xe_piramida [f1] +xe_piramida [f2]) +
(ze_piramida [f2] - ze_piramida [f3]) *
(xe_piramida [f2] +xe_piramida [f3]) +
(ze_piramida [f3] - ze_piramida [f0]) *
(xe_piramida [f3] +xe_piramida [f0]);[2] [g] = (xe_piramida [f0] - xe_piramida
[f1]) * (ye_piramida [f0] +ye_piramida [f1]) +
(xe_piramida [f1] - xe_piramida [f2]) *
(ye_piramida [f1] +ye_piramida [f2]) +
(xe_piramida [f2] - xe_piramida [f3]) *
(ye_piramida [f2] +ye_piramida [f3]) +
(xe_piramida [f3] - xe_piramida [f0]) *
(ye_piramida [f3] +ye_piramida [f0]);[3] [g] =- ( (VK [0] [g]) *xe_piramida
[f0] + (VK [1] [g]) *ye_piramida [f0] +
(VK [2] [g]) *ze_piramida [f0]);
}_piramida (RED);
}draw_piramida3 ()
{f0;f1;f2;f3;(int i=0; i<12; i++)_piramida [i]
=0;(i=0; i<6; i++)_piramida [i] =0;(i=0; i<4; i++)
{(int ii=0; ii<6; ii++)[i] [ii] =0;
}(i=0; i<8; i++)
{_pr_piramida (i);_piramida (i); }(int g=0;
g<6; g++) // // // // // // matrix piramida
{=mgv_piramida [g] [0];=mgv_piramida [g]
[1];=mgv_piramida [g] [2];=mgv_piramida [g] [3];[0] [g] = (ye_piramida [f0] -
ye_piramida [f1]) * (ze_piramida [f0] +ze_piramida [f1]) +
(ye_piramida [f1] - ye_piramida [f2]) *
(ze_piramida [f1] +ze_piramida [f2]) +
(ye_piramida [f2] - ye_piramida [f3]) *
(ze_piramida [f2] +ze_piramida [f3]) +
(ye_piramida [f3] - ye_piramida [f0]) *
(ze_piramida [f3] +ze_piramida [f0]);[1] [g] = (ze_piramida [f0] - ze_piramida
[f1]) * (xe_piramida [f0] +xe_piramida [f1]) +
(ze_piramida [f1] - ze_piramida [f2]) *
(xe_piramida [f1] +xe_piramida [f2]) +
(ze_piramida [f2] - ze_piramida [f3]) *
(xe_piramida [f2] +xe_piramida [f3]) +
(ze_piramida [f3] - ze_piramida [f0]) *
(xe_piramida [f3] +xe_piramida [f0]);[2] [g] = (xe_piramida [f0] - xe_piramida
[f1]) * (ye_piramida [f0] +ye_piramida [f1]) +
(xe_piramida [f1] - xe_piramida [f2]) *
(ye_piramida [f1] +ye_piramida [f2]) +
(xe_piramida [f2] - xe_piramida [f3]) *
(ye_piramida [f2] +ye_piramida [f3]) +
(xe_piramida [f3] - xe_piramida [f0]) *
(ye_piramida [f3] +ye_piramida [f0]);[3] [g] =- ( (VK [0] [g]) *xe_piramida
[f0] + (VK [1] [g]) *ye_piramida [f0] +
(VK [2] [g]) *ze_piramida [f0]);
}_piramida (0);
}z_buffer ()
{z2;(int z=0; z<70; z++)
{(int z1=0; z1<70; z1++)
{_buf [z] [z1] =-60;_kadr [z] [z1] =0;
}
}_piramida2 ();_kubik2 ();(z=0; z<70; z++)(int
z1=0; z1<70; z1++)(z+120,z1+120,buf_kadr [z] [z1]);
}z_buffer2 ()
{z2;(int z=0; z<70; z++)
{(int z1=0; z1<70; z1++)
{_buf [z] [z1] =-60;_kadr [z] [z1] =0;
}
}_piramida3 ();_kubik3 ();(z=0; z<70; z++)(int
z1=0; z1<70; z1++)(z+120,z1+120,buf_kadr [z] [z1]);
}
// ____________________________________________________________
// -------------------------------Funkciya
titulnyi list kursovoi----------------------
void menu ()
{();(5);(3,0,9);(120,0,"Kursovaya");(195,100,"rabota");(7,0,3);(60,270,"Rabotu
vypolnila studentka gpuppy EVM 5-1");(7,0,1);(250,310,"LAVINA
VIKTORIYA");(8,0,1);(15);(160,230,"Dlya prodoljeniya najmite
\"Enter\"");();
}
//
____________________________________________________________
// -------------------------------Funkciya menu
programmy-------------------------
void menu1 ()
{();(0);(5);(10,0,1);(100,50,"Vvod
parametrov objektov 1");(100,80,"Vvod parametrov kamery
2");(100,110,"Vvod parametrov vektorov 3");(100,140,"Vybor
modeli izobrazheniya 4");(100,170,"Zapusk na vypolnenie
5");(100, 200,"Vyhod iz programmy ESC");
}
//
____________________________________________________________
// -------------------------------Funkciya vvoda
parametrov-------------------------
void vvod ()
{ clrscr
();();(0);(5);(5,0,3);(0,30,"Vvedite dlinu osnovaniya kuba
(5-40)");<< endl << endl << endl<< endl<<
endl;>> h_kubik;(0,75,"Vvedite radius bolchego osnovaniya piramidy
(5-20)");
cout<< endl <<
endl;>>R1;(0,120,"Vvedite radius bolchego osnovaniya piramidy
(5-20)");<< endl << endl;>> R2;(0,165,"Vvedite
vysotu piramidy (5-20)");<< endl << endl;>> H;(0,
205,"Vvedite kolichestvo verchin v osnovanii piramidy
(5-20)");<< endl << endl;>> N;
getchar ();
}
//
____________________________________________________________
// -------------------------------Funkciya
podmenu camery------------------------
void menucamera ()
{();();(0);(5);(5,0,4);(0,0,"Vvedite
ro");(0,50,"Vvedite fi");
outtextxy (0,100,"Vvedite te");<<
endl << endl << endl <<"ro=";>> ro;<<
endl << endl << endl <<"fi=";>> fi;<<
endl << endl << endl <<"te=";
cin >> te;();
}
//
____________________________________________________________
// -------------------------------Funkciya
podmenu vybora modeli------------------
void selectmodel ()
{();(0);(5);(10,0,1);(0,50," Karkasnaya
model 1");(0,100," Zakraska 2");(0,150," Model ydaleniya
nevidimyh linii 3");:(getch ())
{'1': model=1; break;'2': model=2; break;'3':
model=3; break;: goto m1;
}
}
//
____________________________________________________________
// -------------------------------Funkciya
risovaniya osi-----------------------------
void osi ()
{mox [3] ={50,0,0}, moy [3] ={0,50,0}, moz [3]
={0,0,50};vox [3],voy [3],voz [3];eox [3],eoy [3];(int a=0; a<3; a++)
{[a] =-mox [a] *sin (te) +moy [a] *cos (te);[a]
=-mox [a] *cos (fi) *cos (te) - moy [a] *cos (fi) *sin (te) +moz [a] *sin
(fi);[a] =-mox [a] *sin (fi) *cos (te) - moy [a] *sin (fi) *sin (te) - moz [a]
*cos (fi) +ro;
}(a=0; a<3; a++)
{[a] =vox [a];[a] =-voy [a];
}(1,0,1);(a=0; a<3; a++)
{(a+1);(a)
{0: outtextxy (570+eox [a] +3,280+eoy [a] -
3,"x"); break;1: outtextxy (570+eox [a] +3,280+eoy [a] -
3,"y"); break;2: outtextxy (570+eox [a] - 3,280+eoy [a] -
3,"z"); break;
}(570,280,570+eox [a],280+eoy [a]);
}
}rotate_vector_piramida (float alfa)
{_vector ();vect= (sqrt (pow (xvectw_piramida [1]
- xvectw_piramida [0],2) +
pow (yvectw_piramida [1] - yvectw_piramida [0],2)
+(zvectw_piramida [1] - zvectw_piramida [0],2)));vte=cos ( (xvectw_piramida [1]
- xvectw_piramida [0]) /
(sqrt (pow (xvectw_piramida [1] - xvectw_piramida
[0],2) +(yvectw_piramida [1] - yvectw_piramida [0],2))));vfi=cos (
(zvectw_piramida [1] - zvectw_piramida [0]) /vect);=vte;_z_piramida
();=vfi;_y_piramida ();=alfa*atan (1) /45;_z_piramida ();=-vfi;_y_piramida
();=-vte;_z_piramida ();
}
//
___________________________________________________________
// -------------------------------Funkciya
risovaniya knopok-----------------------
void knopki ()
{(15);(15, 240,"Dvigenie kuba");(15,
265,"Po osi X: ");d (110, 265, 130,285,2,1);d (140, 265,
160,285,2,1);(15, 295,"Po osi Y: ");d (110, 295, 130,315,2,1);d (140,
295, 160,315,2,1);(15, 325,"Po osi Z: ");d (110, 325, 130,345,2,1);d
(140, 325, 160,345,2,1);(220, 240,"Vrachenie");(220,
260,"piramida");d (250, 300,
270,320,2,1);(5);(113,265,"A");(143,265,"D");(113,295,"S");(143,295,"W");(113,325,"E");(143,325,"Q");(252,301,"R");
}vyvod_dannyh ()
{str [10];(15);(1,0,1);(505,5," H
kubika");(h_kubik,str,10);(515, 20,str);(510,70,"CAMERA:
");(540,95,"Fi: ");(fi,str,10);(570,95,str);d (610, 95,
630,115,2,1);d (510, 95, 530,115,2,1);(540,125,"Te: ");
itoa (te,str,10);(570,125,str);
bar3d (610, 125, 630,145,2,1);d (510, 125,
530,145,2,1);(540,155,"Ro: ");(ro,str,10);(570,155,str);d (610, 155,
630,175,2,1);d (510, 155, 530,175,2,1);(360,5,"VECTOR: ");
outtextxy (360,35,"x1:
");(xvectw_piramida [0],str,10);(395,35,str);(430,35,"x2:
");(xvectw_piramida [1],str,10);(465,35,str);(360,70,"y1:
");(yvectw_piramida [0],str,10);(395,70,str);(430,70,"y2:
");(yvectw_piramida [1],str,10);(465,70,str);(360,105,"z1:
");(zvectw_piramida [0],str,10);(395,105,str);(430,105,"z2:
");(zvectw_piramida [1],str,10);(465,105,str);(360, 190,"USECHENNAYA:
");(360, 205,"PIRAMIDA: ");
outtextxy (360,235,"R1:
");(R1,str,10);(395,235,str);(360,265,"R2:
");(R2,str,10);(395,265,str);(360,295,"N:
");(N,str,10);(395,295,str);(360,325,"H:
");(H,str,10);(395,325,str);(5);(512,95,"O");(612,95,"P");(512,125,"K");(612,125,"L");(512,155,"N");(612,155,"M");(512,185,"-5
< - > +5");
}minus (float ugol)
}plus (float ugol)
{= ugol + 5;ugol;
}
//
____________________________________________________________
// -------------------------------Funkciya
risovaniya ramok--------------------------ramka ()
{(5);(0,0,getmaxx (),getmaxy ());(119,119, 191,
191);(500,0,getmaxx (),getmaxy ());(500,70,getmaxx (),210);(350,0,500,getmaxy
());(350,getmaxy () /2,500,getmaxy ());(0,235, 200,getmaxy
());(200,235,350,getmaxy ());
}vvod_D ()
{();(0);();_dannyh ();(WHITE);_kubik
(10,0,0);(model==1)
{_kubik ();(6);_piramida ();
}(model==2)_buffer ();(model==3)_buffer2
();();();
}vvod_A ()
{();(0);();_dannyh ();(WHITE);_kubik
(-10,0,0);(model==1)
{_kubik ();(6);_piramida ();
}(model==2)_buffer ();(model==3)_buffer2
();();();
}vvod_W ()
{();(0);();_dannyh ();(WHITE);_kubik
(0,10,0);(model==1)
{_kubik ();(6);_piramida ();
}(model==2)_buffer ();(model==3)_buffer2
();();();
}vvod_S ()
{();(0);();_dannyh ();(WHITE);_kubik
(0,-10,0);(model==1)
{_kubik ();(6);_piramida ();
}(model==2)_buffer ();(model==3)_buffer2
();();();
}vvod_Q ()
{();(0);();_dannyh ();(WHITE);_kubik (0,0,10);(model==1)
{_kubik ();(6);_piramida ();
}(model==2)_buffer ();(model==3)_buffer2
();();();
}vvod_E ()
{();(0);();_dannyh ();(WHITE);_kubik
(0,0,-10);(model==1)
{_kubik ();(6);_piramida ();
}(model==2)_buffer ();(model==3)_buffer2
();();();
}vvod_O ()
{();(0);();_dannyh ();(WHITE);=minus
(fi);(model==1)
{_kubik ();(6);_piramida ();
}(model==2)_buffer ();(model==3)_buffer2
();();();
}vvod_K ()
{();(0);();_dannyh ();(WHITE);=minus
(te);(model==1)
{_kubik ();(6);_piramida ();
}(model==2)_buffer ();(model==3)_buffer2
();();();
}vvod_N ()
{();(0);();_dannyh ();(WHITE);=minus
(ro);(model==1)
{_kubik ();(6);_piramida ();
}(model==2)_buffer ();(model==3)_buffer2
();();();
}vvod_P ()
{();(0);();_dannyh ();(WHITE);=plus
(fi);(model==1)
{_kubik ();(6);_piramida ();
}(model==2)_buffer ();(model==3)_buffer2
();();();
}vvod_L ()
{();(0);();_dannyh ();(WHITE);
te=plus (te);(model==1)
{_kubik ();(6);_piramida ();
}(model==2)_buffer ();(model==3)_buffer2
();();();
}vvod_M ()
{();(0);();_dannyh ();(WHITE);=plus
(ro);(model==1)
{_kubik ();(6);_piramida ();
}(model==2)_buffer ();(model==3)_buffer2
();();();
}vvod_R ()
{();(0);();_dannyh ();(WHITE);_vector_piramida
(te);(model==1)
{_kubik ();(6);_piramida ();
}(model==2)_buffer ();(model==3)_buffer2
();();();
}vvod_vector ()
{();();(0);(5);(5,0,4);i =
0;x=0;(0,0,"Vvedite koordinaty 1 tochki vectora");
cout<< endl << endl << endl
<<"x=";>> x;_piramida [i] =x;<< endl
<<"y=";>> x;_piramida [i] =x;<< endl
<<"z=";>> x;
zvectw_piramida [i] =x;++;(0,100,"Vvedite
koordinaty 2 tochki vectora");<< endl << endl << endl
<<"x=";>> x;_piramida [i] =x;
cout<< endl <<"y=";>>
x;_piramida [i] =x;<< endl <<"z=";
cin >> x;_piramida [i] =x;();
}
//
________________________________________________________
// -----------------------------------Glavnay
funkciya-----------------------------
void main ()
{int
g=EGA,gmode=EGAHI;(&g,&gmode,"C: \\borlandc\\bgi");= ( (atan
(1) /45.0) *fi);= ( (atan (1) /45.0) *te);= ( (atan (1) /45.0) *30);pr = 0;();:
menu1 ();
switch (getch ())
{'1': vvod (); pr=1; goto m;'2': pr++; menucamera
(); goto m;'3': pr++; vvod_vector (); goto m;'4': pr++; selectmodel (); goto
m;'5': if (pr! =4)
{();(0);(5);(10,0,1);(100,150,"Dlya na4ala
sleduet vvesti dannye!");();m;
}();(0);_kubik ();_piramida ();(0);=150; y1=150;(model==1)
{();(0);();_dannyh ();(WHITE);_kubik
();(6);_piramida ();();();: switch (getch ())
{'d': vvod_D (); goto m2;'a': vvod_A (); goto
m2;'w': vvod_W (); goto m2;'s': vvod_S (); goto m2;'q': vvod_Q (); goto m2;'e':
vvod_E (); goto m2;'r': vvod_R (); goto m2;'o': vvod_O (); goto m2;'p': vvod_P
(); goto m2;'k': vvod_K (); goto m2;'l': vvod_L (); goto m2;'n': vvod_N ();
goto m2;'m': vvod_M (); goto m2;27: goto m;
}();
}(model==2)
{=35; y1=35;();(0);();_dannyh
();(5);();();_buffer ();: switch (getch ())
{'d': vvod_D (); goto m3;'a': vvod_A (); goto
m3;'w': vvod_W (); goto m3;'s': vvod_S (); goto m3;'q': vvod_Q (); goto m3;'e':
vvod_E (); goto m3;'r': vvod_R (); goto m3;'o': vvod_O (); goto m3;'p': vvod_P
(); goto m3;'k': vvod_K (); goto m3;'l': vvod_L (); goto m3;'n': vvod_N ();
goto m3;'m': vvod_M (); goto m3;27: goto m;
}
}(model==3)
{=35; y1=35;();();_dannyh ();(0);(WHITE);_buffer2
();();();: switch (getch ())
{'d': vvod_D (); goto m4;'a': vvod_A (); goto
m4;'w': vvod_W (); goto m4;'s': vvod_S (); goto m4;'q': vvod_Q (); goto m4;'e':
vvod_E (); goto m4;'r': vvod_R (); goto m4;'o': vvod_O (); goto m4;'p': vvod_P
(); goto m4;'k': vvod_K (); goto m4;'l': vvod_L (); goto m4;'n': vvod_N ();
goto m4;'m': vvod_M (); goto m4;27: goto m;
}();
}();m;27: exit (0);: goto m;
}();
}
Приложение 2
Графические результаты работы программы.