根据花瓶的侧面投影图,用Matlab绘制花瓶的三维立体图
现有一花瓶侧面投影如图

问题:
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绘制花瓶的三维立体图的更多相关文章
- MATLAB绘制三角网及三维网线
今天博主给大家介绍一些比较常见的可视化操作,绘制三角网及三维网线. 三角网是由一系列连续三角形构成的网状的平面控制图形,是三角测量中布设连续三角形的两种主要扩展形式,同时向各方向扩展而构成网状,优点为 ...
- MATLAB绘制函数图
序言 Matlab可以根据用户给出的数据绘制相应的函数图.对于单个2D函数图,需要给出一个行向量x作为函数图上离散点集的横坐标,以及一个与x列数一样的横坐标y作为函数图上点集的纵坐标. 向量x和y的取 ...
- 用matlab绘制中国地图
reference:https://jingyan.baidu.com/article/870c6fc36fdacfb03ee4be58.html shp: http://muchong.com/ht ...
- Matlab 绘制三维立体图(以地质异常体为例)
前言:在地球物理勘探,流体空间分布等多种场景中,定位空间点P(x,y,x)的物理属性值Q,并绘制三维空间分布图,对我们洞察空间场景有十分重要的意义. 1. 三维立体图的基本要件: 全空间网格化 网格节 ...
- Matlab slice方法和包络法绘制三维立体图
前言:在地球物理勘探,流体空间分布等多种场景中,定位空间点P(x,y,x)的物理属性值Q,并绘制三维空间分布图,对我们洞察空间场景有十分重要的意义. 1. 三维立体图的基本要件: 全空间网格化 网格节 ...
- 用matlab绘制幂函数
用matlab绘制幂函数 下周轮到我做论文汇报了,刚好前两天看了网格水印的文章,就决定汇报前两天看到的那篇论文了.在准备ppt的过程中,绘制了一些幂函数,感觉matlab真的是很强大啊,可以绘制各种曲 ...
- [ZZ] 用matlab绘制箭头
用matlab绘制箭头 http://npfeng900.blog.163.com/blog/static/14456108201221922944998/ 用matlab绘制箭头1 用matlab绘 ...
- Matlab绘制三维曲面(以二维高斯函数为例)
原文地址为:Matlab绘制三维曲面(以二维高斯函数为例) 寒假学习了一下Python下的NumPy和pymatlab,感觉不是很容易上手.来学校之后,决定继续看完数字图像处理一书.还是想按照上学期的 ...
- matlab绘制心形函数
matlab 7.0 绘制二维.三维心形函数 又到周六,下周就要迎来春节小长假了,想想都有些激动.在外漂了一整年,总于可以回家和父母团聚了,还有吃好吃的...,哎呀~想想都流口水呢.不过先 ...
随机推荐
- 在vue中使用jq或者第三方插件
1.安装jQuery npm i jquery -S 2.修改webpack的配置文件 文件目录及名称:build/webpack.base.conf.js 注释代码为修改部分 'use strict ...
- alert对象相关问题
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- tesseract ocr训练 pt验证码
识别率有问题A大概率识别为n,因此需要训练,这里讲一下 如何训练 参考 java代码里边直接使用tess4j,是对tesseract的封装,但是如果要训练,还是需要在进行安装tesseract-ocr ...
- SQLite in Python: 如何在Python中使用SQLite数据库
SQLite3 可使用 sqlite3 模块与 Python 进行集成.sqlite3 模块是由 Gerhard Haring 编写的.它提供了一个与 PEP 249 描述的 DB-API 2.0 规 ...
- 通过inputSplit分片size控制map数目
前言:在具体执行Hadoop程序的时候,我们要根据不同的情况来设置Map的个数.除了设置固定的每个节点上可运行的最大map个数外,我们还需要控制真正执行Map操作的任务个数. 1.如何控制实际运行的m ...
- 2018-8-10-安装-wordpress-出现-抱歉,我不能写入wp-config.php文件
title author date CreateTime categories 安装 wordpress 出现 抱歉,我不能写入wp-config.php文件 lindexi 2018-08-10 1 ...
- 利用Git搭建自动部署的Laravel环境 - 钟晨宇的博客 - CSDN博客
目标:服务器上搭建Laravel环境,本地使用IDE进行开发,使用Homestead做本地调试环境,代码提交后自动部署到服务器Root目录下. 下面是整个流程的示意图: 1. 准备工作,搭建LNMP ...
- Djangog写XXOO管理的要求以及思路
- leetcode 21-30 easy
21. Merge Two Sorted Lists Merge two sorted linked lists and return it as a new list. The new list s ...
- js判断类型为数字的方法实现总汇——原生js判断isNumber()
方法一[推荐]: 最容易想到的是用typeof来判断是否是number类型 ,但是如果为NaN会被认为也是number类型,因此我们需要使用isNaN来排除NaN的情况. function isNum ...