Расчет годового экономического эффекта 
";


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Расчет годового экономического эффекта



 

Годовой экономический эффект Эг определяется как разница затрат между базовым и оцениваемым вариантами решения задачи.

Под базовым вариантом будем понимать оценку оперативной информации традиционным способом.

Под оцениваемым вариантом будем понимать затраты, связанные с автоматизацией данной задачи.

Годовой экономический эффект рассчитывается по формуле:

 

Эг=Зб-Зоц (3.2)

 

где:

Зб - затраты по базовому варианту;

Зоц - затраты по оцениваемому варианту.

В общем случае затраты складываются из следующих компонентов:

Зрб - затраты ручного труда, связанные с работой ЛБР по оценке поступающих данных с использованием традиционного подхода;

Зр оц - затраты, связанные с частичным использованием традиционного подхода при автоматизированном решении задачи;

Зтек оц - текущие затраты, связанные с эксплуатацией задачи на ЭВМ, которые связаны с решением задачи на ВТ (заработная плата должностных лиц, обслуживающих компьютеры, электроэнергия, амортизация);

Зк оц - затраты на приобретение компьютерной техники, покупка программных продуктов для автоматизации задачи и обучение сотрудников.

С учетом вышеизложенного, формула для расчета годового экономического эффекта приобретает вид:

 

 (3.3)

 

Здесь:

 

 (3.4)

 

где:

Тр - трудоемкость одноразового решения задачи вручную;

кр - периодичность решения задачи в течение года;

tr - среднечасовая тарифная ставка должностного лица;

n - коэффициент, учитывающий премии и доклады;

R - коэффициент отчисления от фонда оплаты труда;

Ен - нормативный коэффициент эффективности капитальных затрат, принимается равным 0.15.

 

Тр=0.32 ч; кр = 500 опер.; tr = 107 руб.; n = 1,4; R =1,36.

 (3.5)


где:

Титр - трудоемкость одноразового решения задачи автоматизировано.

 

 

 (3.6)

 

где:

Тпр - продолжительность разработки программы в мес;

кл - количество человек, участвующих в разработке;

Fм - месячный фонд времени работы;

tr - среднечасовая тарифная ставка разработчика.

Тпр=1 мес.; кл = 1 чел.; Fм = 80 час. (при норм. усл.); tr = 100 руб.;

 

 

 (3.7)

 

где:

Тм - время машинной реализации задачи;

Сэвм - стоимость ЭВМ, программных продуктов и обучения

должностных лиц;

Fэвм - действительный фонд времени ЭВМ в течение года.

 

Тм=0.015 час; Сэвм=15000 руб.; Fэвм=2880 час;

Зк оц=(0.015 500 15000)/2880 ≈ 39 руб.

 (3.8)

 

где:

Зитр - заработная плата должностных лиц, обслуживающих

ЭВМ;

А - амортизация (A=0.12 Сэвм=1800 руб.);

Зэл - затраты на электроэнергию.

 

 (3.9)

 

где:

Fгод - годовой фонд заработной платы должностных лиц, обслуживающих ЭВМ;

 

Зитр=(216000/2880) 0.015 500 1.4 1.36 =1071 руб.

 (3.10)

 

где:

Кис - коэффициент использования энергоустановок по

мощности;

СУМэвм - суммарная установленная мощность ЭВМ;

Цэл - стоимость одного кВт/ч энергии.

 

Кис=0.9; СУМэвм=100; Цэл=2.5 руб;

Зэл=0.9 100 0.015 500 2.5=1688 руб;

Зтек оц=1071+1800+1688=4559 руб;

 

Основными затратами по автоматизации будут:

а) обучение должностных лиц обеспечивающих работу ЭВМ;

б) обслуживание компьютерной техники.

Затраты по базовому варианту:

Зрб=32600 руб.;

Затраты по оцениваемому варианту:

Зр оц = 1530 руб.

Зтек оц=4559 руб.;

Зк оц=39 руб.

Зпр оц =15232 руб.

Тогда годовой экономический эффект будет:

 

Эг=(Зрб-Зр оц-Зтек оц)-Ен (Зк оц+Зпр оц)=(32600-1530-4559)-0.15 (39+15232)=26511-2291=24220 руб.

 

Расчет годовой экономии.

 

 (3.11)

 

Расчет расчетного коэффициента эффективности капиталовложений.

 

 (3.12)

 

Внедрение КИТ является эффективным если Ер>Ен, т. е. расчетный коэффициент эффективности больше нормативного.

Расчет срока окупаемости капиталовложений.

 

 (3.13)

 

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


Рекомендации по обеспечению безопасной жизнедеятельности при работе с ПСПИ

 

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

 

Рекомендации по обеспечению электробезопасности

Источником питающего напряжения ПЭВМ должна быть сеть переменного тока с напряжением 220 В, на которую распространяется ГОСТ 25861-83.

Для предупреждения поражений электрическим током необходимо:

а) чётко и в полном объёме выполнять правила производства работ и правила технической эксплуатации;

б) исключить возможность доступа оператора к частям оборудования, работающим под опасным напряжением, неизолированным частям, предназначенным для работы при малом напряжении и не подключенным к защитному заземлению;

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

г)  подводить электропитание к ПЭВМ от розетки здания при помощи специальной вилки с заземляющим контактом;

д) защитить от перегрузок по току, рассчитывая на мощность, потребляемую от сети; а также защитить от короткого замыкания оборудование, встроенное в сеть здания;

е)  надёжно подключить к заземляющим зажимам металлические части, доступные для оператора, которые в результате повреждения изоляции могут оказаться под опасным напряжением;

ж) проверить, что защитный заземляющий проводник не имеет выключателей и предохранителей и надёжно изолирован.

 

Рекомендации по обеспечению пожарной безопасности

Пожарная безопасность помещений, имеющих электрические сети, регламентируется ГОСТ 12.1.033-81, ГОСТ 12.1.004-85. Работа оператора ЭВМ должна вестись в помещении, соответствующем категории Д. Огнестойкость здания должна соответствовать СНиП 2.01.02-85.

В конструкции дисплеев должны использоваться специальные разъемы, уменьшающие переходное сопротивление, и, соответственно, нагрев. ЭВМ нельзя располагать вблизи источников тепла или термоизлучателей, на экраны дисплеев не должны падать прямые солнечные лучи. Устанавливать ЭВМ необходимо так, чтобы задняя и боковые стенки отстояли не менее чем на 0.2 м от других предметов. Для соблюдения теплового режима в корпусе ЭВМ должны быть предусмотрены вентиляционные отверстия и охлаждающий вентилятор. Внутренний монтаж должен быть выполнен проводом с повышенной теплостойкостью.

Пожарная безопасность объекта должна обеспечиваться:

а) системой предотвращения пожара;

б) системой противопожарной защиты;

в) организационно-техническими мероприятиями.

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

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

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

 

Рекомендации по обеспечению допустимого уровня шума и вибрации в помещениях

Показатели уровня шумов в рабочих помещениях, где будет осуществляться эксплуатация программы должны соответствовать требованиям ГОСТ 12.1.003-83. Допустимый уровень шума при умственном труде, требующем сосредоточенности, 50дБ).

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


Заключение

 

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

Анализ ПСПИ, разработанных в настоящее время выявил, функциональный, программно-технический, технологический и экономический факторы, сильно ограничивающие их применение для оценки информации.

На основе вышесказанного, определен альтернативный вариант реализации ПС представления информации - самостоятельная разработка с использованием ИСР 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. ГОСТ ЕСКД, ГОСТ ЕСПД, ГОСТ КС и РД АСУ, ГОСТ СТД АСУ.

.   Иваненко А. Ю. Оформление документации на программные средства. - М.: Издательство МГТУ им. Баумана, 2002.

.   Фленов М. Е., DirectX и Delphi. Искусство программирования. - СПб.: БХВ-Петербург, 2006.

.   Краснов М. В., DirectX. Графика в проектах Delphi. - СПб.: БХВ-Петербург, 2005.

.   Архангельский А. Я. Программирование на Borland Delphi 7.0. - М: «Бином», 2004.

.   Актуальные задачи развития Вооруженных сил Российской Федерации // издание «Красная звезда» от 11.10.2003.

.   Аленичева Е. В., Монастырев П. В. Электронный учебник (проблемы создания и оценки качества) // Высшее образование в России, №1, 2001.

15. ISO 9126:1991 Информационная технология. Оценка программного продукта. Характеристики качества и руководство по их применению.

16. ГОСТ Р ИСО/МЭК 9126-93 “Информационные технологии. Оценка программной продукции. Характеристики качества и руководства по их применению”

.   ГОСТ 19.101-77 ЕСПД «Виды программ и программных документов»

.   ГОСТ 19.201-78 ЕСПД. Техническое задание. Требования к содержанию и оформлению.

19. ГОСТ 19.401-78 ЕСПД. «Текст программы. Требования к содержанию и оформлению».

20. ГОСТ 19.402-78 ЕСПД «Описание программы»

.   ГОСТ 19.701-90 ЕСПД. «Схемы алгоритмов, программ, данных и систем. Условные обозначения и правила выполнения в соответствии с ним».

22. ГОСТ 24.211-82 «Требования к содержанию документа «Описание алгоритма»»

23. ГОСТ-28195-95 “Оценка качества программных средств. Общие положения”.

.   ГОСТ 12.1.004-85. ССБТ. Пожарная безопасность.


Приложение А

Алгоритм программы


Приложение Б

 

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

 

unit Unit1;

interface, Messages, SysUtils, Classes, Graphics, Controls, Forms,, Menus, OpenGL, Buttons, ExtDlgs, ComCtrls, StdCtrls, Dialogs;= record:HDC;:HGLRC;:TPaintStruct;;= record:Integer; //размерность матрицы:Array of Array of Extended;//массив вершин:Array of Array of Array[1..3] of Extended;//массив нормалей:Array of Array of Array[1..3] of GLfloat;//массив цветов:Array of Array of Array[1..3] of GLfloat;//массив цветов;= ^TMatrix;= class(TForm): TPanel;: TOpenPictureDialog;: TPanel;: TGroupBox;: TLabel;: TLabel;: TEdit;: TEdit;: TUpDown;: TUpDown;: TLabel;: TEdit;: TGroupBox;: TButton;: TOpenDialog;: TGroupBox;: TSpeedButton;: TButton;: TButton;: TListBox;: TListBox;_Surface: TCheckBox;: TPanel;: TLabel;: TProgressBar;: TComboBox;: TBitBtn;: TSaveDialog;CalcNormals(x1,y1,z1,x2,y2,z2,x3,y3,z3:Extended; var nx,ny,nz:Extended);GL(var Matrix:TMatrix); //прорисовка матрицы на экранInit();SelPos(var Matrix:TMatrix; xx:Integer;yy:Integer);FormCreate(Sender: TObject);FormDestroy(Sender: TObject);

//---------------------------------LoadMatrixFromBitmap(filename:string; var Matrix:TMatrix):boolean;LoadMatrixFromDtFile(filename:string; var Matrix:TMatrix):boolean;MakeAnalysMatrixData(Matrix01,Matrix02:TMatrix; var Matrix03:TMatrix):boolean;

//---------------------------------bmp1Click(Sender: TObject);Panel4MouseDown(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);Panel4MouseMove(Sender: TObject; Shift: TShiftState; X,: Integer);Panel4MouseUp(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);Edit1KeyPress(Sender: TObject; var Key: Char);Edit1Change(Sender: TObject);Edit2KeyPress(Sender: TObject; var Key: Char);Edit2Change(Sender: TObject);Button1Click(Sender: TObject);Button2Click(Sender: TObject);Button3Click(Sender: TObject);Button4Click(Sender: TObject);cb_SurfaceClick(Sender: TObject);ComboBoxMatrixChange(Sender: TObject);Edit3Change(Sender: TObject);BitBtnSaveClick(Sender: TObject);: TRenderPanel;: PMatrix;:TMatrix; //первое изображение02: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;//массив цветов:string;:TBitmap;InitOpenGL;SetDCPixelFormat(DC:HDC);;: Boolean;: TMat;: Integer;, Ycoord, Zcoord: Integer;, XRot: integer;: integer;,LastCCY: Integer;

//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------UAbout;

{$R *.dfm}TMat.InitOpenGL;.DC:=GetDC(Panel4.Handle);(MyPanels.DC);.HRC:=wglCreateContext(MyPanels.DC);(MyPanels.DC,MyPanels.HRC);(GL_DEPTH_TEST);(0,0,0,1);;TMat.SetDCPixelFormat(DC:HDC);:TPixelFormatDescriptor;:Integer;(pfd,SizeOf(pfd),0);.dwFlags:=PFD_DOUBLEBUFFER or_DRAW_TO_WINDOW or_SUPPORT_OPENGL;:=ChoosePixelFormat(DC,@pfd);(DC,nPixelFormat,@pfd);;TMat.FormCreate(Sender: TObject);:=0;:=TBitmap.Create;;:=0;:=0;:=0;:=0;.MCurrent:= @self.myMatrix01;.ComboBoxMatrix.ItemIndex:= 0;

// Width:=Screen.Width;

// Height:=Screen.Height;

// WindowState:=wsMaximized;

// Timer1.Enabled:=True;;TMat.FormDestroy(Sender: TObject);(0,0);.Destroy;(myMatrix01.vx);(myMatrix01.cx);(myMatrix01.cc);(myMatrix01.nx);(myMatrix02.vx);(myMatrix02.cx);(myMatrix02.cc);(myMatrix02.nx);(myMatrix03.vx);(myMatrix03.cx);(myMatrix03.cc);(myMatrix03.nx);(MyPanels.HRC);(MyPanels.DC,Panel4.Handle);(MyPanels.DC);;TMat.GL(var Matrix:TMatrix);,k,dw,dv: Integer;: TPaintStruct;: Integer;:string;:=0;:=0;:=0;(Yess=true) then.Enabled:=True;:=Matrix.w div 2;:=25 div 2;(Panel4.Handle,ps);(MyPanels.DC,MyPanels.HRC);(0,0,Panel4.Width,Panel4.Height);(GL_PROJECTION);;(30,Panel4.Width/Panel4.Height,1,10000);(GL_MODELVIEW);;(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);;(0,0,-Zcoord);(Xrot,1,0,0);(Yrot,0,1,0);(Matrix.w>5) thencb_Surface.Checked then av:=2 else av:=1;av of

: begin(GL_LIGHTING);(GL_LIGHT0);f(1,1,1);(GL_LINES);j:=0 to Matrix.w-2 dok:=0 to Matrix.w-2 dof(Matrix.cx[j,k,1],Matrix.cx[j,k,2],Matrix.cx[j,k,3]);f(j-dw,Matrix.vx[j,k]-dv,k-dw);f(Matrix.cx[j,k+1,1],Matrix.cx[j,k+1,2],Matrix.cx[j,k+1,3]);f(j-dw,Matrix.vx[j,k+1]-dv,k+1-dw);;j:=0 to Matrix.w-2 dok:=0 to Matrix.w-2 dof(Matrix.cx[j,k,1],Matrix.cx[j,k,2],Matrix.cx[j,k,3]);f(j-dw,Matrix.vx[j,k]-dv,k-dw);f(Matrix.cx[j+1,k,1],Matrix.cx[j+1,k,2],Matrix.cx[j+1,k,3]);f(j+1-dw,Matrix.vx[j+1,k]-dv,k-dw);;;;

: begin(GL_LIGHTING);(GL_LIGHT0);(GL_COLOR_MATERIAL);f(1,1,1);(GL_TRIANGLES);j:=0 to Matrix.w-2 dok:=0 to Matrix.w-2 dof(Matrix.cx[j,k,1],Matrix.cx[j,k,2],Matrix.cx[j,k,3]);f(Matrix.nx[j,k,1],Matrix.nx[j,k,2],Matrix.nx[j,k,3]);f(j-dw,Matrix.vx[j,k]-dv,k-dw);f(Matrix.cx[j+1,k,1],Matrix.cx[j+1,k,2],Matrix.cx[j+1,k,3]);f(Matrix.nx[j+1,k,1],Matrix.nx[j+1,k,2],Matrix.nx[j+1,k,3]);f(j-dw+1,Matrix.vx[j+1,k]-dv,k-dw);f(Matrix.cx[j+1,k+1,1],Matrix.cx[j+1,k+1,2],Matrix.cx[j+1,k+1,3]);f(Matrix.nx[j+1,k+1,1],Matrix.nx[j+1,k+1,2],Matrix.nx[j+1,k+1,3]);f(j-dw+1,Matrix.vx[j+1,k+1]-dv,k-dw+1);;j:=0 to Matrix.w-2 dok:=0 to Matrix.w-2 dof(Matrix.cx[j,k,1],Matrix.cx[j,k,2],Matrix.cx[j,k,3]);f(Matrix.nx[j,k,1],Matrix.nx[j,k,2],Matrix.nx[j,k,3]);f(j-dw,Matrix.vx[j,k]-dv,k-dw);f(Matrix.cx[j,k+1,1],Matrix.cx[j,k+1,2],Matrix.cx[j,k+1,3]);f(Matrix.nx[j,k+1,1],Matrix.nx[j,k+1,2],Matrix.nx[j,k+1,3]);f(j-dw,Matrix.vx[j,k+1]-dv,k-dw+1);f(Matrix.cx[j+1,k+1,1],Matrix.cx[j+1,k+1,2],Matrix.cx[j+1,k+1,3]);f(Matrix.nx[j+1,k+1,1],Matrix.nx[j+1,k+1,2],Matrix.nx[j+1,k+1,3]);f(j-dw+1,Matrix.vx[j+1,k+1]-dv,k-dw+1);;;(GL_COLOR_MATERIAL);;;.w:=0;(Handle,'Ошибка при прорисовке изображения',

'Ошибка',MB_OK or MB_ICONERROR);;(Panel4.Handle,ps);(120,1.0,0.0,0.0); // Rotate on x(120,0.0,1.0,0.0); // Rotate on y(120,0.0,0.0,1.0); // Rotate on z(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));;;TMat.SelPos(var Matrix:TMatrix; xx:Integer;yy:Integer);:Integer;:string;(Matrix.w>0) thenfx:= 0 to Matrix.w-1 do.cx[LastCCx,fx,1]:=Matrix.cc[LastCCx,fx,1];.cx[LastCCx,fx,2]:=Matrix.cc[LastCCx,fx,2];.cx[LastCCx,fx,3]:=Matrix.cc[LastCCx,fx,3];.cx[fx,LastCCy,1]:=Matrix.cc[fx,LastCCy,1];.cx[fx,LastCCy,2]:=Matrix.cc[fx,LastCCy,2];.cx[fx,LastCCy,3]:=Matrix.cc[fx,LastCCy,3];.cx[xx,fx,1]:=1;.cx[xx,fx,2]:=1;.cx[xx,fx,3]:=1;.cx[fx,yy,1]:=1;.cx[fx,yy,2]:=1;.cx[fx,yy,3]:=1;;:=xx;:=yy;:=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);3.Text:= s;

end; трехмерный изображение матричный графический

end;

//-----------------------------------------------------------------------------TMat.LoadMatrixFromBitmap(filename:string; var Matrix:TMatrix):boolean;,j:Integer;: string;:= false;not FileExists(filename) then exit;Matrix do.Width:=0;.Height:=0;.LoadFromFile(OpenPictureDialog1.FileName);:=bmp.Width;.Max:=w;.Max:=w;:=w div 2;:=w div 2;(vx,w);(nx,w);(cx,w);(cc,w);i:=0 to w-1 do(vx[i],w);(nx[i],w);(cx[i],w);(cc[i],w);;:='';.Items.Clear;i:=0 to w-1 doj:=0 to w-1 do[i,j]:=(GetRValue(bmp.Canvas.Pixels[i,j])+(bmp.Canvas.Pixels[i,j])+(bmp.Canvas.Pixels[i,j]))/50;vx[i,j]>10 then vx[i,j]:=9+(random(99)+1)/100;:=ss+FormatFloat('0.00', vx[i,j])+' ';[i,j,1]:=GetRValue(bmp.Canvas.Pixels[i,j])/255;[i,j,2]:=GetGValue(bmp.Canvas.Pixels[i,j])/255;[i,j,3]:=GetBValue(bmp.Canvas.Pixels[i,j])/255;[i,j,1]:=GetRValue(bmp.Canvas.Pixels[i,j])/255;[i,j,2]:=GetGValue(bmp.Canvas.Pixels[i,j])/255;[i,j,3]:=GetBValue(bmp.Canvas.Pixels[i,j])/255;;.Items.Add(ss);:='';;:=w*2;(Matrix, LastCCX, LastCCY);.Position:=LastCCX;.Position:=LastCCY;;:= true;;TMat.LoadMatrixFromDtFile(filename:string; var Matrix:TMatrix):boolean;,x,y,j,k,posp,posbar:Integer;,sfl,ss,formfl:String;: TFloatRec;: Extended;:integer;:Extended;:= false;not FileExists(filename) then exit;Matrix do.Items.Clear;.Position:=0;.Visible:=True;.Update;.Items.LoadFromFile(FileName);LBData.Items.Count>5 then.Position:=5;.Update;:=LBData.Items.Count;.Max:=w;.Max:=w;:=w div 2;:=w div 2;(vx,w);(nx,w);(cx,w);(cc,w);i:=0 to w-1 do(vx[i],w);(nx[i],w);(cx[i],w);(cc[i],w);y:=0 to w-1 do[i,y]:=0;[i,y,1]:=0;[i,y,2]:=0;[i,y,3]:=0;[i,y,1]:=0;[i,y,2]:=0;[i,y,3]:=0;[i,y,1]:=0;[i,y,2]:=0;[i,y,3]:=0;;;:=True;:='';y:=0 to w-1 do:=LBData.Items[y];:=0;(((pos(' ',spr)>0) or (Length(spr)>0)) and (Yess=True) and (x<w)) do:=pos(' ',spr);(posp>0) then:=trim (copy(spr,0,posp));(spr,1,posp);:=strtofloatdef(sfl,-100);(ValStr=-100) then:=False;(Length(mess)=0) then mess:='Неверное значение'+#13#10+'строка '+ IntToStr(y+1)+#13#10+'позиция '+IntToStr(x+1)+#13#10+'['+sfl+']';;;((ValStr<-10) or (ValStr>10)) then:=False;(Length(mess)=0) then mess:='Значение >10, либо <-10'+#13#10+'строка '+ IntToStr(y+1)+#13#10+'позиция '+IntToStr(x+1)+#13#10+'['+sfl+']';;else vx[x,y]:=ValStr;else:=Trim(spr);:=strtofloatdef(spr,-100);(ValStr=-100) then:=False;(Length(mess)=0) then mess:='Неверное значение'+#13#10+'строка '+ IntToStr(y+1)+#13#10+'позиция '+IntToStr(x+1)+#13#10+'['+spr+']';;;((ValStr<-10) or (ValStr>10)) then:=False;(Length(mess)=0) then mess:='Значение >10, либо <-10'+#13#10+'строка '+ IntToStr(y+1)+#13#10+'позиция '+IntToStr(x+1)+#13#10+'['+spr+']';;else vx[x,y]:=ValStr;:='';;(x);;:= FormatFloat('0',70*(((y+1)*(x))/(w*w)));:=StrToInt(formfl);.Position:=5+coint;.Update;

// mat.Caption:=mat.Caption+inttostr(x)+' ';(x<w) then:=false;(Length(mess)=0) then mess:='строка '+ IntToStr(y+1)+#13#10+'короткая, либо излишек строк в файле';;;(spr<>'') then:=false;(Length(mess)=0) then mess:='строка '+ IntToStr(y+1)+#13#10+'длинная, либо недостаточно строк в файле';;;;else:=false;

mess:='Форма должна иметь'+#13#10+'размер более чем 5х5';

end;Yess=true then.Position:=90;.Update;i:=0 to w-1 doj:=0 to w-1 do[i,j,1]:=(vx[i,j]+1)/9;[i,j,2]:=1-vx[i,j+1]/9;[i,j,3]:=0;[i,j,1]:=(vx[i,j]+1)/9;[i,j,2]:=1-vx[i,j+1]/9;[i,j,3]:=0;;;i:=0 to w-1 doj:=0 to w-1 dok:=1 to 3 do[i,j,k]:=1;i:=0 to w-2 doj:=0 to w-2 do(i,vx[i,j],j,+1,vx[i+1,j],j,+1,vx[i+1,j+1],j+1,[i,j,1],nx[i,j,2],nx[i,j,3]);;.Position:=100;.Update;:=w*2;:=90;:=0;.Position:=LastCCX;.Position:=LastCCY;(Matrix,LastCCX, LastCCY);.Hide;.Show;;;:= Yess;;

//-----------------------------------------------------------------------------TMat.bmp1Click(Sender: TObject);OpenPictureDialog1.Execute thenFileExists(OpenPictureDialog1.FileName) then.LoadMatrixFromBitmap(OpenPictureDialog1.FileName,self.MCurrent^);.GL(self.MCurrent^);else(Handle,('Файл '+OpenPictureDialog1.FileName+' не найден'),

'Ошибка',MB_OK or MB_ICONERROR);(Handle,('Ошибка во время загрузки файла '+.FileName),

'Ошибка',MB_OK or MB_ICONERROR);;;TMat.Panel4MouseDown(Sender: TObject;: TMouseButton; Shift: TShiftState; X, Y: Integer);Button = mbLeft then:=1;:= X;:= Y;;Button = mbRight then:=2;:= Y;;;TMat.Panel4MouseMove(Sender: TObject; Shift: TShiftState;, Y: Integer);MouseButton = 1 then:= xRot + (Y - Ycoord) div 2; // moving up and down = rot around X-axis:= yRot + (X - Xcoord)div 2;:= X;:= Y;(self.MCurrent^);; MouseButton = 2 then:=Depth - (Y-ZCoord) div 3;:= Y;(self.MCurrent^);;

// caption:=inttostr(xRot)+':'+inttostr(yRot);;TMat.Panel4MouseUp(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);:=0;;TMat.Edit1KeyPress(Sender: TObject; var Key: Char);Ord(Key)<>8 then if ((key<'0') or (key>'9')) then Key:=#0;;TMat.Edit1Change(Sender: TObject);:Integer;TryStrToInt(Edit1.Text,x)beginx>self.MCurrent^.w then Edit1.Text:=IntToStr(self.MCurrent^.w);x<2 then Edit1.Text:='1';begin.Text:='1';;(self.MCurrent^,UpDown1.Position-1,LastCCY);(self.MCurrent^);;TMat.Edit2KeyPress(Sender: TObject; var Key: Char);Ord(Key)<>8 then if ((key<'0') or (key>'9')) then Key:=#0;;TMat.Edit2Change(Sender: TObject);:Integer;TryStrToInt(Edit2.Text,x)beginx>self.MCurrent^.w then Edit2.Text:=IntToStr(self.MCurrent^.w);x<2 then Edit2.Text:='1';begin.Text:='1';;(self.MCurrent^,LastCCX,UpDown2.Position-1);(self.MCurrent^);;TMat.CalcNormals(x1,y1,z1,x2,y2,z2,x3,y3,z3:Extended; var nx,ny,nz:Extended);: Double;,vy1,vz1,vx2,vy2,vz2: Double;:=x1-x2;:=y1-y2;:=z1-z2;:=x2-x3;:=y2-y3;:=z2-z3;:=sqrt(sqr(vy1*vz2-vz1*vy2)+sqr(vz1*vx2-vx1*vz2)+sqr(vx1*vy2-vy1*vx2));:=-(vy1 * vz2 - vz1 * vy2)/wrki;:=-(vz1 * vx2 - vx1 * vz2)/wrki;:=-(vx1 * vy2 - vy1 * vx2)/wrki;;TMat.Button1Click(Sender: TObject);.Items.SaveToFile(ChangeFileExt(Application.ExeName,'.txt'));;TMat.Init();.OnChange:=Edit1Change;.OnKeyPress:=Edit1KeyPress;.OnChange:=Edit2Change;.OnKeyPress:=Edit2KeyPress;.OnMouseDown:=Panel4MouseDown;.OnMouseMove:=Panel4MouseMove;.OnMouseUp:=Panel4MouseUp;;TMat.Button3Click(Sender: TObject);.ShowModal;;TMat.Button4Click(Sender: TObject);.OnChange:=nil;.OnKeyPress:=nil;.OnChange:=nil;.OnKeyPress:=nil;.OnMouseDown:=nil;.OnMouseMove:=nil;.OnMouseUp:=nil;;;

//проводим анализ данных, точки совпадения красным, ниже синим, выше зеленым

function TMat.MakeAnalysMatrixData(Matrix01,Matrix02:TMatrix; var Matrix03:TMatrix):boolean;,j,k,y:integer;

Result:= false;

//инициализация результ. матрицы

Matrix03.w:= Matrix01.w;Matrix03 do(vx,w);(nx,w);(cx,w);(cc,w);i:=0 to w-1 do(vx[i],w);(nx[i],w);(cx[i],w);(cc[i],w);y:=0 to w-1 do[i,y]:=Matrix01.vx[i,y];[i,y,1]:=Matrix01.nx[i,y,1];[i,y,2]:=Matrix01.nx[i,y,2];[i,y,3]:=Matrix01.nx[i,y,3];[i,y,1]:=Matrix01.cx[i,y,1];[i,y,2]:=Matrix01.cx[i,y,2];[i,y,3]:=Matrix01.cx[i,y,3];[i,y,1]:=Matrix01.cc[i,y,1];[i,y,2]:=Matrix01.cc[i,y,2];[i,y,3]:=Matrix01.cc[i,y,3];[i,y,1]:=255;[i,y,2]:=255;[i,y,3]:=255;

//часть первого, которая не пересеклась со вторым

//окрашиваем в желтый цвет

if Matrix02.vx[i,y] = 0 then

begin[i,y,1]:=(vx[i,y]+1)/6;[i,y,2]:=(vx[i,y]+1)/6;[i,y,3]:=0;;

//часть второго, которая не пересеклась с первой

//окрашиваем в красный цвет

if Matrix01.vx[i,y] = 0 then

begin[i,y]:=Matrix02.vx[i,y];[i,y,1]:=(vx[i,y]+1)/6;[i,y,2]:=0;[i,y,3]:=0;

end;

//если нет поверхностей => зеленый

if (Matrix01.vx[i,y] = 0)(Matrix02.vx[i,y] = 0)then[i,y,1]:=0;[i,y,2]:=(vx[i,y]+1)/2;[i,y,3]:=0;

end;

//совпадающие обозначае зеленым цветом

if (Matrix01.vx[i,y] = Matrix02.vx[i,y])(Matrix01.vx[i,y] <> 0)(Matrix02.vx[i,y] <> 0)then[i,y,1]:=0;[i,y,2]:=(vx[i,y]+1)/2;[i,y,3]:=0;

end;

//те, которые выше - делаем зеленым

if (Matrix01.vx[i,y] < Matrix02.vx[i,y])(Matrix01.vx[i,y] <> 0)(Matrix02.vx[i,y] <> 0)then[i,y]:=Matrix02.vx[i,y];[i,y,1]:=0;[i,y,2]:=(vx[i,y]+1)/2;;[i,y,3]:=0;

end;

//те, которые ниже будут синим

if (Matrix01.vx[i,y] > Matrix02.vx[i,y])(Matrix01.vx[i,y] <> 0)(Matrix02.vx[i,y] <> 0)then[i,y,1]:=(vx[i,y]+1)/6;[i,y,2]:=0;[i,y,3]:=0;;[i,y,1]:=cx[i,y,1];[i,y,2]:=cx[i,y,2];[i,y,3]:=cx[i,y,3];;;

end;

{

w:Integer; //размерность матрицы

vx:Array of Array of Extended;//массив вершин:Array of Array of Array[1..3] of Extended;//массив нормалей:Array of Array of Array[1..3] of GLfloat;//массив цветов:Array of Array of Array[1..3] of GLfloat;//массив цветов

}:= true;;TMat.cb_SurfaceClick(Sender: TObject);(self.MCurrent^);;TMat.Button2Click(Sender: TObject);

//возможно, режим анализа поверхностейself.ComboBoxMatrix.ItemIndex = 2 thennot self.MakeAnalysMatrixData(self.myMatrix01, self.myMatrix02, self.myMatrix03) then

ShowMessage('Не удалось провести анализ поверхностей!');

end;.GL(self.MCurrent^);;;.Hide;.InitialDir:=ExtractFilePath(Application.ExeName);FoDialog.Execute thenself.LoadMatrixFromDtFile(FoDialog.FileName,self.MCurrent^) then.GL(self.MCurrent^);else //Yess=false.Hide;(Handle,PAnsiChar('Ошибка в файле данных!'+#13#10+self.mess),PAnsiChar('Ошибка'),MB_OK or MB_ICONINFORMATION);.Hide;

// w:=0;;;;TMat.ComboBoxMatrixChange(Sender: TObject);self.ComboBoxMatrix.ItemIndex = 0 then self.MCurrent:= @self.myMatrix01;self.ComboBoxMatrix.ItemIndex = 1 then self.MCurrent:= @self.myMatrix02;self.ComboBoxMatrix.ItemIndex = 2 then self.MCurrent:= @self.myMatrix03;.Button2.Caption:= 'Загрузить';self.ComboBoxMatrix.ItemIndex = 2 then self.Button2.Caption:= 'Провести анализ';.GL(self.MCurrent^);;;TMat.Edit3Change(Sender: TObject);_x:integer;_y:integer;:real;

begin

//изменение значения вершины

pos_x:= self.UpDown1.Position-1;_y:= self.UpDown2.Position-1;:= StrToFloatDef(self.Edit3.Text,-1000);value > -1000 then.MCurrent^.vx[pos_x,pos_y]:= value;

// else

// self.Edit3.Text:= FloatToStr(self.MCurrent^.vx[pos_x,pos_y]);

//теперь просчитываем цвета

With self.MCurrent^ do

begin[pos_x,pos_y,1]:=(vx[pos_x,pos_y]+1)/9;[pos_x,pos_y,2]:=1-vx[pos_x,pos_y+1]/9;[pos_x,pos_y,3]:=0;[pos_x,pos_y,1]:=(vx[pos_x,pos_y]+1)/9;[pos_x,pos_y,2]:=1-vx[pos_x,pos_y+1]/9;[pos_x,pos_y,3]:=0;;

//после изменений перерисовываем

self.GL(self.MCurrent^);

exit;;TMat.BitBtnSaveClick(Sender: TObject);:TStringList;:string;,y:integer;

//button "save" clickself.MCurrent^.w = 0 then('Матрица не загружена!');

exit;;self.SaveDialogMain.FileName = '' then.SaveDialogMain.InitialDir:= ExtractFileDir(ParamStr(0));not self.SaveDialogMain.Execute() then exit;

//---------------------------------------------:= TStringList.Create();self.MCurrent^ doy:= 0 to w-1 do:= '';k:= 0 to w-1 do:= stroka + ' ' + FloatToStr(vx[k,y]);;;:= trim(stroka);.Add(stroka);;;.SaveToFile(self.SaveDialogMain.FileName);.Free();

//---------------------------------------------('Матрица была сохранена.');;;.

);:TStringList;:string;,y:integer;

//button "save" clickself.MCurrent^.w = 0 then('Матрица не загружена!');

exit;;self.SaveDialogMain.FileName = '' then.SaveDialogMain.InitialDir:= ExtractFileDir(ParamStr(0));not self.SaveDialogMain.Execute() then exit;

//---------------------------------------------:= TStringList.Create();self.MCurrent^ doy:= 0 to w-1 do:= '';k:= 0 to w-1 do:= stroka + ' ' + FloatToStr(vx[k,y]);;;:= trim(stroka);.Add(stroka);;;.SaveToFile(self.SaveDialogMain.FileName);.Free();

//---------------------------------------------('Матрица была сохранена.');;;.



Поделиться:


Последнее изменение этой страницы: 2020-03-02; просмотров: 642; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.140.186.241 (0.004 с.)