/BUAA-ElasticMechanics-MembraneAnalogyTwist

This repository hosts MATLAB scripts for the Elastic Mechanics major project at Beihang University , titled 'Membrane Analogy Analysis of Cylindrical Torsion Experiment.' These scripts are developed for the detailed study using the membrane analogy method.

Primary LanguageMATLABGNU General Public License v3.0GPL-3.0

BUAA-ElasticMechanics-MembraneAnalogyTwist

这个仓库托管了北京航空航天大学弹性力学课程大作业,题为“薄膜比拟试验探究”的 MATLAB 脚本。由2021级本科生张添翼制作。同时感谢孙铁 张汉琛 李凯乐 王鸿鹏四位同组成员,指导老师毛建兴老师。


仓库功能

  • Preprocess.m:该脚本主要用于图像的预处理,包括读取图像、转换为灰度图、调整对比度和亮度、应用滤波器以及裁剪图像。
  • Contours.m:这个脚本用于边缘检测和提取图像的曲线轮廓。它使用了Canny算法来检测边缘,并选择合适的轮廓进行展示。
  • Transform.m:这段脚本主要关注于从图像中提取实际的数据点,并将图像坐标转换为实际坐标。它还包括对数据的一些初步处理。
  • Analyze.m:此脚本专注于对提取的数据进行数学分析,包括评估导数、寻找最大和最小斜率的点以及划分斜率区间。
  • 添加图片教程
  • 添加实验报告模板

安装与下载

你需要进行以下步骤来使用 BUAA-ElasticMechanics-MembraneAnalogyTwist

  1. 从 Github Releases 下载zip文件或者单独的文件,保存在一个目录文件中。
  2. 安装合适的MATLAB程序。
  3. 安装合适的任意PS程序(需要进行一定的绘图)。
  4. 运行本脚本。

特点

  • 准确度高

    • 本项目对照片进行预处理,保障轮廓更加清晰。
    • 采用Canny 算法进行边缘检测,可靠性较高。
  • 方便快捷

    • 本项目对于图片进行处理,人工计算量较小。
    • 若使用坐标值,可以直接在脚本中处理成为实际数据
  • 易于学习

    • 本项目代码简单,结构清晰,利于使用者阅读修改以及学习相关知识。

开发模式

在部分更改正式进入主要脚本之前,它们将被添加到开发模式中。同样,如果你有兴趣加入我们的开发,请从不同分支向我们提交pr。详情

用法

  1. 预处理:首先对图片进行适当预处理,我们建议利用类似于Photoshop之类的图片编辑软件,使用钢笔工具(因为这会使你的曲线更加光滑,误差更小)将你薄膜的轮廓进行描边,使用旋转工具将你的照片放正(这一步在最终结果中的影响较为显著)。最后将你预处理的图片命名为一个恰当的名称,放入该脚本所在文件夹。同时修改Preprocess.m中的img = imread('image.png');路径。

  2. 运行Preprocess.m完成脚本预处理:运行该脚本后,会提示让你裁剪图片,选好覆盖所有轮廓区域后,双击轮廓内部即完成裁剪。此时,目录下应该出现cropped_image.png

  3. 运行Contours.m提论轮廓,查找k:运行后,观察哪一个边界最符合你的实验曲线,然后记下它的索引 k。为了便于分析,我已经添加了获取边界中心点,用于放置文本标签k的功能。你可以通过以下小技巧来快速找到k

    • 查找边界中心点:对于任意一个边界,其标签处于其midPoint附近,所以你可以查找这附近是否有对应的标签

    • 通过B 数组来查找:一般来说,我们需要查找的轮廓中包含的数据是最多的,因此可以通过这个特性在数组中寻找。首先你可以去掉以下代码:

      midPoint = round(mean(boundary, 1));
      text(midPoint(2), midPoint(1), sprintf('%d', k), 'Color', 'yellow', 'FontSize', 12)

      这段代码的作用是添加文本标签,他可能会让你的电脑卡顿。 运行脚本后查看你需要轮廓的最左侧点最右侧点x,y的值,双击打开工作区的B数组,在里面找到含有数据最多的二维数组,查看是否与之前的x,y的值对应,若对应,则其序号则为你需要查找的k值。

  4. 获取坐标轴距离:若你在记录数据时使用到了坐标纸,那你可以在图中标注出每一条线对应的x的坐标,同时你可以找到这条曲线中心点的坐标(一般是最低点)。对于每一条线的x坐标,你可以填入Transform.m文件中的perx中计算放大比例关系,其方法于高中物理课已经学习到(后三减前三)。中心点的坐标填入x_deltay_delta。若你在记录数据是未使用坐标纸,请你根据实际偏移原点坐标轴。

  5. 运行Transform.m提取数据点并转化为实际坐标:将3中获得的k值代替selected_boundary = B{5}中的5,然后运行。此时应获得合理的x_realy_real

  6. 利用cftool进行曲线模拟:在matlab命令行中输入cftool,即可打开曲线拟合器。选择x_realy_real值作为拟合数据,建议以傅里叶函数作为拟合函数进行拟合,可以选择多项傅里叶函数提高拟合准确度。

  7. 导出拟合曲线到工作区:拟合完成后,导出拟合曲线到工作区,默认参数即可:

    将拟合保存到具有以下名称的MATLAB对象:fittedmodel
    将拟合优度保存到具有以下名称的MATLAB结构体:goodness
    将你和输出保存到具有以下名称的MATLAB结构体:output
    
  8. 运行Analyze.m获取最终结果:若前面步骤都没问题,则可以成功获得最后结果。按照所得结果绘制k的阶梯图像即可

FAQ

请在Issue中提问问题

Contributing

Welcome everyone.