找回密码
 立即注册
查看: 156|回复: 0

Matlab图形与图像措置(3.6-3.10)

[复制链接]
发表于 2024-7-15 18:24 | 显示全部楼层 |阅读模式
3.6 绘制花朵曲面的图像
[X,Y] = meshgrid(-8:.5:8);%%-8到8的线性间隔向量定义二维网格数据
R = sqrt(X.^2 + Y.^2) + eps;%%eps为极小数,避免该变量作为除数时除数为0
Z = sin(R)./R;%%操作变量R定义花朵曲线的表达式
C = ones(33);%%使用一个33阶的全1矩阵,定义矩阵的颜色矩阵C
subplot(221),mesh(X,Y,Z),title('曲面') %%xyz定义的三维网格曲线图,添加图像标题
subplot(222),mesh(X,Y,Z,C),title('曲面添加颜色') %%xyz定义的三维网格曲线图,并使用颜色矩阵C使用指定的颜色,添加图像标题
subplot(223),mesh(X,Y,Z, gradient(Z),'FaceLighting','gouraud','LineWidth',0.3),title('曲面添加光源与线宽')
subplot(224),h=mesh(Z);title('曲面添加颜色、线宽与边缘颜色');
h.FaceColor='g'; %%使用原点暗示法改削曲面的填充颜色为绿色
h.EdgeColor=[.5 0 .5];%%使用RGB三原素向量,改削曲面的轮廓线颜色


***********************************************
meshgrid:meshgrid函数用来生成网格矩阵,既可以是二维网格矩阵,又可以是三维网格矩阵。
1、[X,Y] = meshgrid(x,y) :基于向量x和y中包含的坐标返回二维网格坐标。X是一个矩阵,每一行是x的一个副本,Y也是一个矩阵,每一列是y的一个副本。坐标X和Y暗示的网格有length(y)个行和length(x)个列。
2 、[X,Y] = meshgrid(x) 与 [X,Y] = meshgrid(x,x)不异,返回网格大小为length(x)*length(x)的方形网格矩阵。
3、 [X,Y,Z] = meshgrid(x,y,z),返回由向量x,y,z定义的三维网格坐标,X,Y和Z暗示的网格大小为length(x)*length(y)*length(z)。
**************************************************
sqrt:计算算数平方根的函数,sqrt(9)=3
可以计算一个数也可以计算一个矩阵。
*****************************************************
eps:在写代码过程中遇到了除数为0的情况,在分母位置加了eps就没有报错了。
eps为系统运算时计算机允许取到的最小值。例如对于函数y=cosx/x。由于在编程时分母可能呈现为0,所以编程时要写成:y=cosx/(x+eps)。
浮点数其实是离散的,有限的,而且间隔是不均匀的。我们可以说一个数旁边的数是什么,而它们之间的距离就反映了其精度。越靠近0,数和数之间就越密集,精度就越高。
*****************************************************
mesh与meshgrid:




**************************************************************
梯度(gradient)是函数在改点变化最大的值,在用Matlab做图像措置中,梯度可有以下公式来计算:
[Fx,Fy]=gradient(F)
1.F是一维矩阵,有Fx=gradient(F,L),L为俩元素之间的距离。
2.F是二维矩阵,(Fx,Fy)=gradient(F,Lx,Ly),Lx,Ly暗示各自标的目的上各点间的距离。
3.F是三维矩阵,(Fx,Fy,Fz)=gradient(F,Lx,Ly,Lz),Lx,Ly,Lz暗示各自标的目的上各点间的距离。
Fx的第一列为原矩阵第二列减去第一列,第二列等于原矩阵的第三列减去第二列,算出的成果每个元素除二,第三列为原矩阵最后两列的差值。
Fy就变成行的运算也一样。
***第一行/列和最后一行/列计算时不需要除二,中间的行/列除二运算。
***********************************************
gouraud:添加光源
3.7 绘制函数曲面
t=linspace(0,20*pi,10000); %%包含10000个元素
t=reshape(t,100,100);%%将向量转换为100*100的矩阵t
x=(3+cos(30*t)).*cos(t);
y=sin(30*t);
z=(3+cos(30*t)).*sin(t);
mesh(x,y,z)%%绘制xyz定义的网格图
title('曲面')%%输入标题
axis equal%%沿每个坐标轴使用不异的数据单元长度
xlabel('x'),ylabel('y'),zlabel('z')%%添加xyz轴标注


3.8 绘制山峰曲面图像
subplot(2,2,1)%%分割视图
peaks(5); %%操作山峰函数创建一个5*5的矩阵,并绘制山峰函数的三维曲面图
title('peaks作图5') %%添加图像标题
subplot(2,2,2)
peaks(100);%%操作山峰函数创建100*100的矩阵,并绘制曲面图
title('peaks作图100')
subplot(2,2,3)
[X,Y,Z]=peaks(100);%%创建三个100*100的矩阵xyz
mesh (X,Y,Z)%%操作这三个矩阵绘制三维曲面
title('mesh作图')
subplot(2,2,4)
[X,Y,Z]=peaks(100);%%操作山峰函数创建三个100*100的矩阵xyz
plot3(X,Y,Z)%%绘制xyz定义的三维曲线图
title(' plot3作图')



3.9 绘制函数的三维网格概况图
fmesh(@(x,y) erf(x)+cos(y),[-5 0 -5 5],'LineWidth',3)%%输入绘制符号函数的三维网格概况图命令,指定区间-5到0,-5到5,erf返回函数x的每个元素的误差函数
hold on%%保留当前图窗的绘图
fmesh(@(x,y) sin(x)+cos(y),[0 5 -5 5])%%在区间5到0,-5到5绘制分段函数的网格曲面图
hold off%%封锁当前图窗的绘图
title('带网格线的三维网格概况图')


*****************************************************
erf:matlab中erf函数称为误差函数,公式如下式所示。




erf简单用法

erf函数在matlab里面可以直接作为内置函数使用,如erf(1),erf(1)暗示erf在1的取值
3.10 绘制一个二维函数的三维曲面图
x = linspace(-2*pi,2*pi);
y = linspace(0,4*pi);
[X,Y] = meshgrid(x,y);%%操作向量xy,定义二维网格数据
Z = sin(X).*sin(Y); %%定义函数表达式z
subplot(121),surface(X,Y,Z);%%曲面的颜色按照z指定的高度而变化
view(-45,45) %%更改视点,将方位角设置为-45°仰角45°
title('三维曲面图')
subplot(122),mesh(X,Y,Z);%%有实色边颜色,没有面颜色
title('三维网格图')

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-21 20:34 , Processed in 0.251554 second(s), 27 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表