Главная страница
Культура
Искусство
Языки
Языкознание
Вычислительная техника
Информатика
Финансы
Экономика
Биология
Сельское хозяйство
Психология
Ветеринария
Медицина
Юриспруденция
Право
Физика
История
Экология
Промышленность
Энергетика
Этика
Связь
Автоматика
Математика
Электротехника
Философия
Религия
Логика
Химия
Социология
Политология
Геология

Дипломная работа По специальности 230105. 65 Программное обеспечение вычислительной техники и автоматизированных систем



Скачать 493.29 Kb.
НазваниеДипломная работа По специальности 230105. 65 Программное обеспечение вычислительной техники и автоматизированных систем
АнкорDiplom-cho.docx
Дата12.01.2018
Размер493.29 Kb.
Формат файлаdocx
Имя файлаDiplom-cho.docx
ТипДиплом
#14938
страница3 из 4
1   2   3   4

Реализация рассмотренной модели в виде отдельного программного обеспечения.


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

В качестве графической подсистемы взята за основу стандартная библиотека операционной системы Windows отвечающая за вывод двухмерной графики GDI/GDI+. В среде разработки Embarcadero Delphi 2010 поддержка данной библиотеки реализовано объектно-ориентированной оберткой canvas.

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

  • работа с точками (Adding_points);

procedure TForm1.SpeedButton4Click(Sender: TObject);

begin

Adding_points:=true;

Adding_springs:=false;

fixing_points:=false;

end;

  • работа с пружинами (Adding_springs);

procedure TForm1.SpeedButton3Click(Sender: TObject);

begin

Adding_springs:=true;

fixing_points:=false;

Adding_points:=false;

end;

  • работа с инструментов фиксации точек (Fixing_points);

procedure TForm1.SpeedButton2Click(Sender: TObject);

begin

Adding_points:=false;

Adding_springs:=false;

fixing_points:=true;

end;
Функции обработки элементов графического интерфейса программы реагируют на нажатие кнопок мыши, движения курсора мыши и нажатия кнопок меню. За их обработку отвечают процедуры:

  • PaintBox1MouseDown – реагирует на нажатие левой определяет нахождение под курсором мыши точки и запоминает номер точки, для дальнейшего использования;

procedure TForm1.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

var

i,np:integer;

rx,ry:extended;

p:Tpoint_3d;

begin

selected:=-1;

rx:=get_rx(X);

ry:=get_ry(Y);

np:=PointsList.Count;

for i:=0 to np-1 do

begin

p:=PointsList.Items[i];

if ((abs(rx-p.x)<5) and (abs(ry-p.y)<5)) then

begin

selected:=i;

break;

end

end;

end;

  • PaintBox1MouseMove – запоминает текущее положение курсора мышки при каждом его движении;

procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,

Y: Integer);

var

rx,ry:extended;

begin

rx:=get_rx(X);

ry:=get_ry(Y);

statusbar1.Panels[0].Text:=' X: ' + intToStr(x)+ ' rX: ' +FloatToStrF(rx,fffixed,8,3);

statusbar1.Panels[1].Text:=' Y: '+intToStr(y)+ ' rY: ' +FloatToStrF(ry,fffixed,8,3);

end;


  • PaintBox1MouseUp – выполняет выбор действий на основе текущего режима работы приложения;

procedure TForm1.PaintBox1MouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

var

p:TPoint_3d;

rx,ry:extended;

point_select:boolean;

otr:TOtr_3d;

S:TSpring;

l:Extended;

value_n:integer;

d:extended;

begin

d:=2;

rx:=get_rx(X);

ry:=get_ry(Y);

if Adding_points then

begin

AddPointTo(rX,rY);

memos_update;

end;

if Adding_springs then

begin

if FirstSelected then

begin

if selected<>-1 then

begin

p2:=PointsList[selected];

otr:=TOtr_3d.Create_withPoints(p1,p2);

l:=abs(otr.GetLength);

value_n:=round(l/d)+1;

s:=TSpring.Create_withParam(otr,l,5,d,2*d,value_n);

SpringsList.Add(s);

selected:=-1;

FirstSelected:=false;

memos_update;

end;

end

else

begin

if selected<>-1 then

begin

p1:=PointsList[selected];

FirstSelected:=true;

end;

end;

end;

if fixing_points then

begin

if selected<>-1 then

begin

p:=PointsList[selected];

if mbLeft = Button then

begin

p.fixed:=1;

end

else

begin

p.fixed:=0;

end;

end;

memos_update;

end;

paintbox1.repaint;

end;


  • PaintBox1Paint – реагирует на сообщение WM_PAINT.

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

procedure TForm1.PaintBox1Paint(Sender: TObject);

var

i,np,ns:integer;

nx,ny:integer;

rx,ry:extended;

x,y:integer;

p,p1,p2:TPoint_3d;

s:TSpring;

str:string;

oldcolor:Tcolor;

tw,th:integer;

begin

rx:=get_rx(paintbox1.ClientWidth-nkx-delx);

nx:=round(rx/10);

ry:=get_ry(dely);

ny:=round(ry/10);

for i:=0 to nx do

begin

str:=FloatToStrF(i*10,fffixed,4,1);

tw:=PaintBox1.Canvas.TextWidth(str);

PaintBox1.Canvas.TextOut(nkx+round(mx*10*i-tw/2),nky+5,str);

moveto_r(PaintBox1.Canvas,i*10,0);

Lineto_r(PaintBox1.Canvas,i*10,10*ny);

end;

for i:=0 to ny do

begin

str:=FloatToStrF(i*10,fffixed,4,1);

tw:=PaintBox1.Canvas.TextWidth(str);

th:=PaintBox1.Canvas.TextHeight(str);

PaintBox1.Canvas.TextOut(nkx-tw-2,nky-round(my*10*i)-th div 2,str);

moveto_r(PaintBox1.Canvas,0,i*10);

Lineto_r(PaintBox1.Canvas,10*nx,i*10);

end;

np:=PointsList.Count;

if np<>0 then

begin

for i:=0 to np-1 do

begin

p:=PointsList[i];

oldcolor:=PaintBox1.Canvas.Brush.Color;

PaintBox1.Canvas.Brush.Color:=clgreen;

if p.fixed=1 then PaintBox1.Canvas.Brush.Color:=clred;

Circle_r(PaintBox1.Canvas,p.X,p.Y,2);

PaintBox1.Canvas.Brush.Color:=oldcolor;

end;

end;

ns:=SpringsList.Count;

if ns<>0 then

begin

for i:=0 to ns-1 do

begin

s:=SpringsList[i];

p1:=s.Otr.First;

p2:=s.Otr.Last;

Pruzh_1d_ris(PaintBox1.Canvas,s,p1.X,p1.Y,p2.X,p2.Y);

end;

end;

memos_update;

end;

  • TPoint_3d – суперкласс, определяет объект точки;

  • TOtr_3d – класс, описывающий готовый отрезок;

  • TSpring – класс, описывающий пружины.

Процедура PaintBox1MouseUp выполняет действия в зависимости от режима:

  1. Режим работы с точками. Производит вызов процедуры AddPointTo с передачей в аргументах координаты курсора мыши.

  2. Режим работы с пружинами: требует выбрать две точки, для скрепления их пружиной.

  3. Режим работы с инструментом фиксации. Помечает опознанную точку функцией PaintBox1MouseDown как фиксированную.

Вычисления по формулам 13, 14 выполняется код

begin

ax:=0;

bx:=0;

cx:=0;

ay:=0;

by:=0;

cy:=0;

for j:=0 to np-1 do // по всем точкам

begin

p1:=PointsList[j];

if p1<>p then //если точка другая

begin

s:=get_spring(p,p1); //определяем пружину которая соединяет эти точки

if s<>nil then

begin

l:=s.l;

k:=s.k;

ax:=ax+p1.x*k; // вычисление формулы 13

bx:=bx-sgn(p.X,p1.X)*l;

cx:=cx+k;

ay:=ay+p1.y*k; // вычисление формулы 14

by:=by-sgn(p.y,p1.y)*l;

cy:=cy+k;

end;

end;

end;

pu:=p.x; //для определения ошибок

p.x:=(ax+bx)/cx; //новое значение х-координаты

if (abs(pu-p.x)>=razn) then razn:=abs(pu-p.x);

pu:=p.y; //для определения ошибок

p.y:=(ay+by-pm)/cy; //новое значение у-координаты

if (abs(pu-p.y)>=razn) then razn:=abs(pu-p.y);

end;
На рисунке 2 показана запущенная программа. Интерфейс имеет четыре кнопки: добавить точки, добавить пружины, закрепить точки и демонстрационный режим, где пользователь может проводить манипуляции с точками, то есть тянуть их. Слева находятся Memo1 и Memo2 (списки), в которых отображается координаты и номер добавленной точки (верхний Memo), на нижнем показаны добавленные пружины, которые прикреплены к точке отображающиеся в виде координат. При работе в режиме инструмента закрепления пользователь левым кликом мыши закрепленная точка закрашивается красным цветом и в дальнейшем эту точку невозможно передвинуть. На данном рисунке добавили точки, добавили пружины (соединили точки) и закрепили точку.

e:\приложения\abegin.jpg

Рис. 2. Интерфейс программы.

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

e:\приложения\addpoints.jpg

Рис. 3 Добавление точек.

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

e:\приложения\addsprings.jpg

Рис. 4 Добавление пружин.

На рисунке 5 показана уже готовая каркасно-пружинная модель. Пользователь закрепляет точки (закрепленные точки закрашивается красным цветом). Справа вверху списка видно, что точка под номером 1 закреплена (это показывает число 1 в конце строки информации о точке). Закрепленные точки можно отменить, нажав по закрепленной точке правым кликом мыши.

e:\приложения\fixedpoint.jpg

Рис. 5. Закрепление точек.

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

e:\приложения\theclickdo.jpg

Рис. 6. Демонстрационный режим.
1   2   3   4
написать администратору сайта