ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 09.06.2020

Просмотров: 133

Скачиваний: 4

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

end;

//вычисление пространственного интеграла

var

I : Integer;

eps,eta,ksi : Double;

begin

i := 1;

Result := 0;

ay:=0;by:=Ymax;

eta:=0;

while eta<Ymax do

begin

eps:=XMin(eta);

while eps<XMax(eta) do

begin

ksi:=GetZ(eps,eta,false);

while ksi<GetZ(eps,eta,true) do

begin

Result := Result+0,1*0,1*0,1*F(eps, eta, ksi);

ksi+=0.1;

end;

eps+=0.1;

end;

eta+=0.1;

end;

Result := mnoj*Result;

if Result>Qmax then Qmax:=Result;

if Result<Qmin then Qmin:=Result;

end;

var x,y:single;

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

begin

SetLength(Q,KNames);

Qmin:=1e9;

Qmax:=0;

y:=0; IDName:=1;

while y<Ymax do

begin

x:=Xmin(y);

while x<Xmax(y) do

begin

//элемент передней части лопатки

Q[IDName]:=CalcElem(x,y,true);

inc(IDName);

//элемент задней части лопатки

Q[IDName]:=CalcElem(x,y,false);

inc(IDName);

x:=x+dx;

end;

y:=y+dy;

end;

ColorsReady:=true;

end;


4.5 Соотношения для расчета механической нагрузки камня кулисы поворотного механизма


Для расчета и отображения механической напряженности на каждом элементе участка поверхности камня кулисы используется тот же самый алгоритм, приведенный в пункте 4.4. Определим напряжения на участках камня кулисы в момент времени t=1 с. Для этого воспользуемся выражением (2.47). Затем вынесем за знак интеграла все постоянные члены, образовав переменную m.

(4.5)

Выпишем конечное значение подынтегральной функции f и постоянного коэффициента m.

(4.6)

(4.7)

Интегрирование и отображение камня кулисы поворотного механизма происходит для участков стенок. Таким образом в каждой итерации цикла происходит расчет для участков передней стенки (x, y, 0), задней стенки (x, y, zmax), нижней стенки (x, 0, z), верхней стенки (x, ymax, z), левой стенки (0, y, z) и правой стенки (xmax, y, z).


4.6 Ввод параметров модели


Ввод и расчет промежуточных параметров модели происходит в процедуре SetParams модуля u_lopatka. Ввод осуществляется путем считывания значений со строковой таблицы формы frm_param. Переменные a12, b12, c12 являются квадратами полуосей конуса и необходимы для описания геометрии лопатки. mnoj – вспомогательная переменная постоянной составляющей подынтегрального выражения.

procedure SetParams;

var h2,h1,h,b1,L,nu,v,dv:single;

begin

KNames:=0;

Ymax:=StrToFloat(frm_param.SG.Cells[1,1]);

x01:=StrToFloat(frm_param.SG.Cells[1,2]);

R1:=StrToFloat(frm_param.SG.Cells[1,3]);

R2:=StrToFloat(frm_param.SG.Cells[1,4]);

h1:=StrToFloat(frm_param.SG.Cells[1,5]);

h2:=StrToFloat(frm_param.SG.Cells[1,6]);

fi:=StrToFloat(frm_param.SG.Cells[1,7])/180*Pi;

nu:=StrToFloat(frm_param.SG.Cells[1,8]);

v:=StrToFloat(frm_param.SG.Cells[1,9]);

dv:=StrToFloat(frm_param.SG.Cells[1,10]);

h:=StrToFloat(frm_param.SG.Cells[1,11]);

L:=Ymax;

z0:=h2/2;

c12:=(h2/2);

b1:=L*h2/(h2-h1);

y0:=b1-L;

b12:=(b1);

a12:=sqr((R2-R1)/h1);

mnoj:=(0.000000281)*2*Pi*sqrt(nu)*(L+3*dv)*v+9.81*h;

ColorsReady:=false;

end;

4.7 Управление сценой


Отображаемая пользователю система координат и находящийся в нем объект называется сценой. Управление сценой осуществляется с помощью мыши и клавиатуры. Код этого управления, а также вызов основных функций по главному меню содержится в модуле главной формы u_main.

procedure Tfrm_main.FormCreate(Sender: TObject);

begin

Start:=true;RotateNow:=false;

alpha:=0;beta:=0;zdist:=5;xdist:=0;ydist:=0;

end;

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

procedure Tfrm_main.MenuItem1Click(Sender: TObject);


begin

Frm_help.ShowModal;

end;

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

procedure Tfrm_main.MenuItem3Click(Sender: TObject);

begin

frm_param.Show;

end;

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

procedure Tfrm_main.MenuItem4Click(Sender: TObject);

begin

Draw(OpenGLControl1,alpha,beta,xdist,ydist,zdist);

end;

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

procedure Tfrm_main.MenuItem5Click(Sender: TObject);

begin

Self.Cursor:=crHourGlass;

Application.ProcessMessages;

Calc; Draw(OpenGLControl1,alpha,beta,xdist,ydist,zdist,SelectedObject);

Self.Cursor:=crDefault;

end;

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

procedure Tfrm_main.OpenGLControl1KeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

begin

case Key of

27: Close;

37:alpha -= 5;

38: beta += 5;

39:alpha += 5;

40: beta -= 5;

36:zdist+=1;

35:zdist-=1;

104:ydist+=0.2;

100:xdist-=0.2;

98:ydist-=0.2;

102:xdist+=0.2;

101:begin alpha:=0;beta:=0;zdist:=5;xdist:=0;ydist:=0; end;//сброс

end;

Draw(OpenGLControl1,alpha,beta,xdist,ydist,zdist,SelectedObject);

end;

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

procedure Tfrm_main.OpenGLControl1MouseDown(Sender: TOBject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

RotateNow:=true; Xmous:=X;Ymous:=Y;

end;

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

procedure Tfrm_main.OpenGLControl1MouseLeave(Sender: TObject);

begin

RotateNow:=false;

end;

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

procedure Tfrm_main.OpenGLControl1MouseMove(Sender: TObject; Shift: TShiftState;

X, Y: Integer);

begin

if RotateNow then

begin

if ssCtrl in Shift then

begin

xdist+=(X-Xmous)/5;ydist+=-(Y-Ymous)/5;

end

else

begin

alpha:=alpha+X-Xmous;beta:=beta+Y-Ymous;

end;

Xmous:=X;Ymous:=Y;

Draw(OpenGLControl1,alpha,beta,xdist,ydist,zdist,SelectedObject);

end;

end;

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

procedure Tfrm_main.OpenGLControl1MouseUp(Sender: TOBject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

RotateNow:=false;

//выбор объекта

if Button=mbRight then

begin

BeginSelectGL(OpenGLControl1, x,y);

DrawInternal(alpha,beta,xdist,ydist,zdist,SelectedObject);

SelectedObject:=EndSelectGL(OpenGLControl1);

if (SelectedObject> 0)and ColorsReady then ShowMessage ('Нагрузка равна '+FloatToStr(double(Q[SelectedObject])/1000000)+'*10^6');


Draw(OpenGLControl1,alpha,beta,xdist,ydist,zdist,SelectedObject);

end;

end;

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

procedure Tfrm_main.OpenGLControl1MouseWheelDown(Sender: TObject;

Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);

begin

zdist-=1; Draw(OpenGLControl1,alpha,beta,xdist,ydist,zdist,SelectedObject);

end;

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

procedure Tfrm_main.OpenGLControl1MouseWheelUp(Sender: TObject;

Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);

begin

zdist+=1; Draw(OpenGLControl1,alpha,beta,xdist,ydist,zdist,SelectedObject);

end;

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

procedure Tfrm_main.OpenGLControl1Paint(Sender: TObject);

begin

if Start then

begin

Start:=false;

InitGL(OpenGLControl1);

end;

Draw(OpenGLControl1,alpha,beta,xdist,ydist,zdist,SelectedObject);

end;

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

procedure Tfrm_main.OpenGLControl1Resize(Sender: TObject);

begin

ResizeGl(OpenGLControl1);

end;