ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 09.06.2020
Просмотров: 140
Скачиваний: 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;