Программа 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(): |
> |