Программа 38. Задача 52

>    restart;

>    with(plots): with(plottools):

>    JOmegaModule:=module()

>     export JOmg,runJOmg:

>     JOmg:=proc() local N,n,alpha_x,alpha_y,x,y,ЛиниЯ,

>     xP,yP,xP0,yP0,Sx,Sy,Swx,Swy,F,Jx,Jy,Jxy,Jxc,Jyc,Jxyc,Jw,xc,yc,Intgr,W,v1,D1,Центр,

        n0,h,Шрифт,i,Сечение,Точка,Ris:

>     global k,w:

>     ЛиниЯ:=proc(i,j) CURVES([[x[i],y[i]],[x[j],y[j]]],THICKNESS(3)): end:

>     use Maplets[Tools] in

>     x:=Get('Tx'::list); # Координаты точек

>     y:=Get('Ty'::list); #

>     h:=Get('Th::float');# Толщина

>     N:=nops(x):         # Число точек

>     n:=Get('Tn'::list); # Ветви

>     xP0:=Get('Tpx'::integer); # x полюса  

>     yP0:=Get('Tpy'::integer); # y полюса  

>     k:=nops(n):               # Число ветвей

>     n0:=n[1][1]:              # Начало отсчета

>     W:=proc(x0,y0) local i,j,p,q:

>    for j to k do

>     w[n0]:=0:

>     for i to nops(n[j])-1 do

>     p:=n[j,i]:     q:=n[j,i+1]:

>     w[q]:=-(x[p]-x0)*(y[q]-y0)+(x[q]-x0)*(y[p]-y0)+w[p];

>    od:od: end proc:

>     Шрифт:=FONT(TIMES,BOLD,10):

>     for i to N do

>       Точка[i]:=PLOT(TEXT([x[i]+0.2,y[i]+0.2],convert(i,symbol)),Шрифт,COLOR(HUE,0.7)):

>     od:

>      Сечение:=seq(seq(ЛиниЯ(n[j,i],n[j,i+1]),i=1..nops(n[j])-1),j=1..k),

>                   seq(Точка[i],i=1..N):

>    W(xP0,yP0): # Получаем эпюру w

>    for i to N do

>     Set(TLw0[i](caption)=convert(evalf(w[i],4),string)):

>    od:

>    v1:=Vector(1..N,1):

Интегрируем по правилу Верещагина

>    Intgr:=proc(A,B)

>    local dst,s,j,i,p,q: global k:

>    s:=0:

>    for j to k do

>     for i to nops(n[j])-1 do

>     p:=n[j,i]: q:=n[j,i+1]:

>     dst:=h*sqrt((x[p]-x[q])^2+(y[p]-y[q])^2):

>      s:=s+dst/6*(2*A[q]*B[q]+A[q]*B[p]+A[p]*B[q]+2*A[p]*B[p]):

>     od;

>    od; return(s); end:

>    F:=Intgr(v1,v1):# Площадь

>    Jx:=Intgr(y,y): # Моменты инерции

>    Jy:=Intgr(x,x):

>    Jxy:=Intgr(x,y):

>    Sx:=Intgr(v1,y):# Статич.моменты

>    Sy:=Intgr(v1,x):

>    xc:=Sy/F: yc:=Sx/F:# Центр тЯжести

>    Jxc:=Jx-F*yc^2:  Jyc:=Jy-F*xc^2: Jxyc:=Jxy-F*xc*yc:

>    x:=evalm(x-xc):  y:=evalm(y-yc):

>    Swy:=Intgr(w,x): Swx:=Intgr(w,y):

>    alpha_x:= (-Swx*Jyc+Swy*Jxyc)/(Jxc*Jyc-Jxyc^2):

>    alpha_y:= (Swy*Jxc-Swx*Jxyc)/(Jxc*Jyc-Jxyc^2): #Центр кручениЯ

>    xP:=alpha_x+xP0-xc; yP:=alpha_y+yP0-yc;

>    W(xP,yP):# Получаем эпюру w с полюсом  P(xP,yP)

>    D1:=Intgr(w,v1)/F:

>    w:=map(x->x-D1,w);#Эпюра w главных. сект.коорд.

>    Jw:=Intgr(w,w):

>      Центр:=PLOT(POINTS([xP+xc,yP+yc],[xc,yc])):

>    Ris:=display(Центр,Сечение,scaling=CONSTRAINED):

>    Set(TF=F):     Set(Txc=xc):   Set(Tyc=yc):

>    Set(TJxc=Jxc): Set(TJyc=Jyc): Set(TJxyc=Jxyc):

>    Set(TJw=Jw):   Set(Txw=xP+xc):Set(Tyw=yP+yc):

>    for i to N do

>     Set(TL[i](caption)=convert(i,string)):

>     Set(TLw[i](caption)=convert(evalf(w[i],4),string)):

>    od:

>    end use:

>    Ris:

>    end proc:

>   

>    runJOmg:=proc()

>    local xp0,yp0,a,k,BRun,p1,mplt,z,z0,z1,z2,H0,Sn,Sw,Sw0,Rez;

>    z0:=editable = false:

>    z:='width'=7,z0:

>    z1:='width'=1,'height=15',z0:

>    z2:='width'=5,'height=15',z0:

>    use Maplets:-Elements in

>    a[1]:=["[x]=",TextField['Tx']('value'=[0,-8,-8,-4.],'tooltip'="Введите координаты x")]:

>    a[2]:=["[y]=",TextField['Ty']('value'=[0,0,10,10],'tooltip'="Введите координаты y")]:

>    a[3]:=["[v]=",TextField['Tn']('value'=[[1, 2, 3, 4]],'tooltip'="Введите ветви")]:

>    xp0:="xp=",TextField['Tpx'](5,'value'='0','tooltip'="Введите xp"):

>    yp0:="yp=",TextField['Tpy'](5,'value'='0','tooltip'="Введите yp"):

>    H0:="h=",TextField['Th'](5,'value'='0.2','tooltip'="Введите толщину"):

>    k[1]:=["F",TextField['TF'](z,'tooltip'="Площадь")]:

>    k[2]:=["xc",TextField['Txc'](z,'tooltip'="Центр тЯжести")]:

>    k[3]:=["yc",TextField['Tyc'](z)]:

>    k[4]:=["Jxc",TextField['TJxc'](z,'tooltip'="Момент инерции")]:

>    k[5]:=["Jyc",TextField['TJyc'](z)]:

>    k[6]:=["Jxyc",TextField['TJxyc'](z,'tooltip'="Центробежный момент инерции")]:

>    k[7]:=["Jw",TextField['TJw'](z,'tooltip'="Секториальный момент инерции")]:

>    k[8]:=["xw",TextField['Txw'](z,'tooltip'="Центр изгиба")]:

>    k[9]:=["yw",TextField['Tyw'](z)]:

>    BRun:=Button("Run", Evaluate('P' = 'display(JOmg())')):

>    p1:=Plotter['P']('height'=380):

>    Sn:=seq(Label[TL[i]](  ),i=1..14):

>    Sw0:=seq(Label[TLw0[i]](  ),i=1..14):

>    Sw:=seq(Label[TLw[i]](  ),i=1..14):

>    Rez:=seq(k[i],i=1..9):

>    mplt:= Maplet(Evaluate(function='JOmg()'),

>          Window('title'="Тонкостенное сечение",

>          ["Сопротивление материалов",

>            [BoxColumn(seq(a[i],i=1..3),[xp0,yp0,H0],[BRun,

>            [BoxColumn(border,["n","  w0   ","  w  "]),

>             BoxColumn(border,[[Sn],[Sw0],[Sw]])]]),p1],[Rez]   

>          ]     )

>                 ):#Maplet

>        Maplets:-Display(mplt):

>    end use;

>    end proc;

>    end module:

>    JOmegaModule:-runJOmg():

Initializing Java runtime environment.

>   

>