Смекни!
smekni.com

Сечение многогранников (стр. 3 из 6)

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


Глава III. Визуализация

3.1 Способы визуализации трехмерного пространства

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

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

3.2 Перекрытие

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

3.3 Освещенность

Освещенность граней вычисляется путем, вычисления угла (синуса угла) между нормальным вектором к грани и осью ортографической проекции.


Глава IV. Создание компьютерного приложения

4.1 Постановка требований к реализуемому проекту

1. Простота использования.

2. Полнота необходимых инструментов и возможностей.

3. Интерактивность.

4. Быстрота работы.

5. Простота создания входного файла.

4.2 Разработка интерфейса программы

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

4.2.1 Окна проекций

В программе используются три окна проекции: вид сверху, вид слева, вид спереди, перспектива. Размер окон проекции изменяется путем перемещения цента разделителя. Также здесь показаны оси координат. Существует возможность включения координатной сетки.


4.2.2 Меню пользователя

Файл

Открыть (загрузка файла многогранника).

Сохранить (сохранение файла).

Выход (выход из программы).

Правка

Сброс (сброс всех измененных параметров).

Вид

Каркас (отображаются ребра многогранника).

Заливка (вывод граней, с расчетом их освещенности).

Обозначить (обозначить вершины многогранника).

Сетка (вывод сетки координат).

Инструменты

Выбрать (позволяет выбирать и перемещать точки задающие сечение).

Переместить (перемещение многогранника).

Повернуть (поворот многогранника).

Масштаб (масштаб окон проекций).

Стирка (позволяет отключать заливку выбранной грани).

Заливка (позволяет включить заливку выбранной грани).

Ограничить (ограничение манипулирования сценой по осям координат).

Цент поворота (изменение центра поворота).

Распространить (изменять координаты точек задающих сечение вместе с координатами многогранника).

Сечение

Построить (построение сечения путем задания трех точек плоскости сечения).

Удалить (удаление сечения).

Вид (настройка вида сечения).

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

Просмотр (окно просмотра сечения).

Настройка

Цвет (вызов диалога изменения цветовой схемы)

4.2.3 Основные методы работы

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

4.2.4 Диалог просмотра сечения

Вывод многоугольника сечения производится с помощью поворота плоскости сечения в положение параллельности плоскости XOY.


Заключение

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

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

Пути дальнейшего развития проекта:

1. Построение нескольких сечений;

2. Возможность загрузки невыпуклых фигур;

3. Подбор задач решаемых с помощью созданного приложения;

4. Разработка методик применения программы в обучении;

5. Создание конструктора пространственных тел;

6. Создание интерактивного инструмента для построения сечений пространственных фигур аксиоматическим методом («Живая стереометрия»);

7. Создание обучающего модуля и методического сопровождения к нему;

8. Применение на практике.

Изучаемая в данной курсовой работе тема, должна быть изучена до конца, так как это может найти целесообразное и удачное применение на практике.


Приложение

Текст программы

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');