Программа 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.

>