Программа 6. Задача 11
> | restart; |
> | with(LinearAlgebra): |
> | with(plots): |
> | with(plottools): |
> | FermaModule:=module() |
> | export Frm,runFerma: |
> | Frm:=proc() local F,Nbeg,Nend,K,x,y,fd,N, |
> | m,M,Шрифт,i,Шарнир,Симв,Стержень,Вид,nF,R,Ris,iF,G,Lx,Ly,L,S,B: |
> | use Maplets[Tools] in |
> | x:=Get('Tx'::list); # координаты |
> | y:=Get('Ty'::list); # координаты |
> | F[1]:=Get('TFx'::list); # Fx |
> | F[2]:=Get('TFy'::list); # Fy |
> | nF:=Get('TnF'::list); # |
> | Nbeg:=Get('TNbeg'::list); # Начало стержн |
> | Nend:=Get('TNend'::list); # Конец стержн |
> | K:=Get('TNopr'::integer); # Число опор |
> | m:=nops(F[1]): # Число нагрузок |
> | N:=nops(x): # Число узлов |
> | M:=nops(Nend): # Число стержней |
> | Шрифт:=FONT(TIMES,BOLD,12): |
> | for i to M do |
> | R[i]:=PLOT(CURVES([[x[Nbeg[i]],y[Nbeg[i]]], |
> | [x[Nend[i]],y[Nend[i]]]])): |
> | od: |
> | Симв:=proc(x) convert(x,symbol) end: |
> | for i to N do |
> | Шарнир[i]:=PLOT(TEXT([x[i]+0.1,y[i]+0.2],Симв(i)), |
> | Шрифт,COLOR(HUE,1)): |
> | od: |
> | for i to M do |
> | Стержень[i]:=PLOT(TEXT([(x[Nbeg[i]]+x[Nend[i]])/2+0.05, |
> | (y[Nbeg[i]]+y[Nend[i]])/2+0.1], |
> | Симв(i)),Шрифт,COLOR(HUE,0.7)): |
> | od: Параметры стрелки на рисунке |
> | Вид:=0.05,0.3,0.1,color=red: |
Изображение нагрузок
> | iF:=seq(arrow([x[nF[i]],y[nF[i]]],evalm([F[1][i],F[2][i]]*0.1),Вид),i=1..m): Изображение фермы |
> | Ris:=display(iF,seq(R[i],i=1..M),seq(Шарнир[i],i=1..N), |
> | seq(Стержень[i],i=1..M), |
> | scaling=constrained,axes=none);
Заполнение матрицы |
> | G:=Matrix(M,M): |
> | for i to M do |
> | Lx:=x[Nend[i]]-x[Nbeg[i]]: |
> | Ly:=y[Nend[i]]-y[Nbeg[i]]: |
> | L[i]:=sqrt(Lx^2+Ly^2): |
> | G[2*Nbeg[i]-1,i]:=Lx/L[i]:G[2*Nbeg[i],i]:=Ly/L[i]: |
> | if Nend[i]<=N-K then G[2*Nend[i]-1,i]:=-Lx/L[i]:G[2*Nend[i],i]:=-Ly/L[i]:fi: |
> | od: |
ПраваЯ часть системы - вектор нагрузок
> | B:=Vector(M): |
> | for i to m do |
> | B[2*nF[i]-1]:=F[1][i]: B[2*nF[i]]:=F[2][i]: |
> | od: |
> | S := LinearSolve(Matrix(M,G),-B): |
> | Set (t1=" \n",t2=" \n"): |
> | for i to M do |
> | Set(t1(appendline)=convert(i,string)): |
> | Set(t2(appendline)=convert(evalf(S[i],4),string)): |
> | od: |
> | end use: |
> | Ris: |
> | end proc: |
> | runFerma:=proc() |
> | local a,c1,c2,p1,mplt,z,T1,T2,zz; |
> |
> | use Maplets:-Elements in |
> | шрифт:='font'=Font(14): |
> | z:='width'=5,'height'=20,'editable'='false',шрифт: |
> | T1:=TextBox['t1'](z): |
> | T2:=TextBox['t2'](z): |
> | a[1]:=["[x ]=",TextField['Tx'](шрифт,'value'=[0,2,4,2,4,5,0,4],'tooltip'="Введите координаты x")]: |
> | a[2]:=["[y ]=",TextField['Ty'](шрифт,'value'=[0,0,0,2,1,0,-1,-1],'tooltip'="Введите координаты y")]: |
> | a[3]:=["[beg]=",TextField['TNbeg'](шрифт,'value'=[1,2,1,2,2,3,4,3,1,3],'tooltip'="Введите номера узлов")]: |
> | a[4]:=["[end]=",TextField['TNend'](шрифт,'value'=[2,3,4,4,5,5,5,6,7,8],'tooltip'="Введите номера узлов")]: |
> | a[5]:=["Число опор=",TextField['TNopr'](шрифт,'value'=3,'tooltip'="Введите число опорных узлов")]: |
> | a[6]:=["[Fx]=",TextField['TFx'](шрифт,'value'=[10],'tooltip'="Введите силу Fx")]: |
> | a[7]:=["[Fy]=",TextField['TFy'](шрифт,'value'=[0],'tooltip'="Введите силу Fy")]: |
> | a[8]:=["[NF]=",TextField['TnF'](шрифт,'value'=[4],'tooltip'="Номера загруженных узлов")]: |
> | c1:=Button("Run", Evaluate('F' = 'display(Frm())')): |
> | c2:=Button("OK",Shutdown(['F'])): |
> | p1:=Plotter['F']('height'=300): |
> | mplt:= Maplet(Evaluate(function='Frm()'), |
> | Window('title'="Ферма", |
> | ["ТЕОРЕТИЧЕСКАЯ МЕХАНИКА", |
> | [BoxColumn( seq(a[i],i=1..8)),[["n","S[n]"],[T1,T2]], |
> | [[p1],[c1,c2]] |
> | ] |
> | ] ) |
> | ):#Maplet |
> | Maplets:-Display(mplt): |
> | end use; |
> | end proc; |
> | end module: |
> | FermaModule:-runFerma(): |
Warning, `шрифт` is implicitly declared local to procedure FermaModule:-runFerma
Initializing Java runtime environment.
> |