restart; with(plots): PR:=module() export BLK,runBLK: BLK:=proc() local cst,GM,GQ,nP,nq,nm,xP,x1,dlmx,dlmf,xOP,P,temp,m,xm,xq, q,l,L,mP,mq,mm,Rb,Ra,qB,mB,z,i,x,N,u: global MB,QB: use Maplets[Tools] in xOP:=Get('TxO'::list); # координаты опор xP:=Get('TxP'::list); # координаты сил P:=Get('TP'::list); # силы m:=Get('Tm'::list); # моменты xm:=Get('Txm'::list): # координаты моментов xq:=Get('Txq'::list): # координаты левых концов q q:=Get('Tq'::list); # распр. нагрузки q l:=Get('Tl'::list); # длины распр. нагрузка q u:=Get('RB1'::boolean); # x1:=Get('Tx1'::float); nP:=nops(P): # Число P nm:=nops(m): # Число m nq:=nops(q): # Число q P:=[op(P),0,0]: xP:=[op(xP),op(xOP)]: L:=max(op(xP),op(xm),op(xq+l)): # Вычисление длины балки mP:=add(P[i]*(xP[i]-xOP[1]),i=1..nP): # Моменты P mq:=add(q[i]*l[i]*(xq[i]+l[i]/2-xOP[1]),i=1..nq):# Моменты q mm:=add(m[i],i=1..nm): # Моменты m Rb:=-(mP+mq+mm)/(xOP[2]-xOP[1]); # ПраваЯ реакциЯ Ra:=-Rb-add(P[i],i=1..nP)-add(q[i]*l[i],i=1..nq); # ЛеваЯ реакциЯ P[nP+1]:=Ra: P[nP+2]:=Rb:# Зачисление реакций опор в множество сил # Эпюра поперечной силы qB:=x->add(piecewise(x>=xP[i],P[i],x<=xP[i],0),i=1..nP+2)+ add(piecewise(x>=xq[i] and x<=xq[i]+l[i], q[i]*(x-xq[i]), x<=xq[i],0, x>=xq[i]+l[i],q[i]*l[i]),i=1..nq): # Эпюра моментов z:=-1; if u then z:=1: end if; # ДлЯ строительных специальностей z:=-1; cst:=x->convert(evalf(x,4),string); # Процедура вычислений моментов m1:=x->piecewise(x<=x1,-x/L,x>=x1,-x/L+1,0): #момент m2:=x->piecewise(x<=x1,x*(L-x1)/L,x>=x1,x*(L-x1)/L-(x-x1),0):#сила mB:=x->add(piecewise(x>=xm[i],-z*m[i],x<=xm[i],0,0),i=1..nm)+ add(piecewise(x>=xP[i],z*(x-xP[i])*P[i],x<=xP[i],0,0),i=1..nP+2)+ add(piecewise(x>xq[i] and x=xq[i]+l[i],z*(x-xq[i]-l[i]/2)*l[i]*q[i],0),i=1..nq): dlmf:=int(m1(x)*mB(x),x=0..L): dlmy:=int(m2(x)*mB(x),x=0..L): GM:=plot(mB(x),x=0..L,title="ЭПЮРА M"): GQ:=plot(qB(x),x=0..L,title="ЭПЮРА Q"): N:=10: Set (TB1=" \n",TB2=" \n",TB3=" \n"): for i from 0 to N do x:=L/N*i: Set(TB1(appendline)=cst(x)): Set(TB2(appendline)=cst(qB(x))): Set(TB3(appendline)=cst(mB(x))): od: Set(TB5=cst(dlmf)): Set(TB4=cst(dlmy)): end use: GM,GQ: end proc: runBLK:=proc() local маплет,z,a,L,b1,b2,T1,T2,T3,T4,T5,c1,c2,c3,p1,p2,helpStr; z:='width'=5,'height'=15,'editable'='false': helpStr:="Момент положительный, если он вращает против часовой стрелки. Силы и распределенные нагрузки, направленные вверх, положительные. Начало координат в левом конце балки.": use Maplets:-Elements in a[1]:=["[xOP]=",TextField['TxO'](14,'value'=[0,5],'tooltip'="Введите координаты опор")]: a[2]:=["[xP]=", TextField['TxP'](14,'value'=[2],'tooltip'="Введите координаты сил")]: a[3]:=["[P]=", TextField['TP' ](14,'value'=[-5],'tooltip'="Введите силы")]: a[4]:=["[xm]=", TextField['Txm'](14,'value'=[2],'tooltip'="Введите координаты моментов")]: a[5]:=["m=", TextField['Tm' ](14,'value'=[-10],'tooltip'="Введите моменты")]: a[6]:=["xq=", TextField['Txq'](14,'value'=[0],'tooltip'="Введите координаты q")]: a[7]:=["q=", TextField['Tq' ](14,'value'=[0],'tooltip'="Введите q")]: a[8]:=["Lq=", TextField['Tl' ](14,'value'=[0],'tooltip'="Введите длину q")]: a[9]:=["x=", TextField['Tx1' ](14,'value'=2.0,'tooltip'="Координата прогиба")]: b1:=RadioButton['RB1']("+M",'value'=true, 'group'='Bt','tooltip'="Эпюра на сжатом волокне"): b2:=RadioButton['RB2']("-M",'value'=false,'group'='Bt'): T1:=TextBox['TB1'](z,font=Font(12)): T2:=TextBox['TB2'](z,font=Font(12)): T3:=TextBox['TB3'](z,font=Font(12)): T4:=TextBox['TB4']('width'=5,'height'=1,'editable'='false',font=Font(20)): T5:=TextBox['TB5']('width'=5,'height'=1,'editable'='false',font=Font(20)):# c1:=Button('width=90',"M", Evaluate('PL1' = 'display(BLK()[1])')): c2:=Button('width=90',"Q", Evaluate('PL2' = 'display(BLK()[2])')): c3:=Button("OK",Shutdown(['TxP','TP','Txm'])): p1:=Plotter['PL1']('height=200'): p2:=Plotter['PL2']('height=200'): маплет:= Maplet(Evaluate(function = 'BLK()'), ButtonGroup['Bt'](), Window('title'="ЭПЮРЫ В БАЛКЕ",'menubar'='MB', ["Сопротивление материалов", [BoxColumn(seq(a[i],i=1..9), [b1,b2],["x","Q","M"],[T1,T2,T3],["deltay=",T4,"deltaf=",T5]), [p1,p2] ],[c1,c2,c3] ]), Window['Справка'](BoxColumn(TextBox('height'=10,'value'=helpStr),Button("Close",CloseWindow('Справка')))), MenuBar['MB']( Menu("Help",MenuItem("Правило знаков",'onclick'=RunWindow('Справка')))) ):#Maplet Maplets:-Display(маплет): end use; end proc; end module: PR:-runBLK():