现有一花瓶侧面投影如图      

问题:

1)    做出该花瓶三维立体图;

2)    计算其表面积;

    计算其体积。

  第一次参加数学建模,从来没有接触过Matlab语言,一上来就碰到这种数字图像处理的问题就懵了。完全是一边摸索,一边自学Matlab语言,一遍又一遍的在机子上调试。出错了就改;运行不同了就调试.....异常辛苦。在这之前只会C/C++语言,而且这两种语言还只停留在书本上,没有编程经验。所以在参加建模以前颇费了思量,下了一番决心。以前笃信一句名言——“机会是留给有准备的人的”,当时那句名言写在中学的一块标志牌上,所以记得很清楚。这句话乍看一下没有错,但仔细想想,你会发现一个问题。如果你每次都因为没有准备好,而拒绝尝试,放弃机会,你怎么能知道自己需要准备什么,怎么会提高呢?退一步讲,即使第一次你失败了,但你有了这次经历,有了经验,知道了自己的不足,知道了自己还需要准备什么,你就可以在心里对自己说,“我还会回来的,明年再战”。从这个角度讲,你就是赢家。

  总结起来就是一句话“年轻人,不要害怕失败,不要拒绝尝试”。

  闲话少说,切入正题。

  数字图像在计算机中使用数字(0~255)表示的,对上图中的花瓶来讲,图中阴影部分用‘0’表示,空白部分用‘1’表示。一个自然而然的想法就是利用这个特点,找出花瓶边缘的坐标,然后拟合出一条曲线(本文使用三次样条曲线拟合花瓶侧面轮廓曲线),剩下的交给Matlab就可以了。对于表面积和体积,可以采用梯形法数值积分的方法。

源程序:

clear
X=imread('t1.bmp');
[m,n]=size(X);
A=[];A1=[];A2=[];k1=1;k2=1;

%寻找花瓶的最上面坐标
for j=1:n
for i=1:m
if X(i,j)==0
A1(k1)=i;k1=k1+1;
break;
end
end
end
n1=min(A1);
%寻找花瓶的最下面坐标
for j=1:n
for i=m:-1:1
if X(i,j)==0
A2(k2)=i;k2=k2+1;
break;
end
end
end
n2=max(A2);
%读出花瓶左侧轮廓的y坐标
for i=1:m
for j=1:n
if X(i,j)==0
A(i)=j;
break;
end
end
end
%%
%绘制三维立体图
x1=n1:n2;
x=n1:1:n2;
y=spline(x1,A(x1),x);
[X,Y,Z]=cylinder(520-y,60);
mesh(X,Y,Z)

%计算体积
vi=pi*(y-520).^2;
V=trapz(x,vi)

%计算表面积
for i=1:1:n2-n1+1
if i<n2-n1+1
drtay(i)=y(i+1)-y(i);
else
drtay(i)=0;
end
end
si=2*pi*(520-y)./2.*sqrt(1+drtay.^2);
S=trapz(x,si)+pi*38*38

rotate3D on;
set(gca,'zdir','reverse');

三维立体图如下:

根据花瓶的侧面投影图,用Matlab绘制花瓶的三维立体图的更多相关文章

  1. MATLAB绘制三角网及三维网线

    今天博主给大家介绍一些比较常见的可视化操作,绘制三角网及三维网线. 三角网是由一系列连续三角形构成的网状的平面控制图形,是三角测量中布设连续三角形的两种主要扩展形式,同时向各方向扩展而构成网状,优点为 ...

  2. MATLAB绘制函数图

    序言 Matlab可以根据用户给出的数据绘制相应的函数图.对于单个2D函数图,需要给出一个行向量x作为函数图上离散点集的横坐标,以及一个与x列数一样的横坐标y作为函数图上点集的纵坐标. 向量x和y的取 ...

  3. 用matlab绘制中国地图

    reference:https://jingyan.baidu.com/article/870c6fc36fdacfb03ee4be58.html shp: http://muchong.com/ht ...

  4. Matlab 绘制三维立体图(以地质异常体为例)

    前言:在地球物理勘探,流体空间分布等多种场景中,定位空间点P(x,y,x)的物理属性值Q,并绘制三维空间分布图,对我们洞察空间场景有十分重要的意义. 1. 三维立体图的基本要件: 全空间网格化 网格节 ...

  5. Matlab slice方法和包络法绘制三维立体图

    前言:在地球物理勘探,流体空间分布等多种场景中,定位空间点P(x,y,x)的物理属性值Q,并绘制三维空间分布图,对我们洞察空间场景有十分重要的意义. 1. 三维立体图的基本要件: 全空间网格化 网格节 ...

  6. 用matlab绘制幂函数

    用matlab绘制幂函数 下周轮到我做论文汇报了,刚好前两天看了网格水印的文章,就决定汇报前两天看到的那篇论文了.在准备ppt的过程中,绘制了一些幂函数,感觉matlab真的是很强大啊,可以绘制各种曲 ...

  7. [ZZ] 用matlab绘制箭头

    用matlab绘制箭头 http://npfeng900.blog.163.com/blog/static/14456108201221922944998/ 用matlab绘制箭头1 用matlab绘 ...

  8. Matlab绘制三维曲面(以二维高斯函数为例)

    原文地址为:Matlab绘制三维曲面(以二维高斯函数为例) 寒假学习了一下Python下的NumPy和pymatlab,感觉不是很容易上手.来学校之后,决定继续看完数字图像处理一书.还是想按照上学期的 ...

  9. matlab绘制心形函数

    matlab 7.0 绘制二维.三维心形函数       又到周六,下周就要迎来春节小长假了,想想都有些激动.在外漂了一整年,总于可以回家和父母团聚了,还有吃好吃的...,哎呀~想想都流口水呢.不过先 ...

随机推荐

  1. Mybatis 框架搭建实例

    前言 MyBatis是一个优秀的持久层框架.原生的jdbc操作存在大量的重复性代码(如注册驱动,创建连接,创建statement,结果集检测等).框架的作用就是把这些繁琐的代码封装. MyBatis通 ...

  2. 华为RH2288 V3服务器进入BIOS并设置iBMC地址

    服务器重启后 第一个画面 提示Ctrl+H或Ctrl+S进入相关配置 其中, Ctrl+H进入WebBIOS初次安装系统可在此做RAID配置 此画面不做操作,等待跳过 进入第二画面 可以选择BootM ...

  3. appium+python 启动一个app步骤

    询问度娘搭好appium和python环境,开启移动app自动化的探索(基于Android),首先来记录下如何启动待测的app吧! 如何启动APP?1.获取包名:2.获取launcherActivit ...

  4. MySQL忘记root密码重置密码(5.7版本)

    网上找了一堆方法都不行,经过折腾一番,发现MySQL不同版本重置密码也存在一定的差异!记录下Mysql5.7.18版本的重置密码方法. 1.找到/etc/mysql/my.cnf 修改此文件添加一行s ...

  5. vmstat-虚拟内存查看实例

    虚拟内存运行原理 在系统中运行的每个进程都需要使用到内存,但不是每个进程都需要每时每刻使用系统分配的内存空间.当系统运行所需内存超过实际的物理内存,内核会释放某些进程所占用但未使用的部分或所有物理内存 ...

  6. Codeforces Round #436 (Div. 2) 题解864A 864B 864C 864D 864E 864F

    A. Fair Game time limit per test 1 second memory limit per test 256 megabytes input standard input o ...

  7. 痞子衡嵌入式:飞思卡尔i.MX RTyyyy系列MCU外设那些事(2)- 善变的FlexRAM

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RTyyyy系列MCU的FlexRAM外设. 本文是外设系列第二篇,上一篇讲的是离内核最近的高速缓存L1 Cache, ...

  8. 当inline-block和text-indent遇到IE6,IE7

    在实际应用中,考虑到seo,很多button,icon都要用到inline-block和text-indent来处理,例如: <a href="#" class=" ...

  9. oracle-Oradim

    输入以下命令之一: 通过指定以下选项创建实例: -NEW -SID sid | -SRVC srvc | -ASMSID sid | -ASMSRVC srvc [-SYSPWD pass] [-ST ...

  10. Python之collection

    1.计数器(counter) Counter是对字典类型的补充,用于追踪值的出现次数. ps:具备字典的所有功能 + 自己的功能 c = Counter('abcdeabcdabcaba') prin ...