第一篇:水表指针识别大作业最终报告
水表指针识别大作业最终报告
摘 要:由于读表过程中存在误差和错误,造成水表读数不准确,在水表图像处
理中及读数作了详细的讲述。而图像边缘检测是本次大作业的重点,着 重讲解了用Sobel算子和Prewitte算子来处理图像的边缘检测。通过分析 了俩种Hough变换的优缺点以后,采用较为有效的点Hough变换作为大/小圆检测的方式。本次大作业用前景广泛,对人类的生产技术的改进具有积极且实际的意义,有很大的市场价值。
关键词:图像处理;边缘检测;水表指针;Hough 变换
实验目的:输入水表图像,输出三个指针数值。
实验流程:(1)边缘检测:利用Sobel算子实现水表图像轮廓的边缘检测(2)反色变换:反色的实际含义是将R、G、B 值反转,使图像有用的
信息更加明显突出。
(3)二值化:通过直方图,利用图像分割方法,分割图像中的指针信
息区域并提取指针信息;
(4)圆检测:利用Hough 变换找到圆心,并计算半径;
(5)指针检测:采用模板匹配法确定指针能指示方位(指针中心线相
对于零刻度线夹角);
(6)输出结果并查看信息:根据夹角计算出每个指针示值,由此可确
定水表的读数。
实验内容及结果显示: a.边缘检测及反色
第一轮利用Prewitt算子进行边缘检测,用sobel算子处理后的反色效果图如下:
b.阈值选择及二值化
图像二值化的目的是将图像一分为二,即将图像划分为物体和背景两个部分,利用图像的灰度直方图以确定相应的分割阈值是实现图像二值化的一个方法,我们可以发现直方图的阈值大概取在180左右。为了精确阈值,我们做了阈值选择功能通过细调确定我们的最后阈值,而且还用于做不同水表图的测试用,及更改步骤顺序用。最后决定选取阈值为178.直方图
阈值选择
在此过程中还拓展了二值化中的大律法和边界法,最后我们在把阈值设为178后的处理效果图如下:
c.大/小圆检测
圆Hough 变换是目前应用最为广泛的圆检测方法,该方法的最大特点是可靠性高,在噪声、变形、甚至部分区域丢失的状态下仍然能取得理想的结果。为了确定圆心坐标和半径的值,圆Hough 变换是一种有效的方法。
圆的方程为(x-a)2 +(y-b)2 = r2,其中a,b,r分别表示圆的纵横圆心坐标和半径的值。式中有三个参数a ,b ,r,所以需要在参数空间建立一个三维累加数组A(a,b,r),根据具体图像计算出每一个三元组(a,b,r),对R进行累加;R(a , b , r)← R(a , b , r)+ 1 ;然后对R(a,b,r)进行搜索,找出一个三元组(a0,b0,c0),使得对所有的R(a,b,r)中R(a0,b0,c0)最大。经过以上运算得到的三元组(a0,b0,c0)即认为是指定区域内存在的圆形目标。该算法的关键是通过峰值检测求出三元组(a0,b0,c0)以确定圆的参数。
为了确定圆心坐标和半径的值,圆Hough变换是一种有效的方法。根据圆的几何性质,确定三个点K,L,M,KL的中垂线Lkl 与LM 的中垂线Ilm 必然相交于圆C 的中心O,设K、L、M 3 点的坐标分别为(Xk,Yk)、(Xl,Yl)、(Xm,Ym),则Lkl和Ilm的方程分别为:
Lkl: y= Kkl+Dkl(Kkl=(Xk-Xl)/(Yk-Yl), Dkl =Yk +Yl-Kkl(Xkl(Xk-Xl))/2)Ilm: y= Klm+Dlm(Klm=(Xl-Xm)/(Yl-Ym), Dlm =Ym +Yl-Klm(Xlm(Xl-Xm))/2)
原理图
从而计算出圆心x,y和半径r,所以总结为半径Ri,中心(Ai,Bi)的圆周上任意不共线的3 点(以下称为点组)对应R-B-R 空间中一点(Ai,Bi,Ri),也就是所谓的点Hough变换,具体的圆心检测我们将在下星期做详细的分析,目前我们做的效果显示图如下:
大圆检测
小圆检测
d.指针检测
指针检测有如下步骤:
(1)上边的小圆检测,确定了三个圆心点。即0.01,0.001,0.0001三个指针,三点组成一个三角形;
(2)确定长边。由水表指针的三个圆心点的特点,0.01 和0.0001指针所组成的直线为长边;
(3)确定第三点在长边的上边还是下边;
(4)确定三点的位置。设为0.01->1;0.001->2;0.0001->3;
输入0指针的偏转角度,以点1为中心,边13顺时针旋转到0指针方向的角度是固定的(在本设计中使用的水表角度为135 度)。将这个已知角度转化为跟x轴正方向的转角,计算三根指针的偏转,得到最后的读数。效果图如下:
指针识别效果图
F.最终检测结果报告
经过一系列的处理我们可以得到大圆的圆心坐标,还有每个指针所在的小圆圆心坐标及角度,最重要的我们还可以直接从中读出每个指针的读数。这样我们就可以很自然地读出该水表的最终总的读数。具体显示如下:
最终检测结果显示
E.结论与总结
后面的重点我们将放在如何优化上,我们作了如下计划:
A.在边缘检测中,改进原有算法,提高检测的准确度,以获得有效边缘,减少对毛刺边缘的无效检测;
B.在二值化中,我们的阈值取得看似挺好,但得寻找一种根据算法自己选择最佳阈值的方法,不然换张水表图就得人工选个阈值比较麻烦;
C.在圆检测中,加快检测的速度,提高检测的精确性,做一些必要的改进。D.圆检测用于多指针式仪表上,尤其是很多企业目前依旧采用低效率的人工眼检测,所以在目前工业上有很大的前景
第二篇:大作业报告格式
大作业报告格式
一、题目及要求
二、设计思路
三、问题分析及解决方案
四、输入输出
五、源代码
六、测试结果
七、总结、系统评价及展望
八、***53922
第三篇:Android大作业报告
移动设备软件应用与开
发 大作业报告
姓 名: 学 号: 班 级: 院 系: 日 期:
任课教师:
一、程序的运行环境、安装步骤
1、运行环境 游戏运行环境:Android1.5以上版本
2、程序的组成部份:
2.1、JDK安装
1.我的电脑->属性->高级->环境变量->系统变量中添加以下环境变量: 2.JAVA_HOME值为: D:Program FilesJavajdk1.6.0_18(你安装JDK的目录)3.CLASSPATH值为:.;%JAVA_HOME%libtools.jar;%JAVA_HOME%libdt.jar;%JAVA_HOME%bin;4.Path: 在开始追加 %JAVA_HOME%bin;5.NOTE:前面四步设置环境变量对搭建Android开发环境不是必须的,可以跳过。
安装完成之后,可以在检查JDK是否安装成功。打开cmd窗口,输入java –version 查看JDK的版本信息。出现类似下面的画面表示安装成功了:
2.2、Eclipse安装 2.3、Android SDK安装
在Android Developers下载android-sdk_r05-windows.zip,下载完成后解压到任意路径。运行SDK Setup.exe,点击Available Packages。如果没有出现可安装的包,请点击Settings,选中Misc中的“Force https://...”这项,再点击Available Packages。
选择希望安装的SDK及其文档或者其它包,点击Installation Selected、Accept All、Install Accepted,开始下载安装所选包
在用户变量中新建PATH值为:Android SDK中的tools绝对路径(本机为D:AndroidDevelopandroid-sdk-windowstools)。image图
2、设置Android SDK的环境变量
“确定”后,重新启动计算机。重启计算机以后,进入cmd命令窗口,检查SDK是不是安装成功。
运行 android –h 如果有类似以下的输出,表明安装成功:
图
3、验证Android SDK是否安装成功
2.4、ADT安装
打开 Eclipse IDE,进入菜单中的 “Help”-> “Install New Software” 点击Add...按钮,弹出对话框要求输入Name和Location:Name自己随便取,Location输入http://dl-ssl.google.com/android/eclipse。如下图所示:
确定返回后,在work with后的下拉列表中选择我们刚才添加的ADT,我们会看到下面出有Developer Tools,展开它会有Android DDMS和Android Development Tool,勾选他们。如下图所示:
然后就是按提示一步一步next。完成之后:
选择Window > Preferences...在左边的面板选择Android,然后在右侧点击Browse...并选中SDK路径,本机为:
D:AndroidDevelopandroid-sdk-windows点击Apply、OK。配置完成。2.5、创建AVD 为使Android应用程序可以在模拟器上运行,必须创建AVD。
1、在Eclipse中。选择Windows > Android SDK and AVD Manager
2、点击左侧面板的Virtual Devices,再右侧点击New
3、填入Name,选择Target的API,SD Card大小任意,Skin随便选,Hardware目前保持默认值
4、点击Create AVD即可完成创建AVD 注意:如果你点击左侧面板的Virtual Devices,再右侧点击New,而target下拉列表没有可选项时,这时候你:
点击左侧面板的Available Packages,在右侧勾选https://dl-ssl.google.com/android/repository/repository.xml,如下图所示:
然后点击Install Selected按钮,接下来就是按提示做就行了
要做这两步,原因是在1.3、Android SDK安装中没有安装一些必要的可用包(Available Packages)。2.5、创建Android工程
三、程序开发平台
(1)代码行数:1000
(2)开发环境:Android Developer Tools Build: v22.6.2-1085508
apache-ant-1.9.3
四、程序功能说明:
单机屏幕按住不放可以拖动魔方转动,魔方上下左右空白处可以转动魔方相对那一面。
五、应用核心源码
class MFtestSurfaceView extends GLSurfaceView {
private MFtestRenderer mRenderer;
private float mPreviousX;
private float mPreviousY;//上一次的点
private float mDownPreviousX;
private float mDownPreviousY;//上一次的Down点
// private int oldDownX;
// private int
private float theta;
private float fai;//球坐标
public MFtestSurfaceView(Context context){
super(context);
theta=(float)3.14159/4;
fai=(float)3.14159/4;
// Set the Renderer for drawing on the GLSurfaceView
mRenderer = new MFtestRenderer();
setRenderer(mRenderer);
setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
}
@Override
public boolean onTouchEvent(MotionEvent e){
// MotionEvent reports input details from the touch screen
// and other input controls.In this case, you are only
// interested in events where the touch position changed.float x = e.getX();
float y = e.getY();
switch(e.getAction()){
case MotionEvent.ACTION_MOVE://如果是 移动的话
float dx = xmPreviousY;//x,y的变换值(不是0,就是1)
float te=theta;
theta=theta+dy/100;//角度是弧度值
if(!(theta>0&&theta<3.14159))
{
theta=te;//法线始终向上
}
fai=fai+ dx/100;
//x=rsinθcosφ
mRenderer.eyez=(float)(3*Math.sin(theta)*Math.cos(fai));
//y=rsinθsinφ
mRenderer.eyex=(float)(3*Math.sin(theta)*Math.sin(fai));
////z=rcosθ
利用球坐标使观察点始终维持在半径为3的球上
mRenderer.eyey=(float)(3*Math.cos(theta));
requestRender();
//System.out.println(x+“
”+y);
break;
case MotionEvent.ACTION_DOWN:
mDownPreviousX=x;
mDownPreviousY=y;
break;
case MotionEvent.ACTION_UP:
if((((x-mDownPreviousX)>-5)&&((x-mDownPreviousX)<5))&&(((y-mDownPreviousY)>-5)&&((y-mDownPreviousY)<5)))//(((x-mDownPreviousX)>-3)||((x-mDownPreviousX)>-3))&&(((y-mDownPreviousY)>-3)||((y-mDownPreviousY)>-3))
{
//System.out.println(x-mDownPreviousX);
if(x
<(mRenderer.width*(1-Math.sqrt(18)/6)/2))
{
//左
//System.out.println(x+“
左
”+y);
mRenderer.action = 1;
DrawAnimation();
}
else if(x
>
mRenderer.width-(mRenderer.width*(1-Math.sqrt(18)/6)/2))
{
//右
//System.out.println(x+“
右
”+y);
mRenderer.action = 2;
DrawAnimation();
}
else if(y
<
mRenderer.height/2.0-!)
switch(mRenderer.action){
case 1:
if((mRenderer.eyex > 0)&&(mRenderer.eyez > 0)){
mRenderer.move=76;
}
else if((mRenderer.eyex > 0)&&(mRenderer.eyez < 0)){
mRenderer.move=70;
}
else if((mRenderer.eyex < 0)&&(mRenderer.eyez < 0)){
mRenderer.move=82;
}
else if((mRenderer.eyex < 0)&&(mRenderer.eyez > 0)){
mRenderer.move=66;
}
break;
case 2:
if((mRenderer.eyex > 0)&&(mRenderer.eyez > 0)){
mRenderer.move=66;
}
else if((mRenderer.eyex > 0)&&(mRenderer.eyez < 0)){
mRenderer.move=76;
}
else if((mRenderer.eyex < 0)&&(mRenderer.eyez < 0)){
mRenderer.move=70;
}
else if((mRenderer.eyex < 0)&&(mRenderer.eyez > 0)){
mRenderer.move=82;
}
break;
case 3:
mRenderer.move=85;
break;
case 4:
mRenderer.move=68;
break;
}
}
private void memcpy(int one,int two){
mRenderer.face_color[one]=mRenderer.face_color[two];
mRenderer.face_color[one+1]=mRenderer.face_color[two+1];
mRenderer.face_color[one+2]=mRenderer.face_color[two+2];
}
private void LeftShift(int a,int b,int c,int d){
// a
float temp1=mRenderer.face_color[a];
float temp2=mRenderer.face_color[a+1];
float temp3=mRenderer.face_color[a+2];
memcpy(a,b);
memcpy(b,c);
memcpy(c,d);
mRenderer.face_color[d]= temp1;
mRenderer.face_color[d+1]=temp2;
mRenderer.face_color[d+2]=temp3;
} }
private void DrawRotation(GL10 gl){
// 绘制小立方体
switch(move){ case 70: DrawCube19(gl);DrawCube11(gl);DrawCube2(gl);DrawCube22(gl);DrawCube13(gl);DrawCube5(gl);DrawCube25(gl);DrawCube16(gl);DrawCube8(gl);DrawCube18(gl);DrawCube10(gl);DrawCube1(gl);DrawCube21(gl);DrawCube4(gl);DrawCube24(gl);DrawCube15(gl);
gl.glPushMatrix();gl.glRotatef(-angle,0.0f,0.0f,1.0f);DrawCube0(gl);DrawCube9(gl);DrawCube17(gl);DrawCube3(gl);DrawCube12(gl);DrawCube20(gl);DrawCube6(gl);DrawCube14(gl);
DrawCube7(gl);
DrawCube23(gl);
gl.glPopMatrix();break;case 66: DrawCube0(gl);DrawCube9(gl);DrawCube17(gl);DrawCube3(gl);DrawCube12(gl);DrawCube20(gl);DrawCube6(gl);DrawCube14(gl);
DrawCube23(gl);DrawCube18(gl);DrawCube10(gl);DrawCube1(gl);
DrawCube21(gl);DrawCube4(gl);DrawCube24(gl);DrawCube15(gl);DrawCube7(gl);
gl.glPushMatrix();
gl.glRotatef(angle,0.0f,0.0f,1.0f);
DrawCube19(gl);DrawCube11(gl);DrawCube2(gl);DrawCube22(gl);
DrawCube13(gl);DrawCube5(gl);DrawCube25(gl);DrawCube16(gl);DrawCube8(gl);
gl.glPopMatrix();
break;
case 85:
DrawCube3(gl);DrawCube23(gl);DrawCube24(gl);DrawCube25(gl);
DrawCube4(gl);DrawCube5(gl);DrawCube6(gl);DrawCube7(gl);
DrawCube8(gl);DrawCube12(gl);DrawCube13(gl);DrawCube14(gl);
DrawCube15(gl);DrawCube16(gl);DrawCube20(gl);DrawCube21(gl);DrawCube22(gl);
gl.glPushMatrix();
gl.glRotatef(-angle,0.0f,1.0f,0.0f);
DrawCube0(gl);DrawCube1(gl);DrawCube2(gl);DrawCube9(gl);
DrawCube10(gl);DrawCube11(gl);DrawCube17(gl);DrawCube18(gl);DrawCube19(gl);
gl.glPopMatrix();
break;
case 68:
DrawCube0(gl);DrawCube1(gl);DrawCube2(gl);DrawCube3(gl);
DrawCube4(gl);DrawCube5(gl);DrawCube9(gl);DrawCube10(gl);
DrawCube11(gl);DrawCube12(gl);DrawCube13(gl);DrawCube17(gl);
DrawCube18(gl);DrawCube19(gl);DrawCube20(gl);DrawCube21(gl);DrawCube22(gl);
gl.glPushMatrix();
gl.glRotatef(angle,0.0f,-1.0f,0.0f);
DrawCube6(gl);DrawCube7(gl);DrawCube8(gl);DrawCube14(gl);
DrawCube15(gl);DrawCube16(gl);DrawCube23(gl);DrawCube24(gl);DrawCube25(gl);
gl.glPopMatrix();
break;
case 82:
DrawCube9(gl);DrawCube10(gl);DrawCube11(gl);DrawCube25(gl);
DrawCube12(gl);DrawCube13(gl);DrawCube14(gl);DrawCube15(gl);
DrawCube16(gl);DrawCube17(gl);DrawCube18(gl);DrawCube19(gl);
DrawCube20(gl);DrawCube21(gl);DrawCube22(gl);DrawCube23(gl);DrawCube24(gl);
gl.glPushMatrix();
gl.glRotatef(-angle,1.0f,0.0f,0.0f);
DrawCube0(gl);DrawCube1(gl);DrawCube2(gl);DrawCube3(gl);
DrawCube4(gl);DrawCube5(gl);DrawCube6(gl);DrawCube7(gl);DrawCube8(gl);
gl.glPopMatrix();
break;
case 76:
DrawCube0(gl);DrawCube1(gl);DrawCube2(gl);DrawCube3(gl);
DrawCube4(gl);DrawCube5(gl);DrawCube6(gl);DrawCube7(gl);
DrawCube8(gl);DrawCube9(gl);DrawCube10(gl);DrawCube11(gl);
DrawCube12(gl);DrawCube13(gl);DrawCube14(gl);DrawCube15(gl);DrawCube16(gl);
gl.glPushMatrix();
gl.glRotatef(-angle,-1.0f,0.0f,0.0f);
DrawCube17(gl);DrawCube18(gl);DrawCube19(gl);DrawCube20(gl);
DrawCube21(gl);DrawCube22(gl);DrawCube23(gl);DrawCube24(gl);DrawCube25(gl);
gl.glPopMatrix();
break;
default:
break;
}
六、工程运行效果截图
10月20日 查找Android开发的配置及流程 10月22日 查找资料确定要使用的算法与数据结构 10月23日 系统设计 10月24日 开始编码
10月28日 游戏基本功能完成,进入测试阶段 11月2日 程序开发完成,编写文档
八、总结
因为之前自己学习过Android游戏开发的相关知识,也自己做过一个小游戏,所以对这方面比较了解,不过之前开发的小游戏是用Cocos2d引擎完成,和Android原生的不太一样,通过这次大作业的完成,对Android的基本开发有了一定的了解。对图像的绘制有了一定的了解。
第四篇:linux大作业报告
华南理工大学
Linux课程期末大作业
大作业题目:
学
院 :
专
业: 姓
名: 学
号:
2013年6月
一、大作业题目及要求
二、程序设计原理图
三、程序原理描述及设计思路
四、大作业设计总结及心得体会
五、源代码
/ 2
第五篇:《机械工程有限元分析基础》大作业报告
《机械工程有限元分析基础》大作业报告
题 目 | 飞轮 |
学生姓名 | 毛雨 |
学 号 | 2118011416 |
院 部 | 机电工程与自动化 |
专 业 | 机械工程 |
班 级 | 21180114 |
二〇二一年六月
一、建模过程/步骤
1、ANSYS分析开始准备工作
(1)清空数据库并开始一个新的分析,选取 Utility > File > Clear & Start New,弹出 Clear database and Start New 对话框,单击 OK 按钮,弹出 Verify 对话框,单击 OK按钮完成清空数据库。
(2)指定新的工作文件名 指定工作文件名。选取 Utility Menu > File >Change Jobname,弹出 Change Jobname 对话框,在 Enter New Jobname 项输入工作文件名“feilm”,单击 OK按钮完成工作文件名的定义。
(3)指定新的标题指定分析标题。选取 Utility Menu > File > Change Title,弹出 Change Title 对话框,在 Enter New Title 项输入标题名“feilun axis”为标题名,然后单击OK按钮完成分析标题的定义。
(4)重新刷新图形窗口 选取 Utility Menu > Plot >Repiot,定义的信息显示在图形窗口中。
2、确定分析类型
(1)运行主菜单 Main Menu > Preference 弹出分析类型设定对话框,选择分析模块为 Structural 结构分析,然后单击 OK 按钮完成分析类型定义。
(2)d定义单元及材料属性
(3)新建单元类型 运行主菜单 Main Menu >Preprocessor > Element Type > Add/Edit/Delete 命令,弹出 Element types 对话框,单击 Add 按钮新建单元类型,弹出 Library of Element Types 对话框,先选择单元大类为 solid,接着选择 Quad 8 node 183,单击 OK 按钮,完成单元类型选择。接着单击 Option 按钮进入单元设置选项,在 Element behavior(K3)栏中更改选项为 Asisymmetric(轴对称),在单击 OK按钮返回 Element Type 对话框,单击 Close 按钮完成设置。
(4)定义材料属性 运行主菜单 Main Menu > Preprocessor > Material Props > Matorial Models 命令,系统显示材料属性设置对话框,在材料属性对话框中一次选择 Structure/Linear/Elastic/Isotropic。完成选择后,弹出材料属性对话框,方便输入弹性模量210e9,泊松比0.27,单击 OK 返回选择 Density,弹出密度定义对话框,输入密度 7800,单击 OK返回。完成材料属性设置后,关闭对话框离开材料属性设置。
3、建立几何图形
(1)建立关键点
(2)绘制矩形 运行主菜单 Main Menu > Preprocessor > Modeling > Create > Areas > Rectangle > By Dimensions 命令,在对话框中分别输入 1 点坐标 X1=50,Y1=0,2 点坐标 X2=55,Y2=50,单击 Apply 按钮完成第一个矩形绘制;同理,输入3点坐标X1=55,Y1=24,6点坐标 X2=75,Y2=16,单击 Apply 按钮完成第二个矩形绘制;输入4点坐标 X1=75,Y1=40,5点坐标 X2=80,Y2=5,单击 OK 按钮完成第三个矩形绘制。
(3)布尔操作合并图形 运行主菜单 Main Menu > Preprocessor > Modeling > Operate > Booleans > Add 出现选择拾取对话框,依次点击图形再点 Apply,完成布尔加。
(4)设置显示方式 运行菜单 Utility Menu > Plot > Line,设置显示方式为直线,以便下一步为直线倒圆角。
(5)倒圆角 运行主菜单 Main Menu > Preprocessor > Modeling > Create > Lines > Line Fillet 弹出对话框,拾取视频中线段,单击 OK按钮,出现圆角半径设置对话框,Fillet Radius 项输入5,其他项默认,单击 Apply 按钮完成第一个圆角绘制;同理,完成其他三个圆角的绘制。
(6)生成面 运行菜单 Utility Menu > Plot > Line 设置直线显示方式,运行主菜单 Main Menu > Preprocessor > Modeling > Create > Areas >Arbitrary > By Lines,出现选择拾取对话框,点击拾取视频中的线段,单击 Apply 按钮完成;同理,完成其他三个面的生成,单击 OK 按钮结束。
(7)布尔运算 完成几何图形创建 运行主菜单 Main Menu > Preprocessor > Modeling > Operate > Booleans > Add 出现选择拾取对话框,依次点击图形再点 Apply,完成几何图形创建。
4、划分网格
(1)运行主菜单 Main Menu > Preprocessor > Meshing > Mesh Tool(网格划分工具)命令,出现 Mesh Tool 菜单,单击 Areas 中的 set 按钮,在单元尺寸对话框中的 Element edge length 项中输入单元尺寸,本列中输入1,单击 OK 按钮确定。在 Mesh Tool 菜单中设置 Mesh 下拉框为 Areas,shape 项选择 Quad(四边形单元网格),单击 Mesh 按钮划分网格,出现的 Mesh Areas 对话框中单击飞轮平面,在点击Apply,系统将自动完成网格划分。
5、加载求解
(1)显示线段
(2)施加约束 运行主菜单 Main Menu > Solution > Define Loads > Apply > Structulal > Displacement on Lines 命令,出现拾取菜单,选择视频中线段,单击 Apply,出现约束定义对话框,选择 All DOF 约束所有自由度,在 Displacement Value 选项输入0,在单击OK按钮,完成约束定义。
(3)施加载荷 运行 Main Menu > Solution > Define Loads > Apply > Structulal > Pressure > On Lines 命令,出现拾取菜单,选择线段,单击 Apply,出现载荷(压力)定义对话框,输入1e6,单击 OK 按钮完成。
(4)施加角速度 运行主菜单 Main Menu > Solution > Define Loads > Apply > Structulal > Inertia >Angular veloc > Globel 弹出施加速度对话框。在 OMEGY Y 项输入62.8 单击 OK按钮完成。
6、求解
(1)运行主菜单 Main Menu > Solution > Current LS 命令,出现菜单中单击 OK 按钮确定。计算机开始进行求解,求解完成后出现“solution is done”提示表示求解完成。单击 Close 按钮完成求解。
7、查看分析结果
(1)改变观察输出结果坐标系 在总体柱坐标系下观察应力分布和变形比较方便,因此,吧结果坐标系转换到柱体坐标系下:执行 Main Menu > General Postproc > Options for output 出现结果坐标系设置对话框,设置为柱坐标系,单击 OK按钮完成。
(2)显示节点(单元)径向位移云图 运行主菜单 Main Menu > General Postproc > Plot Results > Contour Plot > Nodal Solu(or Element Solu)命令,选择 DOF Solution > X-Component of Displacement 径向位移(如果观察周向位移,该项选择为 Y-Component of Displacement),单击 OK 按钮。
(3)显示节点(单元)应力云图 运行主菜单 Main Menu > General Postproc > Plot Results > Contour Plot > Nodal Solu(or Element Solu)命令,选择 stress > X-Component stress 径向应力(周向应力为 Y-Component stress),单击 OK按钮。
(4)三维扩展结果 运行下拉菜单 Utility Menu > PlotCtrls > Style > symmetry Expansion > 2D Axis-symmetric 弹出轴对称扩展设置对话框,选择 Full expansion,单击 OK 按钮。(也可以改成四分之一显示)
二、结果分析图片
图2.1 节点径向位移云图
图2.2 节点径向应力云图
图2.2 三维扩展结果图
三、ANSYS软件应用小结
ANSYS软件是融结构、流体、电场、磁场、声场分析于一体的大型通用有限元分析软件。由世界上最大的有限元分析软件公司之一的美国ANSYS开发。它能与多数CAD软件接口,实现数据的共享和交换,如Pro/Engineer, NASTRAN, Alogor, I-DEAS, AutoCAD等,是现代产品设计中的高级CAE工具之一。
本次实验是学习如何使用ANSYS 通过软件对框架结构内力进行计算,在还未学习该软件前,对于此类问题,通常会采用力矩分配法来进行计算,计算过程繁复,计算量大,并且容易出错。导致过程缓慢,效果不显著。
在这次大作业中,我跟随着视频中老师的讲解一步步建模和受力分析,在一开始的迷茫和不解中一次次观看老师的教程,一点点学会使用软件。在课堂上魏老师也在上课过程中给我们介绍了有关飞机上角架和飞轮以及她在研究生期间的研究设计,给我打开了一扇新的大门
对于其他应用型软件而言,ANSYS作为大型权威性的有限元分析软件,在解题过程中是十分牢靠的。同时这也是一门不易掌握的软件,因而,要学好ANSYS,我们要自己有较高的要求,所有实验的基础都是需要我们有理论知识的支持,因此我们要对力学有一定程度的掌握。在掌握理论知识的同时我们要对软件的使用积累经验,光有理论或者经验都是不行的。要结合起来这样我们才能有更深层次的探索和学习。