资源描述
任意复合梁结构截面性质可视化计算器
大学生创新训练计划
题 目:任意复合梁结构截面性质可视化计算器
学 院: 建筑与土木工程学院
系: 土木工程系
专 业: 土木工程
2015 年 1 月
项目计划书
摘要:
通过力学分析、数值计算和Matlab程序编写对任意复合梁结构截面性质进行计算,应用于形式简单但是计算过程繁杂的复合材料结构的截面,主要以本科生阶段的材料力学的学习为基础,先以各种简单材料的截面的惯性矩为研究切入点,经过力学分析,数值计算等一系列前期准备之后,通过Matlab进行程序编写,使用GUI界面,使得到的结果直观可视化的呈现出来。本项目可使任意复合梁结构截面性质计算从复杂的计算过程中脱离出来,只需要将所求的任意形状的截面在可视化的界面中按提示输入或导入相应的坐标,即可获得所需的截面的性质。相比传统的计算,更为简便和直观,输出结果也更加丰富。
关键词:任意截面 惯性矩 Matlab程序 可视化界面
II
目录
一、 引言 - 2 -
二、 研究过程 - 2 -
(一) 项目实施过程 - 2 -
(二) 算法的研究探索过程 - 3 -
(三) Matlab相关操作学习及研究过程 - 17 -
三、 研究成果 - 18 -
四、 经费预算 - 22 -
附录 - 23 -
任意复合梁结构截面性质(惯性矩部分)
可视化计算器
一、 引言
截面惯性矩,截面各微元面积与各微元至截面上某一指定轴线距离二次方乘积的积分。截面惯性矩是衡量截面抗弯能力的一个几何参数。任意截面图形内取微面积dA与其搭配z轴的距离y的平方的乘积y2dA定义为微面积对z轴的惯性矩,在整个图形范围内的积分则称为此截面对z轴的惯性矩Iz。
工程结构中,弯曲变形是最常见的结构变形形式。在对其进行强度、刚度计算时,需要用到几何量——惯性矩。由于它相对于其它几何量而言,具有内容复杂,变化大,掌握起来难、烦等特点。
使用计算器可使任意复合梁结构截面惯性矩计算从复杂的计算过程中脱离出来,只需要将所求的任意形状的截面在可视化的界面中按提示输入或导入相应的坐标,即可获得所需的截面的性质。相比传统的计算,更为简便和直观,输出结果也更加丰富。
二、 研究过程
(一) 项目实施过程
2014年9月至12月
前期计算准备
1、 复习面积矩、惯性矩、极惯性矩的求法。
2、 初步熟悉并学习matlab编程方法。
3、 小组分工对各种一般工程构件横截面的惯性矩、极惯性矩进行计算。
4、 12月15日进行小组讨论,对该阶段成果进行汇总。
2014年12月至2015年1月
基本截面图形程序编写
1、12月18日与指导老师交流,着手一般四边形形心主惯性矩程序运算,并学习matlab交互界面制作。
2、 分工对一般四边形形心主惯性矩进行计算,寻找最佳运算方法。
3、 12月27日小组讨论对运算方法进行整合。
4、 着手编程,初步得出一般四边形形心主惯性矩运算的程序。
5、 1月4日与指导老师交流,验算程序并在老师指导下得出程序合理化简化的方法。
6、 1月14日进行小组讨论,讨论程序修改方案
7、 对程序语言按要求进行修改,使程序更为简洁,对用户交互界面中图形显示区域进行修改,初步修复了图形显示问题。
8、 1月21日与指导老师交流,检验当前成果,并提出对其他一般图形的运算编程。
(二) 算法的研究探索过程
经分析,工程上的复杂截面大多可以分解为多个三角形后进行分析计算,且三角形的几何性质是我们比较熟悉和容易分析,因此对给定三个顶点坐标的三角形的几何性质的计算是计算工程复杂截面基础与前提。
1、单元坐标法求截面静距、惯性矩及惯性积
已知三角形的三个顶点A、B、C的坐标分别为(x1,y1)、(x2,y2)、(x3,y3)。根据三角形面积的定义及海伦公式可用三个顶点坐标表示三角形的面积为
(1)
根据静距、惯性矩及惯性积的定义及微积分的相关知识可用三角形的三个顶点坐标将其表示如下:
(2)
同理 (3)
(4)
(5)
(6)
2、简单三角形求主惯性矩
由形心的定义及其与静距的关系可得形心如下:
(7)
(8)
利用平行移轴定理可得三角形对形心轴轴与轴的惯性矩和惯性积
(9)
(10)
(11)
在对形心轴的惯性矩及惯性积的基础上利用转轴公式求得截面的形心主惯性矩
(12)
(13)
3、简单四边形形心主惯性矩的计算
求简单四边形的形心主惯性矩是在三角形的基础上进行,将四边形分成两个三角形进行计算。四个顶点按逆时针分别为A、B、C、D。由面积、静距、惯性矩及惯性积的定义可知,他们均满足叠加性,可得下面的计算过程:
(14)
(15)
(16)
(17)
(18)
(19)
(20)
(21)
(22)
(23)
(24)
(25)
(26)
(27)
(28)
(29)
(30)
(31)
(32)
(33)
(34)
(35)
(36)
4、复杂多边形的形心主惯性矩计算
在已完成简单三角形和简单四边形的计算后,根据截面的几何性质的可叠加性,复杂多边形的计算就变得比较简单了,其实就是重复的过程,从算法说就是循环累加的过程。因此复杂边形的计算就是将其分解为多个三角形而进行。这样,无论多复杂的截面,只要能分解为三角形就可以对其形心主惯性矩进行计算。计算过程如下:
由面积公式
(37)
计算得各个三角形的面积
由静距公式
(38)
计算得各个三角形的静距
及
同理由惯性矩及惯性积的公式
(39)
(40)
(41)
可得
及
由截面几何性质的可叠加性可得
(42)
(43)
(44)
(45)
(46)
(47)
例如正六边形的推导法:
设正六边形的边长为a,由对称性可知,形心为O
求
先考虑
关于自己的形心惯性矩
(48)
所以,它关于x轴的惯性矩为
(49)
由惯性矩定义可得对x轴的惯性矩相同
考虑,关于自己的形心惯性矩
(50)
(51)
所以
(52)
求
先考虑矩形,对自己形心的惯性矩
(53)
(54)
再考虑
(55)
(56)
(57)
6、曲线图形组合截面的形心主惯性矩的计算
由于工程实际中并不是所有的截面都是多边形,还可能包括圆形、半圆形、扇形以及多边形与曲线图形的组合,主要是指工程上应用比较多的多边形与半圆和扇形的组合以及圆截面。因为半圆、圆形及扇形截面的特殊性都有各自独特几何性质计算公式,因此当要计算这样的组合截面时只需在计算过程中将各自的几何性质带入循环与累加计算过程中就可以解决曲线截面及组合截面形心主惯性矩的计算。
(1) T字型
形心为,其中:
(58)
T形截面对形心轴的惯性矩:
(59)
T形截面对形心轴的惯性积:
所以, 便是形心主惯性矩。
(2) 工字型
形心为C,其中:
(60)
工字型截面对形心轴的惯性矩:
(61)
(62)
工字型截面对形心轴的惯性积:
所以, 便是形心主惯性矩。
(3) 半圆形
半圆惯性矩公式:
(63)
(为半圆的半径) (64)
形心C距离圆心
转轴公式前提:直角坐标系逆时针旋转角度后与直角坐标系重合
1、
(图)
当 时,则
如图(),由
(65)
(66)
(67)
可得
(68)
C
当时,的值和形心C的坐标也与上述一致。
2、
(图)
当 时,则
如图(),由
(69)
(70)
(71)
C
当时,的值和形心C的坐标也与上述一致。
转轴公式:
(72)
(73)
(74)
综上可得:
(75)
(76)
(77)
根据平行移轴公式:
(78)
(79)
(80)
(81)
即可得半圆形截面相对于直角坐标系的惯性矩、惯性积公式。
(三) Matlab相关操作学习及研究过程
经过比较以及教师推荐选定Matlab的GUI色合计界面作为本软件的开发界面,充分利用MATLAB强大的计算及作图功能以及简便的界面设计构件。
前期自习了Matlab的常用语句,包括:常规运算,矩阵运算,定义函数,二维作图等。
之后开始自主学习GUI界面的设计及编程方法:
从界面排版开始,根据不同单元的不同用途在面板按照预期功能需要确立下主要的“数据导入”、“运算按钮”、“结果数值、图像显示”三个要素并进行分区。
通过视频学习与GUI相关的编码,设置“PushButton”、“Static Text”、“Edit text”、“Axes”以及“Panel”来完成功能实现以及排版,期间深刻认识运用了“Tag”的含义,并自定义文字的格式控制。之后学习并使用了“文件调用”以及上述相关部分制作得初期成果。
三、 研究成果
(1) 按照格式在txt录入坐标数据 ,并保存。
(2)打开程序界面,
(3)点击打开文件导入录入的txt文件
(4) 点击计算即可显示结果,其中蓝色星号即为形心
(五边形)
(半圆形)
(矩形)
(T字型)
(工字型)
四、 经费预算
开支科目
预算金费
(元)
主要用途
预计使用时间
1. 业务费
2400
(1)能源动力费
400
能源耗费
2014-08-01 至2015-05-31
(2)会议费
300
租用会议场所费用、会议资 料费、茶水费
2014-08-01 至2015-05-31
(3)差旅费
500
会议注册费、交通费等
2014-08-01 至2015-05-31
(4)文献检索费
700
文献检索、复印、打印、网 络费等
2014-08-01 至2015-05-31
(5)论文出版费
500
论文版面费
2014-08-01 至2015-05-31
2.仪器设备购置费
0
3.材料费
600
购置进行试验需要的材料; 购置相关编程软件等
2014-08-01 至2015-05-31
4.企业注册费
0
预算经费总额
3000
附录
Matlab程序代码
function varargout = untitled(varargin)
% UNTITLED M-file for untitled.fig
% UNTITLED, by itself, creates a new UNTITLED or raises the existing
% singleton*.
%
% H = UNTITLED returns the handle to a new UNTITLED or the handle to
% the existing singleton*.
%
% UNTITLED('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in UNTITLED.M with the given input arguments.
%
% UNTITLED('Property','Value',...) creates a new UNTITLED or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before untitled_OpeningFunction gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to untitled_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Copyright 2002-2003 The MathWorks, Inc.
% Edit the above text to modify the response to help untitled
% Last Modified by GUIDE v2.5 23-Feb-2015 20:59:48
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @untitled_OpeningFcn, ...
'gui_OutputFcn', @untitled_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before untitled is made visible.
function untitled_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to untitled (see VARARGIN)
% Choose default command line output for untitled
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes untitled wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = untitled_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure
varargout{1} = handles.output;
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
[filename,pathname]=uigetfile(...
{'*.txt','(*.txt)';...
'*,*','ì(*.*)'}, ...
'');
if isequal(filename,0)||isequal(pathname,0)
return;
end
% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
if (get(handles.R1,'value'))
A=get(handles.edit3,'string');
B=get(handles.edit4,'string');
a=str2num(A);
b=str2num(B);
Ix0=a^3*b/12;
Iy0=b^3*a/12;
Xba=b/2;
Yba=a/2;
c=num2str(Ix0);
d=num2str(Iy0);
e=num2str(Xba);
f=num2str(Yba);
QuaX=[0 0 b b 0];
QuaY=[0 a a 0 0];
plot(QuaX,QuaY,'r',Xba,Yba,'*');
set(handles.text4,'String',c);
set(handles.text5,'String',d);
set(handles.text17,'String',e);
set(handles.text18,'String',f);
elseif (get(handles.R2,'value'))
A=get(handles.edit3,'string');
B=get(handles.edit4,'string');
X=get(handles.edit5,'string');
Y=get(handles.edit6,'string');
a=str2num(A);
b=str2num(B);
x=str2num(X);
y=str2num(Y);
E=[0 b b a a-x a;
0 0 b a a-x a-x;
y (b-y) (b-y) a-x 0 a-x;
y y (b-y) a-x 0 0]
n=4;
for i=1:1:n
x1=E(i,1);
x2=E(i,2);
x3=E(i,3);
y1=E(i,4);
y2=E(i,5);
y3=E(i,6);
delta(i)=0.5*det([1 x1 y1;1 x2 y2; 1 x3 y3]);
Sx(i)=delta(i)*(y1+y2+y3)/3;
Sy(i)=delta(i)*(x1+x2+x3)/3;
Ix(i)=delta(i)*(y1*y1+y2*y2+y3*y3+y1*y2+y2*y3+y1*y3)/6;
Iy(i)=delta(i)*(x1*x1+x2*x2+x3*x3+x1*x2+x2*x3+x1*x3)/6;
Ixy(i)=delta(i)*(2*(x1*y1+x2*y2+x3*y3)+x1*(y2+y3)+x2*(y1+y3)+x3*(y1+y2))/12;
end
for i=1:1:(n-1)
j=1;
SY=0;
SX=0;
Delta=0;
Adelta=0;
for j=1:1:(i+1)
SY=SY+Sy(j);
SX=SX+Sx(j);
Delta=Delta+delta(j);
Adelta=Adelta+abs(delta(j));
end
Xba=(SY)/(Delta+eps);
Yba=(SX)/(Delta+eps);
IX=Ix(i)+Ix(i+1);
IY=Iy(i)+Iy(i+1);
IXY=Ixy(i)+Ixy(i+1);
Ix(i+1)=IX;
Iy(i+1)=IY;
Ixy(i+1)=IXY;
end
IX=IX-Yba*Yba*(Delta);
IY=IY-Xba*Xba*(Delta);
Ix0=(IX+IY)/2+0.5*sqrt((IX-IY)^2+4*IXY*IXY);
Iy0=(IX+IY)/2-0.5*sqrt((IY-IY)^2+4*IXY*IXY);
c=num2str(Ix0);
d=num2str(Iy0);
e=num2str(Xba);
f=num2str(-Yba);
set(handles.text4,'String',c);
set(handles.text5,'String',d);
set(handles.text17,'String',e);
set(handles.text18,'String',f);
E1=[0 b b (b-y) (b-y) y y 0 0];
E2=[0 0 -x -x -a -a -x -x 0];
plot(E1,E2,'b',Xba,-Yba,'*');
elseif (get(handles.R3,'value'))
A=get(handles.edit3,'string');
B=get(handles.edit4,'string');
X=get(handles.edit5,'string');
Y=get(handles.edit6,'string');
P=get(handles.edit7,'string');
O=get(handles.edit8,'string');
a=str2num(A);
b=str2num(B);
x=str2num(X);
y=str2num(Y);
p=str2num(P);
o=str2num(O);
E=[0 b b a a-x a;
0 0 b a a-x a-x;
y (b-y) (b-y) a-x p a-x;
y y (b-y) a-x p p;
(y-o) (b-y+o) (b-y+o) p 0 p;
(y-o) (y-o) (b-y+o) p 0 0];
n=6;
for i=1:1:n
x1=E(i,1);
x2=E(i,2);
x3=E(i,3);
y1=E(i,4);
y2=E(i,5);
y3=E(i,6);
delta(i)=0.5*det([1 x1 y1;1 x2 y2; 1 x3 y3]);
Sx(i)=delta(i)*(y1+y2+y3)/3;
Sy(i)=delta(i)*(x1+x2+x3)/3;
Ix(i)=delta(i)*(y1*y1+y2*y2+y3*y3+y1*y2+y2*y3+y1*y3)/6;
Iy(i)=delta(i)*(x1*x1+x2*x2+x3*x3+x1*x2+x2*x3+x1*x3)/6;
Ixy(i)=delta(i)*(2*(x1*y1+x2*y2+x3*y3)+x1*(y2+y3)+x2*(y1+y3)+x3*(y1+y2))/12;
end
for i=1:1:(n-1)
j=1;
SY=0;
SX=0;
Delta=0;
Adelta=0;
for j=1:1:(i+1)
SY=SY+Sy(j);
SX=SX+Sx(j);
Delta=Delta+delta(j);
Adelta=Adelta+abs(delta(j));
end
Xba=(SY)/(Delta+eps);
Yba=(SX)/(Delta+eps);
IX=Ix(i)+Ix(i+1);
IY=Iy(i)+Iy(i+1);
IXY=Ixy(i)+Ixy(i+1);
Ix(i+1)=IX;
Iy(i+1)=IY;
Ixy(i+1)=IXY;
end
IX=IX-Yba*Yba*(Delta);
IY=IY-Xba*Xba*(Delta);
Ix0=(IX+IY)/2+0.5*sqrt((IX-IY)^2+4*IXY*IXY);
Iy0=(IX+IY)/2-0.5*sqrt((IY-IY)^2+4*IXY*IXY);
c=num2str(Ix0);
d=num2str(Iy0);
e=num2str(Xba);
f=num2str(-Yba);
set(handles.text4,'String',c);
set(handles.text5,'String',d);
set(handles.text17,'String',e);
set(handles.text18,'String',f);
E1=[0 b b (b-y) (b-y) (b-y+o) (b-y+o) (y-o) (y-o) y y 0 0];
E2=[0 0 -x -x (-a+p) (-a+p) -a -a (-a+p) (-a+p) -x -x 0];
plot(E1,E2,'y',Xba,-Yba,'*');
else
Sta=importdata('1.txt');
n=size(Sta,1);
i=1;
line(1)=0;
halfc(1)=0;
for i=1:1:n
if Sta(i,1)==1
x1=Sta(i,2);
x2=Sta(i,4);
x3=Sta(i,6);
y1=Sta(i,3);
y2=Sta(i,5);
y3=Sta(i,7);
delta(i)=0.5*det([1 x1 y1;1 x2 y2; 1 x3 y3]);
Sx(i)=delta(i)*(y1+y2+y3)/3;
Sy(i)=delta(i)*(x1+x2+x3)/3;
I
展开阅读全文