Программа 6. Секториальные характеристики
| > | 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,t,BoK,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'=[-46,-23,23,46.,-46,-23,23,46],'tooltip'="Введите координаты x")]: |
| > | a[2]:=["[y]=",TextField['Ty']('value'=[ 21$4,0$4],'tooltip'="Введите координаты y")]: |
| > | a[3]:=["[v]=",TextField['Tn']('value'=[[1, 2, 3, 4],[2,6,5],[3,7,8]],'tooltip'="Введите ветви")]: |
| > | xp0:="xp=",TextField['Tpx'](5,'value'='0','tooltip'="Введите xp"): |
| > | yp0:="yp=",TextField['Tpy'](5,'value'='21','tooltip'="Введите yp"): |
| > | H0:="h=",TextField['Th'](5,'value'='1.0','tooltip'="Введите толщину"): |
| > | t[1]:=["F=",TextField['TF'](z,'tooltip'="Площадь")]: |
| > | t[2]:=["xc=",TextField['Txc'](z,'tooltip'="Центр тЯжести")]: |
| > | t[3]:=["yc=",TextField['Tyc'](z)]: |
| > | t[4]:=["Jxc=",TextField['TJxc'](z,'tooltip'="Момент инерции")]: |
| > | t[5]:=["Jyc=",TextField['TJyc'](z)]: |
| > | t[6]:=["Jxyc=",TextField['TJxyc'](z,'tooltip'="Центробежный момент инерции")]: |
| > | t[7]:=["Jw=",TextField['TJw'](z,'tooltip'="Секториальный момент инерции")]: |
| > | t[8]:=["xw=",TextField['Txw'](z,'tooltip'="Центр изгиба")]: |
| > | t[9]:=["yw=",TextField['Tyw'](z)]: |
| > | BRun:=Button("Run", Evaluate('P' = 'display(JOmg())')): |
| > | BoK:=Button("OK",Shutdown(['P'])): |
| > | 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(t[i],i=1..9): |
| > | mplt:= Maplet(Evaluate(function='JOmg()'), |
| > | Window('title'="Тонкостенное сечение", |
| > | ["Сопротивление материалов", |
| > | [BoxColumn(seq(a[i],i=1..3),[xp0,yp0,H0],[[BRun,BoK], |
| > | [BoxColumn(border,["n"," w0 "," w "]), |
| > | BoxColumn(border,[[Sn],[Sw0],[Sw]])]]),[p1],[Rez]] |
| > | ] ) |
| > | ):#Maplet |
| > | Maplets:-Display(mplt): |
| > | end use; |
| > | end proc; |
| > | end module: |
| > | JOmegaModule:-runJOmg(): |
| > |