|
4.1 绘制不同坐标轴数据比例的三维曲面图
x = linspace(-2*pi,2*pi);
y = linspace(0,4*pi);
[X,Y] = meshgrid(x,y);
Z = sin(X).*sin(Y);
h1=subplot(121);mesh(X,Y,Z);daspect(h1,[1 1 1])%%daspect函数用于设置坐标轴的数据比例
title('三维曲面图1:1:1')
h2=subplot(122);mesh(X,Y,Z);daspect(h2,[1 2 3]) %%daspect函数用于设置坐标轴的数据比例
title('三维曲面图1:2:3')
******************************************
MATLAB中的daspect函数用于设置坐标轴的数据比例。它可以接受一个参数,该参数是一个长度为3的向量,表示x、y和z轴的数据比例。例如,如果要将x轴的数据比例设置为2,y轴的数据比例设置为1,z轴的数据比例设置为.5,则可以使用以下代码:
daspect([2 1 .5])
这将使x轴的数据比例是y轴的两倍,z轴的数据比例是y轴的一半。如果不提供参数,则daspect函数将返回当前坐标轴的数据比例。
4.2 (不)显示网格
t=-4:0.1:4;
[X,Y]=meshgrid(t);
Z=peaks(X,Y);%%绘制山峰图像
subplot(1,2,1)
mesh(X,Y,Z),hidden on%%hidden 透视和消隐开关
title('不显示网格')
subplot(1,2,2)
mesh(X,Y,Z),hidden off
title('显示网格')
*****************************************
hidden 透视和消隐开关
4.3 对图像进行旋转
t=linspace(0,20*pi,10000);
t=reshape(t,100,100);%%reshape 改变数组维数、大小
x=(3+cos(30*t)).*cos(t);
y=sin(30*t);
z=(3+cos(30*t)).*sin(t);
subplot(1,2,1)
surf(x,y,z,'FaceAlpha',0.5,'EdgeColor','none')
title('曲面')
axis equal
xlabel('x'),ylabel('y'),zlabel('z')
subplot(1,2,2)
surf(x,y,z,'FaceAlpha',0.5,'EdgeColor','none'),view(10,-60)%%选定视角(旋转)
title('旋转图')
**********************************************
reshape 改变数组维数、大小
MATLAB 的 reshape 函数可以改变矩阵的维度。语法为:B = reshape(A,m,n)。其中 A 为需要被重塑的矩阵,m 和 n 分别是新矩阵的行数和列数,B 是重塑后的矩阵。 reshape(A,[m n]) 也是可以的。
4.4 改变视图的表现颜色
[X,Y]=meshgrid(-5:0.5:5);
Z=erf((Y+2).^3) - exp(-0.65*((X-2).^2+(Y-2).^2));%%erf函数称为误差函数
figure;%%figure函数主要用于建立一个图形窗口
surf(X,Y,Z);
title('三维视图');
figure,surf(X,Y,Z), brighten(.8); %%调整图像的亮度
title('加亮视图');
ax=figure;surf(X,Y,Z),
newmap = brighten(summer,-.7);
colormap(ax,newmap); %%设置当前图像的颜色映射
title('加深视图 ');
***************************************************
matlab中erf函数称为误差函数,公式如下式所示。
erf简单用法
erf函数在matlab里面可以直接作为内置函数使用,如erf(1),erf(1)表示erf在1的取值
*********************************************
% 通过函数brighten()调整图像的亮度
% 在MATLAB中还可以通过函数brighten()改变灰度图像的亮度。
% 在使用函数brighten()改变图像的亮度时,通常放到图像显示函数imshow()的后面。
% brighten(beta):该函数改变图像的亮度,如果0<beta<1,则图像变亮,如果-1<beta<0,则图像变暗
close all; clear all; clc;
orgin_image = imread(&#39;cameraman.tif&#39;);
figure, imshow(orgin_image);
brighten(0.6);
figure, imshow(orgin_image);
brighten(-0.6); % 函数brighten()只是改变了图像的显示效果,并没有实际改变图像的像素值。
*************************************************
matlab中colormap函数用来设置图像的颜色映射。使用方法如下:
- 设置当前图像的颜色映射: colormap(map)
- 查看当前图像的颜色映射: colormap
- 重置颜色映射为默认值: colormap(default) map可以是预定义的颜色映射, 例如 jet, parula, gray 等, 也可以是自定义的颜色映射矩阵。 具体使用可以参考 Matlab 官方文档。
4.5 绘制一个二元函数的曲面图,并设置颜色图的范围
syms x y%%定义两个符号变量xy
Z= sqrt(x.^2 + y.^2); %%向量元素的平方根
fsurf(Z);%%输入符号函数曲面图命令
caxis(&#39;manual&#39;) %%caxis(limits) 设置当前坐标区的颜色图范围。
title(&#39;三维视图&#39;)
***************************************************
caxis(‘auto’):
默认颜色区间(在颜色图索引数组中的值更改时启用自动范围更新)
caxis(‘manual’) :
禁用自动范围更新。caxis manual 命令是此语法的另一种形式
caxis(target,___):
为特定坐标区或图设置颜色图范围。指定 target 作为上述任何语法中的第一个输入参
cl = caxis:
返回当前坐标区或图的当前颜色图范围
4.6 设置颜色着色属性
[X,Y]=meshgrid(-7.5:0.5:7.5);
Z= sin(sqrt(X.^2+Y.^2));
subplot(2,2,1);
surf(X,Y,Z);
title(&#39;三维视图&#39;);
subplot(2,2,2),surf(X,Y,Z),shading flat;%%shading 设置颜色着色属性
title(&#39;shading flat&#39;);
subplot(2,2,3),surf(X,Y,Z),shading faceted;
title(&#39;shading faceted&#39;);
subplot(2,2,4),surf(X,Y,Z),shading interp;
title(&#39;shading interp&#39;)
*************************************************
shading 设置颜色着色属性
shading 函数控制曲面和补片图形对象的颜色着色。
shading flat 每个网格线段和面具有恒定颜色,该颜色由该线段的端点或该面的角边处具有最小索引的颜色值确定。
shading faceted 具有叠加的黑色网格线的单一着色。这是默认的着色模式。
shading interp 通过在每个线条或面中对颜色图索引或真彩色值进行插值来改变该线条或面中的颜色。
shading(axes_handle,…) 将着色类型应用于 axes_handle 指定的坐标区而非当前坐标区中的对象。使用函数形式时,可以使用单引号。
4.7 设置颜色着色属性
t=linspace(-2*pi,2*pi,100);
t=reshape(t,10,10);%%reshape 改变数组维数、大小
X=(3+cos(30*t)).*cos(t);
Y=sin(30*t);
Z=(3+cos(30*t)).*sin(t);
subplot(131),surf(X,Y,Z),shading flat;
title(&#39;shading flat&#39;);
subplot(132),surf(X,Y,Z),shading faceted;
title(&#39;shading faceted&#39;);
subplot(133),surf(X,Y,Z),shading interp;
title(&#39;shading interp&#39;)
4.8 设置里外光照
[X,Y]=meshgrid(-5:0.25:5);
Z=sin(X)+cos(Y);
subplot(1,2,1)
surfl(X,Y,Z) %%绘制xyz定义的带光照模式的三维曲面图
axis equal
title(&#39;外面有光照&#39;)
subplot(1,2,2)
surfl(X&#39;,Y&#39;,Z&#39;)%%转置参数,把光照变成里面
axis equal
title(&#39;里面有光照&#39;)
**********************************************
同mesh函数类似,surf 函数也有两个扩展函数:surfc函数和surfl函数。surfc函数是在surf 函数绘图的基础上添加等高线,surfl函数为在surf 函数绘图的基础上绘制带有光源的曲面图。需要注意的是:surf 函数没有surfz函数,ezsurf 函数只有ezsurfc函数。
surfl命令用来画一个带光照模式的三维曲面图,该命令显示一个带阴影的曲面,结合了周围的、散射的和镜面反射的光照模式。想获得较平滑的颜色过渡,则需要使用有线性强度变化的色图(如gray、copper、bone、pink等)。
surfl命令的使用格式如下:
surfl(Z) :以向量Z的元素生成一个三维的带阴影的曲面。其中阴影模式中的默认光源方位为从当前视角开始,逆时针转45°
surfl(X,Y,Z) 以矩阵X、Y、Z生成的一个三维的带阴影的曲面。其中阴影模式中默认光源方位为从当前视角开始,逆时针转45°
surfl(...,&#39;light&#39;) 用一个MATLAB光照对象(light object)生成一个带颜色、带光照的曲面,这与用默认光照模式产生的效果不同
surfl(...,&#39;cdata&#39;) 改变曲面颜色数据(color data),使曲面成为可反光的曲面
surfl(...,s) 指定光源与曲面之间的方位s,其中s为一个二维向量[azimuth,elevation],或者三维向量[sx,sy,sz]。默认光源方位为从当前视角开始,逆时针转45
surfl(X,Y,Z,s,k) 指定反射常系数k,其中k为一个定义环境光(ambient light)系数(0≤ka≤1)、漫反射(diffuse reflection)系数(0≤kd≤1)、
镜面反射(specular reflection)系数(0≤ks≤1)与镜面反射亮度(以像素为单位)的四维向量[ka,kd,ks,shine],默认值为k = [0.55 0.6 0.4 10]
h = surfl(...) 返回一个曲面图形句柄向量h
对于这个命令的使用格式需要说明的一点是,参数X、Y、Z确定的点定义了参数曲面的“里面”和“外面”,若用户想让曲面的“里面”有光照模式,只要使用surfl(X&#39;,Y&#39;,Z&#39;)命令即可。
4.9 在同一窗口中绘制参数函数添加不同光源的效果图
[u,v]=meshgrid(-5:0.25:5);%%定义二维网格坐标矩阵
x =exp(-abs(u)/10).*sin(5*abs(v));
y =exp(-abs(u)/10).*cos(5*abs(v));
z =u;
colormap(jet)%%设置当前图窗的颜色图为jet
subplot(1,3,1);
surf(x,y,z),shading interp%%绘制模型并设置渲染模式
light(&#39;position&#39;,[2,-2,2],&#39;style&#39;,&#39;local&#39;)%%名称值对参数指定光源的坐标位置,光源类型为点光源
lighting gouraud%%设置照明模式
axis off%%关闭坐标系
subplot(1,3,2)
surf(x,y,z,-z),shading flat%%绘制三维曲面图,并修改曲面的着色,渲染图像使网格线段和面具有恒定的颜色
light,lighting flat %%创建光源,在每个面上产生均匀的光照
light(&#39;position&#39;,[-1 -1 -2],&#39;color&#39;,&#39;y&#39;)%%在指定坐标位置添加一个黄色光源
light(&#39;position&#39;,[-1,0.5,1],&#39;style&#39;,&#39;local&#39;,&#39;color&#39;,&#39;w&#39;)%%在指定坐标位置添加一个白色电光光源
axis off%%关闭坐标系
load clown%%加载MATLAB内置的图片
C = flipud(X); %%上下翻转矩阵X,并将翻转的矩阵定义为矩阵的颜色矩阵
subplot(1,3,3);
surface(x,y,z,C,...
&#39;FaceColor&#39;,&#39;texturemap&#39;,...
&#39;EdgeColor&#39;,&#39;none&#39;,...
&#39;CDataMapping&#39;,&#39;direct&#39;)
axis off%%关闭坐标系
colormap(map)%%将图片关联的颜色图设置为当前图窗的颜色图
view(3)%%在三维视图中显示绘图
****************************************************
颜色可分为:
季节(summer,autumn,winter,spring)
温度(hot,cool)
材质(bone,copper)
hues(pink,gray)
颜色空间(hsv,colorcube-sort of)
以及:jet,lines,prism,flag,parula。
*******************************************************
light、lightangle:光源位置及照明模式
在绘制带光照的三维图像时,可以利用light命令与lightangle命令来确定光源位置,其中light命令使用格式非常简单,即为:
light(&#39;color&#39;, s1, &#39;style&#39;, s2, &#39;position&#39;, s3)
其中color、style与position的位置可以互换,s1,s2,s3为相应的可选值。例如light(&#39;position&#39;,[1 0 0])表示光源从无穷远处沿x轴向原点照射过来。
lightangle命令的使用格式如下:
lightangle(az,el) 在由方位角和仰角确定的位置放置光源
light_handle= lightangle(az,el) 创建一个光源位置并在light_handle中返回light的句柄
lightangle(light_handle,az,el) 设置由light_handle确定的光源位置
[az,el] = lightangle(light_handle) 返回由light_handle确定的光源位置的方位角和仰角
在确定了光源位置后,用户可能还会用到一些照明模式,这一点可以利用lighting命令来实现
*********************************************
&#39;FaceColor&#39;,&#39;texturemap&#39;,...%%设置曲面的颜色,在曲面上显示图像
&#39;EdgeColor&#39;,&#39;none&#39;,...%%不显示曲面的网格线颜色
&#39;CDataMapping&#39;,&#39;direct&#39;%%使用颜色数据作为颜色图的直接缩影
4.10 球面坐标中创建光源
[x,y,z]=sphere(40);
colormap(jet)
subplot(1,2,1);
surf(x,y,z),title(&#39;无光照&#39;);
axis equal
subplot(1,2,2)
surf(x,y,z,z)
lightangle(30,90),title(&#39;球面坐标中创建光源&#39;);
axis equal
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|