Скачать 387.89 Kb.
|
Глава III. Визуализация 3.1 Способы визуализации трехмерного пространства Для визуализации используются два вида проекций: параллельные (аксонометрические) (на рисунке слева) и центральные (перспективные) (на рисунке справа). При построении аксонометрической проекции пространственного тела его отдельные точки сносятся на плоскость проекции параллельным пучком лучей, а при построении центральной проекции – пучком лучей исходящих из одной точки, соответствующей положению глаз наблюдателя. Частным случаем аксонометрической проекции является проекция ортографическая, при построении которой плоскость проекции выравнивается параллельно одной из координатных плоскостей. 3.2 Перекрытие Под перекрытием понимается тот факт, что невозможно одновременно видеть все грани многогранника и какие - то грани обязательно окажутся невидимыми. Проблема состоит в том, как узнать какие грани видны, а какие нет. В проекте мы рассматриваем только выпуклые многогранники, поэтому для реализации перекрытия используется тот факт, что нормальный вектор к каждой грани направлен извне. Т.е. если использовать ортографическую проекцию, то тот факт, что координатная составляющая (оси проекции) нормального вектора положительна, то грань видима, если отрицательна, то грань перекрыта. 3.3 Освещенность Освещенность граней вычисляется путем, вычисления угла (синуса угла) между нормальным вектором к грани и осью ортографической проекции. Глава IV. Создание компьютерного приложения 4.1 Постановка требований к реализуемому проекту
4.2 Разработка интерфейса программы При разработке интерфейса программы уклон делался на стандартизацию меню и удобство использования. Также необходима функция встроенных подсказок (всплывающих и в строке состояния). 4.2.1 Окна проекций В программе используются три окна проекции: вид сверху, вид слева, вид спереди, перспектива. Размер окон проекции изменяется путем перемещения цента разделителя. Также здесь показаны оси координат. Существует возможность включения координатной сетки. 4.2.2 Меню пользователя Файл Открыть (загрузка файла многогранника). Сохранить (сохранение файла). Выход (выход из программы). Правка Сброс (сброс всех измененных параметров). Вид Каркас (отображаются ребра многогранника). Заливка (вывод граней, с расчетом их освещенности). Обозначить (обозначить вершины многогранника). Сетка (вывод сетки координат). Инструменты Выбрать (позволяет выбирать и перемещать точки задающие сечение). Переместить (перемещение многогранника). Повернуть (поворот многогранника). Масштаб (масштаб окон проекций). Стирка (позволяет отключать заливку выбранной грани). Заливка (позволяет включить заливку выбранной грани). Ограничить (ограничение манипулирования сценой по осям координат). Цент поворота (изменение центра поворота). Распространить (изменять координаты точек задающих сечение вместе с координатами многогранника). Сечение Построить (построение сечения путем задания трех точек плоскости сечения). Удалить (удаление сечения). Вид (настройка вида сечения). Привязать (привязка выбранной точки сечения к элементам многогранника). Просмотр (окно просмотра сечения). Настройка Цвет (вызов диалога изменения цветовой схемы) 4.2.3 Основные методы работы Основной метод работы заключается в выборе инструмента, затем наведении курсора на объект действия и манипуляция с помощью нажатия клавиши мыши. 4.2.4 Диалог просмотра сечения Вывод многоугольника сечения производится с помощью поворота плоскости сечения в положение параллельности плоскости XOY. Заключение В заключении данного проекта рассмотрим возможные пути дальнейшего развития проекта и его использования, а также оценку выполнения поставленной задачи и отметим полученные результаты. Поставленная перед началом работы цель: создание инструмента, позволяющего наглядно и интерактивно изучать пространственные тела и их сечения – реализована. Создано приложение, которое позволяет загружать пространственные тела и манипулировать ими – это уже можно использовать при начальном изучении пространственных тел. Далее в программе реализована функция построения сечения пространственных фигур плоскостью, которая задается тремя точками, координаты которых можно изменять. Минусом программы является возможность изучения только выпуклых фигур и невозможность построения более одного сечения. Пути дальнейшего развития проекта:
Изучаемая в данной курсовой работе тема, должна быть изучена до конца, так как это может найти целесообразное и удачное применение на практике. Приложение Текст программы unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, Menus, ExtCtrls, jpeg, ToolWin, StdCtrls, ImgList; type Point=record x,y,z:real end; {координаты точки} Vector=record x,y,z:real end; {координаты ветора} type TForm1 = class(TForm) StatusBar1: TStatusBar; StatusBar2: TStatusBar; MainMenu1: TMainMenu; N1: TMenuItem; N2: TMenuItem; N3: TMenuItem; N4: TMenuItem; N5: TMenuItem; N6: TMenuItem; N20: TMenuItem; N21: TMenuItem; N22: TMenuItem; N18: TMenuItem; N25: TMenuItem; N30: TMenuItem; N31: TMenuItem; N32: TMenuItem; N33: TMenuItem; OD1: TOpenDialog; SD1: TSaveDialog; PTop: TPanel; ITop: TImage; PFront: TPanel; PLeft: TPanel; PPerspective: TPanel; IFront: TImage; ILeft: TImage; IPerspective: TImage; GroupBox1: TGroupBox; Vertikal: TPanel; Horizontal: TPanel; Panel3: TPanel; Centr: TPanel; ImList1: TImageList; N23: TMenuItem; ToolBar1: TToolBar; ToolButton1: TToolButton; ToolButton2: TToolButton; ToolButton3: TToolButton; ToolButton4: TToolButton; ToolButton5: TToolButton; ToolButton6: TToolButton; ToolButton7: TToolButton; ToolButton8: TToolButton; ToolButton9: TToolButton; ToolButton10: TToolButton; ToolButton14: TToolButton; ToolButton19: TToolButton; ToolButton11: TToolButton; ToolButton12: TToolButton; Label1: TLabel; ToolButton13: TToolButton; N26: TMenuItem; N27: TMenuItem; N28: TMenuItem; N29: TMenuItem; N34: TMenuItem; N35: TMenuItem; N36: TMenuItem; N37: TMenuItem; N38: TMenuItem; N39: TMenuItem; N40: TMenuItem; N41: TMenuItem; N42: TMenuItem; N43: TMenuItem; N45: TMenuItem; N46: TMenuItem; N47: TMenuItem; N51: TMenuItem; IntWiew: TMenuItem; N7: TMenuItem; N8: TMenuItem; N9: TMenuItem; N10: TMenuItem; N11: TMenuItem; N12: TMenuItem; N13: TMenuItem; N14: TMenuItem; N15: TMenuItem; N16: TMenuItem; N17: TMenuItem; N24: TMenuItem; N19: TMenuItem; Mag1: TMenuItem; Mag2: TMenuItem; Mag3: TMenuItem; procedure N5Click(Sender: TObject); procedure CentrMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure CentrMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FormCreate(Sender: TObject); procedure FormResize(Sender: TObject); procedure N2Click(Sender: TObject); procedure ITopClick(Sender: TObject); procedure IFrontClick(Sender: TObject); procedure ILeftClick(Sender: TObject); procedure ITopMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure IFrontMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure ILeftMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure N3Click(Sender: TObject); procedure N33Click(Sender: TObject); procedure ToolButton1Click(Sender: TObject); procedure ToolButton2Click(Sender: TObject); procedure FormPaint(Sender: TObject); procedure ITopMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure IFrontMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure ILeftMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure N25Click(Sender: TObject); procedure N21Click(Sender: TObject); procedure N22Click(Sender: TObject); procedure N8Click(Sender: TObject); procedure N16Click(Sender: TObject); procedure IntWiewClick(Sender: TObject); procedure N27Click(Sender: TObject); procedure N28Click(Sender: TObject); procedure N29Click(Sender: TObject); procedure N34Click(Sender: TObject); procedure N36Click(Sender: TObject); procedure N37Click(Sender: TObject); procedure N9Click(Sender: TObject); procedure N10Click(Sender: TObject); procedure IPerspectiveClick(Sender: TObject); procedure N41Click(Sender: TObject); procedure N14Click(Sender: TObject); procedure N18Click(Sender: TObject); procedure ToolButton4Click(Sender: TObject); procedure ToolButton5Click(Sender: TObject); procedure ToolButton6Click(Sender: TObject); procedure ToolButton7Click(Sender: TObject); procedure ToolButton8Click(Sender: TObject); procedure ToolButton9Click(Sender: TObject); procedure ToolButton12Click(Sender: TObject); procedure ToolButton11Click(Sender: TObject); procedure ToolButton19Click(Sender: TObject); procedure ToolButton13Click(Sender: TObject); procedure N24Click(Sender: TObject); procedure N19Click(Sender: TObject); Function Normal (A,B,C:Point):Vector; procedure Mag1Click(Sender: TObject); procedure Mag2Click(Sender: TObject); procedure Mag3Click(Sender: TObject); private { Private declarations } Procedure DrawGrane; public { Public declarations } end; const Gran=10000;{Максимум ганей} Pointer=10000;{Максимум вершин} Lok=0.00001;{Погрешность сечения} SizeT=5;{Размер точек сечения} Sumbol='A';{Обозначение точек} type TView=array [1..gran]of record Visible:boolean;{Флаг активного окна} Paint:boolean; BrushGr:boolean;{Флаг заливки грани} PenRb:boolean;{Флаг отрисовки ребер} Intersection:boolean;{Флаг наличия сечения} ColorGr,ColorRb:TColor{Цвет: грани,ребра} end; TMainVar=record Cx,Cy:integer; Mash:real;Net:boolean; end; var Form1: TForm1; V:array[1..pointer]of Point;{координаты вершин} E:array[1..gran,0..pointer]of integer;{грани [номер грани, номер вершины]} Scene:array[1..4]of record G:TView; M:TMainVar; Active:boolean; end; M,N:word;{количество граней, количество вершин} X0,Y0,Num:integer;{координаты щелчка мыши} ActivColor,ColorEder,ColorUnEder,ColorRebro,ColorIntersection,ColorPointIntersection,ColorNet:TColor;{Цвет: активного окна} InterPoint:array[1..3]of Point; Count:byte; kl:integer; A,B,C,D,P1,P2,P3:real; PanelWindow:array[1..4]of TPanel; WindowProection:array[1..4]of TImage; NameWindows:array[1..4]of string=('Вид сверху','Вид спереди','Вид слева','Перспектива');{Название окон} OsiX:array[1..4]of string=('x','x','y','x'); OsiY:array[1..4]of string=('z','y','x','z'); OsiZ:array[1..4]of string=('y','z','z','y'); Magnit:array[1..3]of TMenuItem; MagPoint:array[1..3,1..2]of Point; First:array[1..3]of boolean; MPI:boolean; implementation uses Unit2,Unit3; //Перевод вещественных координат в экранные Function Ser(win:byte; T:Point; Main:TMainVar):TPoint; var CopySer:Tpoint; begin case win of 1: begin CopySer.X:=round(Main.Cx+(T.x*Main.Mash)); CopySer.Y:=round(Main.Cy-(T.y*Main.Mash)) end; 2: begin CopySer.X:=round(Main.Cx+(T.x*Main.Mash)); CopySer.Y:=round(Main.Cy-(T.z*Main.Mash)) end; 3: begin CopySer.X:=round(Main.Cx+(T.y*Main.Mash)); CopySer.Y:=round(Main.Cy-(T.z*Main.Mash)) end; 4: begin CopySer.X:=round(Main.Cx+(T.x*Main.Mash)); CopySer.Y:=round(Main.Cy-(T.y*Main.Mash)) end; end; Ser:=CopySer end; Function UnSer(win:byte; X,Y:integer;Tx,Ty,Tz:real; Main:TMainVar):Point; var CopyUnSer:Point; begin case win of 1: begin CopyUnSer.x:=(X-Main.Cx)/Main.Mash; CopyUnSer.y:=(Main.Cy-Y)/Main.Mash; CopyUnSer.z:=Tz end; 2: begin CopyUnSer.x:=(X-Main.Cx)/Main.Mash; CopyUnSer.y:=Ty; CopyUnSer.z:=(Main.Cy-Y)/Main.Mash end; 3: begin CopyUnSer.x:=Tx; CopyUnSer.y:=(X-Main.Cx)/Main.Mash; CopyUnSer.z:=(Main.Cy-Y)/Main.Mash end; end; UnSer:=CopyUnSer end; Procedure TForm1.DrawGrane; Procedure GranBrush(Main:TMainVar; win:byte; i:integer; P:TPenStyle; var Can:TImage); var j:integer; w:array of TPoint; begin SetLength(w,E[i,0]); for j:=1 to E[i,0] do w[j-1]:=Ser(win,V[E[i,j]],Main); if Scene[win].G[i].BrushGr and Scene[win].G[i].Paint then begin Can.Canvas.Pen.Style:=psSolid; Can.Canvas.Pen.Color:=Scene[win].G[i].ColorGr; Can.Canvas.Brush.Color:=Scene[win].G[i].ColorGr; Can.Canvas.Polygon(w); end; if Scene[win].G[i].PenRb then begin Can.Canvas.Pen.Style:=P; Can.Canvas.Pen.Color:=Scene[win].G[i].ColorRb; Can.Canvas.Brush.Style:=bsClear; Can.Canvas.MoveTo(w[0].X,w[0].Y); for j:=1 to E[i,0]-1 do Can.Canvas.LineTo(w[j].X,w[j].Y); Can.Canvas.LineTo(w[0].X,w[0].Y); end; end; //* Оси координат Procedure LineOs(i:byte;var Can:TImage); var j,k,a,b:integer; begin Can.Canvas.Pen.Color:=ColorNet; a:=round(Can.Width/Scene[i].M.Mash) div 2; b:=round(Can.Height/Scene[i].M.Mash) div 2; for j:=-a to a do begin Can.Canvas.MoveTo(Scene[i].M.Cx+round(j*Scene[i].M.Mash),0); Can.Canvas.LineTo(Scene[i].M.Cx+round(j*Scene[i].M.Mash),Can.Height); end; for j:=-b to b do begin Can.Canvas.MoveTo(0,Scene[i].M.Cy+round(j*Scene[i].M.Mash)); Can.Canvas.LineTo(Can.Width,Scene[i].M.Cy+round(j*Scene[i].M.Mash)); end; Can.Canvas.Pen.Color:=clBlack; |
Урок по теме: «Правильные многогранники» Цель урока: дать понятия правильного многогранника, полуправильных и звездчатых многогранников, рассмотреть свойства многогранников,... | «Правильные многогранники» Ввести определения правильного многогранника. Рассмотреть свойства правильных многогранников. Познакомить учащихся с историей возникновения... | ||
Урок «Золотое сечение». Тема: Золотое сечение ... | Курсовая работа на тему : Формирование рынка ценных бумаг в Украине Курсовая работа содержит 38 листов, 2 рисунка, 2 таблицы и было использовано 11 источников | ||
Курсовая работа Курсовая работа оформляется в виде электронного файла и прикрепляется к своей странице в системе мониторинга нир. Распечатывать работу... | Курсовая работа по дисциплине Электромагнитная совместимость систем... Курсовая работа состоит из 20 с, в которых содержаться: 3 рисунка, 3 таблицы, 6 формул и 4 ссылки на литературу | ||
Курсовая работа по дисциплине «Предпринимательское право» Курсовая работа имеет целью систематизацию, закрепление и расширение теоретических знаний, углубленное изучение и решение студентом... | Курсовой работы. Составитель: доцент Корляков А. С. Екатеринбург... Курсовая работа самостоятельная работа студента, выполняемая в соответствии с типовой программой учебного процесса по подготовке... | ||
Рекомендации к оформлению курсовой и дипломной работы по истории искусства. Курсовая работа Курсовая работа задание, которое выполняется студентами в определённый срок и по определённым требованиям. Защита курсовых работ... | Курсовая работа является обязательным видом итогового контроля по... Курсовая работа – это первый этап в самостоятельном теоретическом осмыслении материала, накопленного в ходе обучения в университете,... | ||
Курсовая работа на тему «Открытый урок» Данная курсовая работа выполнена для того, чтобы учителя русского языка и литературы могли использовать разработанные мною уроки... | Курсовая работа учебно-методическое пособие для студентов, обучающихся... Курсовая работа: Учебно-методическое пособие / Автор составитель Е. М. Крупеня. М.: 30 с | ||
Курсовая работа учебно-методическое пособие для студентов, обучающихся... Курсовая работа: Учебно-методическое пособие / Автор составитель Е. М. Крупеня. М.: 30 с | Курсовая работа по информатике тема работы: Выбор тормоза механизма передвижения башенного крана | ||
Методические указания к написанию курсовых работ курсовая работа Курсовая работа является важнейшим элементом самостоятельной работы студентов. Основной целью курсовой работы является создание и... | Курсовая работа Разработка проекта аис на примере муз «Городская больница» Курсовая работа является одним из видов учебных занятий и выполняется в соответствии с учебным планом специальности. При написании... |