Дипломная работа: Разработка программной системы, обеспечивающей отображение и сравнение в трехмерном пространстве исходных данных из двух матричных форм
Пожарная безопасность объекта должна обеспечиваться:
а) системой предотвращения пожара;
б) системой противопожарной защиты;
в) организационно-техническими мероприятиями.
Предотвращение пожара в помещении может быть достигнуто минимальным количеством предметов из горючих материалов, их безопасным расположением, а также отсутствием легковоспламеняющихся материалов.
Противопожарная защита помещения может быть обеспечена применением автоматической установки пожарной сигнализации, наличием средств пожаротушения, применением основных строительных конструкций здания с регламентированными пределами огнестойкости.
Организационно-технические мероприятия должны включать организацию обучения служащих правилам пожарной безопасности.
3.4.3 Рекомендации по обеспечению допустимого уровня шума и вибрации в помещениях
Показатели уровня шумов в рабочих помещениях, где будет осуществляться эксплуатация программы должны соответствовать требованиям ГОСТ 12.1.003-83. Допустимый уровень шума при умственном труде, требующем сосредоточенности, 50дБ[2]).
Для уменьшения шума и вибрации в помещении оборудование, аппараты и приборы должны устанавливаться на специальные фундаменты и амортизирующие прокладки. Если стены и потолки помещения являются источниками шумообразования, они должны быть облицованы звукопоглощающим материалом.
Заключение
Анализ существующего подхода к оперативной оценке поступающей информации выявил необходимость разработки и внедрения дополнительных ПС представления информации.
Анализ ПСПИ, разработанных в настоящее время выявил, функциональный, программно-технический, технологический и экономический факторы, сильно ограничивающие их применение для оценки информации.
На основе вышесказанного, определен альтернативный вариант реализации ПС представления информации – самостоятельная разработка с использованием ИСР Borland Delphi 7.0.
Исходя из практического применения различных вариантов реализации ПСПИ, выбран локальный вариант их разработки в виде программного компонента выполняющего функцию оперативного и достоверного показа информации в графическом виде.
В ходе работы были сформулированы функциональные, технические, информационные и эргономические требования к программным средствам. В соответствии с этими требованиями была разработана ПСПИ. Оценены эксплуатационно-технические характеристики, надежность и качество. Проведено экономическое обоснование внедрения ПС в специализированные учебные центры и воинские части.
Направлениями дальнейших исследований может быть повышение диапазона отображения и обработка более сложных матричных форм.
Список использованной литературы
1. Иваненко А. Ю. Оформление документации на программные средства. – М.: Издательство МГТУ им. Баумана, 2002;
2. Фаронов В. В. Delphi Программирование на языке высокого уровня. – СПБ: «Питер», 2003;
3. ГОСТ 19.101-77 ЕСПД «Виды программ и программных документов».
4. ГОСТ 19.402-78 ЕСПД «Описание программы».
5. ГОСТ 19.701-90 ЕСПД. «Схемы алгоритмов, программ, данных и систем. Условные обозначения и правила выполнения в соответствии с ним».
6. ГОСТ 24.211-82 «Требования к содержанию документа «Описание алгоритма»».
7. Мамиконов А. Г. Модели и методы проектирования информационного обеспечения АСУ. – М.: Статистика, 1978.
8. ГОСТ ЕСКД, ГОСТ ЕСПД, ГОСТ КС и РД АСУ, ГОСТ СТД АСУ.
9. Иваненко А. Ю. Оформление документации на программные средства. – М.: Издательство МГТУ им. Баумана, 2002.
10. Фленов М. Е., DirectX и Delphi. Искусство программирования. – СПб.: БХВ-Петербург, 2006.
11. Краснов М. В., DirectX. Графика в проектах Delphi. – СПб.: БХВ-Петербург, 2005.
12. Архангельский А. Я. Программирование на Borland Delphi 7.0. – М: «Бином», 2004.
13. Актуальные задачи развития Вооруженных сил Российской Федерации // издание «Красная звезда» от 11.10.2003.
14. Аленичева Е. В., Монастырев П. В. Электронный учебник (проблемы создания и оценки качества) // Высшее образование в России, №1, 2001.
15. ISO 9126:1991 Информационная технология. Оценка программного продукта. Характеристики качества и руководство по их применению.
16. ГОСТ Р ИСО/МЭК 9126-93 “Информационные технологии. Оценка программной продукции. Характеристики качества и руководства по их применению”
17. ГОСТ 19.101-77 ЕСПД «Виды программ и программных документов»
18. ГОСТ 19.201-78 ЕСПД. Техническое задание. Требования к содержанию и оформлению.
19. ГОСТ 19.401-78 ЕСПД. «Текст программы. Требования к содержанию и оформлению».
20. ГОСТ 19.402-78 ЕСПД «Описание программы»
21. ГОСТ 19.701-90 ЕСПД. «Схемы алгоритмов, программ, данных и систем. Условные обозначения и правила выполнения в соответствии с ним».
22. ГОСТ 24.211-82 «Требования к содержанию документа «Описание алгоритма»»
23. ГОСТ-28195-95 “Оценка качества программных средств. Общие положения”.
24. ГОСТ 12.1.004-85. ССБТ. Пожарная безопасность.
Приложение А
Алгоритм программы
Приложение Б
Текст программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
ExtCtrls, Menus, OpenGL, Buttons, ExtDlgs, ComCtrls, StdCtrls, Dialogs;
type
TRenderPanel = record
DC:HDC;
HRC:HGLRC;
ps:TPaintStruct;
end;
TMatrix = record
w:Integer; //размерность матрицы
vx:Array of Array of Extended;//массив вершин
nx:Array of Array of Array[1..3] of Extended;//массив нормалей
cx:Array of Array of Array[1..3] of GLfloat;//массив цветов
cc:Array of Array of Array[1..3] of GLfloat;//массив цветов
end;
PMatrix = ^TMatrix;
TMat = class(TForm)
Panel1: TPanel;
OpenPictureDialog1: TOpenPictureDialog;
Panel4: TPanel;
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
Edit2: TEdit;
UpDown1: TUpDown;
UpDown2: TUpDown;
Label3: TLabel;
Edit3: TEdit;
GroupBox2: TGroupBox;
Button2: TButton;
FoDialog: TOpenDialog;
Addons: TGroupBox;
SpeedButton1: TSpeedButton;
Button1: TButton;
Button3: TButton;
LBData: TListBox;
ListBox1: TListBox;
cb_Surface: TCheckBox;
progress: TPanel;
Label4: TLabel;
bar: TProgressBar;
ComboBoxMatrix: TComboBox;
BitBtnSave: TBitBtn;
SaveDialogMain: TSaveDialog;
procedure CalcNormals(x1,y1,z1,x2,y2,z2,x3,y3,z3:Extended; var nx,ny,nz:Extended);
procedure GL(var Matrix:TMatrix); //прорисовка матрицы на экран
procedure Init();
procedure SelPos(var Matrix:TMatrix; xx:Integer;yy:Integer);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
//---------------------------------
function LoadMatrixFromBitmap(filename:string; var Matrix:TMatrix):boolean;
function LoadMatrixFromDtFile(filename:string; var Matrix:TMatrix):boolean;
function MakeAnalysMatrixData(Matrix01,Matrix02:TMatrix; var Matrix03:TMatrix):boolean;
//---------------------------------
procedure bmp1Click(Sender: TObject);
procedure Panel4MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Panel4MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Panel4MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure Edit1Change(Sender: TObject);
procedure Edit2KeyPress(Sender: TObject; var Key: Char);
procedure Edit2Change(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure cb_SurfaceClick(Sender: TObject);
procedure ComboBoxMatrixChange(Sender: TObject);
procedure Edit3Change(Sender: TObject);
procedure BitBtnSaveClick(Sender: TObject);
private
MyPanels: TRenderPanel;
MCurrent: PMatrix;
myMatrix01:TMatrix; //первое изображение
myMatrix02:TMatrix; //второе изображение
myMatrix03:TMatrix; //наложение первого на второе
// w:Integer; //размерность матрицы
// vx:Array of Array of Extended;//массив вершин
// nx:Array of Array of Array[1..3] of Extended;//массив нормалей
// cx:Array of Array of Array[1..3] of GLfloat;//массив цветов
// cc:Array of Array of Array[1..3] of GLfloat;//массив цветов
mess:string;
bmp:TBitmap;
procedure InitOpenGL;
procedure SetDCPixelFormat(DC:HDC);
end;
var
yess: Boolean;
Mat: TMat;
MouseButton : Integer;
Xcoord, Ycoord, Zcoord : Integer;
YRot, XRot : integer;
Depth : integer;
LastCCX,LastCCY : Integer;
//-----------------------------------------------------------------------------
implementation
//-----------------------------------------------------------------------------
uses UAbout;
{$R *.dfm}
procedure TMat.InitOpenGL;
begin
MyPanels.DC:=GetDC(Panel4.Handle);
SetDCPixelFormat(MyPanels.DC);
MyPanels.HRC:=wglCreateContext(MyPanels.DC);
wglMakeCurrent(MyPanels.DC,MyPanels.HRC);
glEnable(GL_DEPTH_TEST);
glClearColor(0,0,0,1);
end;
procedure TMat.SetDCPixelFormat(DC:HDC);
var
pfd:TPixelFormatDescriptor;
nPixelFormat:Integer;
begin
FillChar(pfd,SizeOf(pfd),0);
pfd.dwFlags:=PFD_DOUBLEBUFFER or
PFD_DRAW_TO_WINDOW or
PFD_SUPPORT_OPENGL;
nPixelFormat:=ChoosePixelFormat(DC,@pfd);
SetPixelFormat(DC,nPixelFormat,@pfd);
end;
procedure TMat.FormCreate(Sender: TObject);
begin
MouseButton :=0;
bmp:=TBitmap.Create;
InitOpenGL;
Left:=0;
Top:=0;
LastCCX:=0;
LastCCY:=0;
self.MCurrent := @self.myMatrix01;
self.ComboBoxMatrix.ItemIndex := 0;
// Width:=Screen.Width;
// Height:=Screen.Height;
// WindowState:=wsMaximized;
// Timer1.Enabled:=True;
end;
procedure TMat.FormDestroy(Sender: TObject);
begin
wglMakeCurrent(0,0);
bmp.Destroy;
Finalize(myMatrix01.vx);
Finalize(myMatrix01.cx);
Finalize(myMatrix01.cc);
Finalize(myMatrix01.nx);
Finalize(myMatrix02.vx);
Finalize(myMatrix02.cx);
Finalize(myMatrix02.cc);
Finalize(myMatrix02.nx);
Finalize(myMatrix03.vx);
Finalize(myMatrix03.cx);
Finalize(myMatrix03.cc);
Finalize(myMatrix03.nx);
wglDeleteContext(MyPanels.HRC);
ReleaseDC(MyPanels.DC,Panel4.Handle);
DeleteDC(MyPanels.DC);
end;
procedure TMat.GL(var Matrix:TMatrix);
var
j,k,dw,dv : Integer;
ps : TPaintStruct;
av : Integer;
stroka:string;
begin
av:=0;
dw:=0;
dv:=0;
if (Yess=true) then
begin
GroupBox1.Enabled:=True;
dw:=Matrix.w div 2;
dv:=25 div 2;
BeginPaint(Panel4.Handle,ps);
wglMakeCurrent(MyPanels.DC,MyPanels.HRC);
glViewport(0,0,Panel4.Width,Panel4.Height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity;
gluPerspective(30,Panel4.Width/Panel4.Height,1,10000);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity;
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
glLoadIdentity;
glTranslatef(0,0,-Zcoord);
glRotatef(Xrot,1,0,0);
glRotatef(Yrot,0,1,0);
try
if (Matrix.w>5) then
If cb_Surface.Checked then av:=2 else av:=1;
case av of
1 : begin
glDisable(GL_LIGHTING);
glDisable(GL_LIGHT0);
glColor3f(1,1,1);
glBegin(GL_LINES);
for j:=0 to Matrix.w-2 do
for k:=0 to Matrix.w-2 do
begin
glColor3f(Matrix.cx[j,k,1],Matrix.cx[j,k,2],Matrix.cx[j,k,3]);
glVertex3f(j-dw,Matrix.vx[j,k]-dv,k-dw);
glColor3f(Matrix.cx[j,k+1,1],Matrix.cx[j,k+1,2],Matrix.cx[j,k+1,3]);
glVertex3f(j-dw,Matrix.vx[j,k+1]-dv,k+1-dw);
end;
for j:=0 to Matrix.w-2 do
for k:=0 to Matrix.w-2 do
begin
glColor3f(Matrix.cx[j,k,1],Matrix.cx[j,k,2],Matrix.cx[j,k,3]);
glVertex3f(j-dw,Matrix.vx[j,k]-dv,k-dw);
glColor3f(Matrix.cx[j+1,k,1],Matrix.cx[j+1,k,2],Matrix.cx[j+1,k,3]);
glVertex3f(j+1-dw,Matrix.vx[j+1,k]-dv,k-dw);
end;
glEnd;
end;
2 : begin
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_COLOR_MATERIAL);
glColor3f(1,1,1);
glBegin(GL_TRIANGLES);
for j:=0 to Matrix.w-2 do
for k:=0 to Matrix.w-2 do
begin
glColor3f(Matrix.cx[j,k,1],Matrix.cx[j,k,2],Matrix.cx[j,k,3]);
glNormal3f(Matrix.nx[j,k,1],Matrix.nx[j,k,2],Matrix.nx[j,k,3]);
glVertex3f(j-dw,Matrix.vx[j,k]-dv,k-dw);
glColor3f(Matrix.cx[j+1,k,1],Matrix.cx[j+1,k,2],Matrix.cx[j+1,k,3]);
glNormal3f(Matrix.nx[j+1,k,1],Matrix.nx[j+1,k,2],Matrix.nx[j+1,k,3]);
glVertex3f(j-dw+1,Matrix.vx[j+1,k]-dv,k-dw);
glColor3f(Matrix.cx[j+1,k+1,1],Matrix.cx[j+1,k+1,2],Matrix.cx[j+1,k+1,3]);
glNormal3f(Matrix.nx[j+1,k+1,1],Matrix.nx[j+1,k+1,2],Matrix.nx[j+1,k+1,3]);
glVertex3f(j-dw+1,Matrix.vx[j+1,k+1]-dv,k-dw+1);
end;
for j:=0 to Matrix.w-2 do
for k:=0 to Matrix.w-2 do
begin
glColor3f(Matrix.cx[j,k,1],Matrix.cx[j,k,2],Matrix.cx[j,k,3]);
glNormal3f(Matrix.nx[j,k,1],Matrix.nx[j,k,2],Matrix.nx[j,k,3]);
glVertex3f(j-dw,Matrix.vx[j,k]-dv,k-dw);
glColor3f(Matrix.cx[j,k+1,1],Matrix.cx[j,k+1,2],Matrix.cx[j,k+1,3]);
glNormal3f(Matrix.nx[j,k+1,1],Matrix.nx[j,k+1,2],Matrix.nx[j,k+1,3]);
glVertex3f(j-dw,Matrix.vx[j,k+1]-dv,k-dw+1);
glColor3f(Matrix.cx[j+1,k+1,1],Matrix.cx[j+1,k+1,2],Matrix.cx[j+1,k+1,3]);
glNormal3f(Matrix.nx[j+1,k+1,1],Matrix.nx[j+1,k+1,2],Matrix.nx[j+1,k+1,3]);
glVertex3f(j-dw+1,Matrix.vx[j+1,k+1]-dv,k-dw+1);
end;
glEnd;
glDisable(GL_COLOR_MATERIAL);
end;
end;
except
Matrix.w:=0;
MessageBox(Handle,'Ошибка при прорисовке изображения',
'Ошибка',MB_OK or MB_ICONERROR);
end;
EndPaint(Panel4.Handle,ps);
glRotatef(120,1.0,0.0,0.0); // Rotate on x
glRotatef(120,0.0,1.0,0.0); // Rotate on y
glRotatef(120,0.0,0.0,1.0); // Rotate on z
SwapBuffers(MyPanels.DC);
//временная защита кода
// stroka := 'Это демонстрационная версия!!!';
// TextOut(myPanels.DC,300,200,PChar(stroka),Length(stroka));
// stroka := 'Программа сделана на заказ!!!';
// TextOut(myPanels.DC,300,220,PChar(stroka),Length(stroka));
// stroka := 'лоалофв аофоа длфыв а лдо';
// TextOut(myPanels.DC,300,240,PChar(stroka),Length(stroka));
end;
end;
procedure TMat.SelPos(var Matrix:TMatrix; xx:Integer;yy:Integer);
var
fx:Integer;
s:string;
begin
if (Matrix.w>0) then
begin
for fx := 0 to Matrix.w-1 do
begin
Matrix.cx[LastCCx,fx,1]:=Matrix.cc[LastCCx,fx,1];
Matrix.cx[LastCCx,fx,2]:=Matrix.cc[LastCCx,fx,2];
Matrix.cx[LastCCx,fx,3]:=Matrix.cc[LastCCx,fx,3];
Matrix.cx[fx,LastCCy,1]:=Matrix.cc[fx,LastCCy,1];
Matrix.cx[fx,LastCCy,2]:=Matrix.cc[fx,LastCCy,2];
Matrix.cx[fx,LastCCy,3]:=Matrix.cc[fx,LastCCy,3];
Matrix.cx[xx,fx,1]:=1;
Matrix.cx[xx,fx,2]:=1;
Matrix.cx[xx,fx,3]:=1;
Matrix.cx[fx,yy,1]:=1;
Matrix.cx[fx,yy,2]:=1;
Matrix.cx[fx,yy,3]:=1;
end;
LastCCx:=xx;
LastCCy:=yy;
s:=FormatFloat('0.00', Matrix.vx[LastCCx,LastCCy]);
// if Matrix.vx[LastCCx,LastCCy] < 0 then s:= '-'+s;
// Edit3.Text:=FloatToStr(Round(Matrix.vx[LastCCx,LastCCy]*100)/100);
Edit3.Text := s;
end; трехмерный изображение матричный графический