一、三维绘图
1.曲线图
plot3(X1,Y1,Z1,...):以默认线性属性绘制三维点集(X1,Y1,Z1)确定的曲线
plot3(X1,Y1,Z1,LineSpec):以参数LineSpec确定的线性属性绘制三维点集
plot3(X1,Y1,Z1,'PropertyName',PropertyValue,...):根据指定的属性绘制三维曲线
theta = 0:0.01*pi:2*pi;
x = sin(theta);
y = cos(theta);
z = cos(4*theta);
plot3(x,y,z,'LineWidth',2);
hold on;
theta = 0:0.02*pi:2*pi;
x = sin(theta);
y = cos(theta);
z = cos(4*theta);
plot3(x,y,z,'rd','MarkerSize',10,'LineWidth',2);

2.网格图
绘制函数z=f(x,y)的三维网格图的过程:

确定自变量x和y的取值范围和取值间隔
利用meshgrid函数生成“格点”矩阵
计算自变量采样“格点”上的函数值:Z = f(x,y)
matlab中提供了mesh函数用于实现绘制网格图:

mesh(X,Y,Z):绘制三维网格图,颜色与曲面的高度相匹配
mesh(Z):系统默认颜色与网格区域的情况下绘制数据Z的网格图
mesh(...,C,'PropertyName',PropertyValue):对指定的颜色C,指定的属性值,画出三维图形
meshc(...):用于画网格图与基本的等值线图
meshz(...):用于绘制包含零平面的网格图
h = mesh(...):返回图形对象句柄属性值向量h
[X,Y] = meshgrid(-3:.5:3);
Z = 2 * X.^2-3 * Y.^2;
subplot(2,2,1)
plot3(X,Y,Z)
title('plot3')
subplot(2,2,2)
mesh(X,Y,Z)
title('mesh')
subplot(2,2,3)
meshc(X,Y,Z)
title('meshc')
subplot(2,2,4)
meshz(X,Y,Z)
title('meshz')
set(gcf,'Color','w');

3.曲面图
表示三维空间内数据的变化规律。函数有surf、surfc和surfl

surf(X,Y,Z):绘制三维的彩色曲面图。
surf(X,Y,Z,C):图形的颜色采用参数C,同样可以添加属性值
[x,y] = meshgrid(-3:1/8:3);
z = peaks(x,y);
subplot(2,2,1);surf(z);
title('surf(z)绘制形式');
subplot(2,2,2);surf(x,y,z);
title('surf(x,y,z)绘图形式');
subplot(2,2,3);surfl(x,y,z);
title('surfl(x,y,z)绘图形式');
subplot(2,2,4);surfc(x,y,z);
title('surfc(x,y,z)绘图形式');

4.光照模型
光照是利用方向官员照亮物体的技术,这项技术能使表面微妙的差异更容易看到,光照也能用来对三维的图像增加现实感。

camlight函数:

camlight('light'):在照相机的右上方设置一个光源
camlight('light'):在照相机的左上方设置一个光源
camlight(az,el):建立一个相对于照相方位角az与仰角el的光源
camlight(...,'style'):设置光源的类型为'local'或‘infinite’
light_handle = camlight(...):返回光源的句柄值
surf(peaks)
axis vis3d
h = camlight('left');
for i = 1:20;
camorbit(10,0)
camlight(h,'left')
pause(.1)
end

light函数:

light('PropertyName',propertyvalue,...):可设置的光源的属性有color,style,position
handle = light(...):返回光源的句柄值
% 准备数据
[X,Y] = meshgrid(-1:0.1:1);
Z = sin(X.^2.*pi) + cos(Y.*pi);
% 设置无限远平行光源光照效果
subplot(1,2,1);
surf(X,Y,Z);
light('Style','infinit','Position',[0 -0.6 1]);
title('无限远平行光')
% 设置本地光源辐射源光照效果
subplot(1,2,2);
surf(X,Y,Z);
light('Style','local','Position',[0 -0.6 1]);
title('本地辐射光')

lighting函数:

lighting flat:为入射光均匀洒落在图形对象的每个面上,主要与faced配合使用
lighting gouraud:先对定点颜色插补,在对定点勾画的面色进行插补,用于曲面表现
lighting phong:对定点出的法线插值,在计算个像素的反光,效果好,但费时
lighting none:关闭所有光源
[x,y,z] = sphere(25);
subplot(2,2,1);surf(x,y,z);
axis equal;shading interp;
hold on;
title('lighting none')
subplot(2,2,2);surf(x,y,z);
axis equal;
light('position',[0,0.5 1]);
shading interp;lighting flat;
hold on;
title('lighting flat');
subplot(2,2,3);surf(x,y,z);
axis equal;
light('position',[0,0.5 1]);
shading interp;lighting gouraud;
hold on;
title('lighting gouraud');
subplot(2,2,4);surf(x,y,z);
axis equal;
light('position',[0,0.5 1]);
shading interp;lighting phong;
hold on;
title('lighting phong');
set(gcf,'color','w');

lightangle函数:

lightangle(az,el):az与el表示灯光的方位角和仰角
light_handle = lightangle(az,el):返回球形坐标光源的句柄值
sphere(25);
axis vis3d
h = light;
for az = -50:10:50
lightangle(h,az,30)
pause(.2)
end

5.等值线
等值线图又叫等高线图。默认情况下,MATLAB就是画出了相应于一系列相等的空间Z值得等值线。matlab提供了contour和contour3函数绘制二维和三维的等高线。下面的格式contour换成contour3就是三维的等值线。

contour(z):直接绘制矩阵z的等高线
contour(x,y,z):用x和y指定等高线的x,y坐标
contour(z,n)或contour(x,y,z,n):用标量n指定绘制等高线的线条数,即从最低位置到最高位置所用的线条总数
contour(z,v)或contour(x,y,z,v):向量v中的元素指定绘制等高线的位置,该向量的长度对应绘制的线条数
[c,h] = contour(...):返回等高线矩阵c和列向量h,h是线条对象或补片对象的句柄。

6.三维特殊图形
MATLAB中,也提供了相应的函数用于实现特殊数的三维绘图。

t = 0:pi/10:2*pi;
[X1,Y1,Z1] = cylinder(2 + cos(t));
subplot(2,3,1);surf(X1,Y1,Z1)
axis square;title('三维柱面图');
subplot(2,3,2);sphere
axis equal;title('三维球体');
x1 = [1 3 0.5 2.5 2];
explode = [0 1 0 0 0];
subplot(2,3,3);pie3(x1,explode)
title('三维饼图');axis equal;
X2 = [0 1 1 2;1 1 2 2;0 0 1 1];
Y2 = [1 1 1 1;1 0 1 0;0 0 0 0];
Z2 = [1 1 1 1;1 0 1 0;0 0 0 0];
C = [0.5000 1.0000 1.0000 0.5000;
1.0000 0.5000 0.5000 0.1667;
0.3330 0.3330 0.5000 0.5000];
subplot(2,3,4);fill3(X2,Y2,Z2,C);
colormap hsv
title('三维填充图');axis equal;
[x2,y2] = meshgrid(-3:.5:3,-3:.1:3);
z2 = peaks(x2,y2);
subplot(2,3,5);ribbon(y2,z2)
colormap hsv
title('三维彩带图');axis equal;
[X3,Y3] = meshgrid(-2:0.25:2,-1:0.2:1);
Z3 = X3 .* exp(-X3.^2 - Y3.^2);
[U,V,W] = surfnorm(X3,Y3,Z3);
subplot(2,3,6);quiver3(X3,Y3,Z3,U,V,W,0.5);
hold on
surf(X3,Y3,Z3);
colormap hsv
view(-35,45);
title('三维向量场图');axis equal;
set(gcf,'Color','w');

7.视角设置
从不同的角度观察物体,所看到的物体形状是不一样的。同样,从不同视点绘制的三维图形其形状也是不一样的。

视点的位置可由方位角和仰角表示。方位角又称旋转角,它是视点与原点连线在xy平面上的投影与y轴负方向形成的角度,正值表示逆时针,负值表示顺时针。仰角又称为视角,它是视点与原点连线与xy平面的夹角,正值表示视点在xy平面上方。负值表示视点在xy平面下方。

matlab中提供了view和rotate函数用于设置观察图的视角。view函数用于调整图形的视角效果。

view(az,el)或view([az,el]):az带表方位角,el代表视角
view([x,y,z]):在直角坐标中设置视角的坐标为(x,y,z)
view(2)或view(3):分别使用matlab中默认的二维视角设置(az=0,el=90)和三维视角设置(az=-38.5,el=30)
view(ax,...):使用ax轴代替当前轴显示图的视角
[az,el] = view:返回图形的视角与俯视角值
T = view:返回一个4x4阶的当前变换矩阵
x = -5:0.5:5;
[x,y] = meshgrid(x);
z = x.^2-y.^2-2;
subplot(2,2,1);surf(x,y,z);
view(-38.5,30);
title('方位角为-38.5,俯视角为30');
subplot(2,2,2);surf(x,y,z);
view(-38.5+90,30);
title('方位角为-38.5+90,俯视角为30');
subplot(2,2,3);surf(x,y,z);
view(-38.5,60);
title('方位角-38.5,俯视角为60');
subplot(2,2,4);surf(x,y,z);
view(180,0);
title('方位角为180,俯视角为0');
set(gcf,'color','w'); % 设置图形的背景颜色

rotate函数用于旋转三维图形,函数的格式为

rotate(h,direction,alpha):将图形的句柄值h的对象绕方向旋转一个角度,h表示是被旋转的对;direction有两种设置方法,球坐标设置法,将其设置为[theta,phi],其单位为‘度’;直角坐标法,也就是[x,y,z];参数alpha是绕方向按照右手法则旋转的角度。
rotate(...,origin):参数origin为方向轴的“支点”坐标,系统默认为坐标原点。
sp11 = subplot(2,2,1);
hll = surf(sp11,peaks(20));
title('无旋转')
sp12 = subplot(2,2,2);
h12 = surf(sp12,peaks(20));
title('绕x轴旋转')
zdir = [1 0 0];
rotate(h12,zdir,25)
sp21 = subplot(2,2,3);
h21 = surf(sp21,peaks(20));
title('绕Y轴旋转')
zdir = [0 1 0];
rotate(h21,zdir,25)
sp22 = subplot(2,2,4);
h22 = surf(sp22,peaks(20));
title('绕X-Y轴旋转')
zidr = [1 1 0];
rotate(h22,zdir,25)
set(gcf,'color','w');

二、四维绘图
在MATLAB中,提供了meshgrid、slice、contourslice函数,可充分体现四维图形的效果。

1.slice函数

matlab提供了中表现四维空间的方式,即使用色彩,这种方式需要用户调用slice函数来显示“切片”图。

slice(V,sx,sy,sz):绘制立体V在x轴,y轴,z轴方向上与sx,sy,sz向量所对应点的切片图。其中V为mxnxp的三维立体数组。
slice(X,Y,Z,V,X1,Y1,Z1):沿着由数组X1,Y1与Z1定义的曲面绘制穿过立体V的切片。
slice(...,'method'):指定内插的方法,method以下方法之一
slice(axes_handle,...):在句柄值axes_handle的坐标值中绘制立体切片图
h = slice(...):返回组成立体切片图的surface图形对象句柄值向量h.
[x,y,z] = meshgrid(-2:.2:2,-2:.25:2,-2:.16:2);
v = x.*exp(-x.^2-y.^2-z.^2);
xslice = [-1.2,.8,2];
yslice = 2;
zslice = [-2,0];
[xsp,ysp,zsp] = sphere;
slice(x,y,z,v,[-2,2],2,-2)
for i = -3:.2:3
hsp = surface(xsp + i,ysp,zsp);
rotate(hsp,[1 0 0],90)
xd = get(hsp,'XData');
yd = get(hsp,'YData');
zd = get(hsp,'ZData');
delete(hsp)
hold on
hslicer = slice(x,y,z,v,xd,yd,zd);
axis tight
xlim([-3,3])
view(-10,35)
drawnow
delete(hslicer)
hold off
end
2.contourslice函数

用于实现三元函数切面等高线的效果图。

contourslice(X,Y,Z,V,Sx,Sy,Sz):X,Y,Z是维数为m x n x p的自变量“格点”数组;V是与X,Y,Z同维的函数值数组;Sx,Sy,Sz是决定切片位置的数值向量。假如取空阵,就表示不取切片。

[x y z v] = flow;
h = contourslice(x,y,z,v,[1:9],[],[0],linspace(-8,2,10));
axis([0,10,-3,3,-3,3]);daspect([1,1,1])
camva(24);
camproj perspective;
campos([-3,-15,5])
set(gcf,'Color',[.5,.5,.5],'Renderer','zbuffer')
set(gca,'Color','black','XColor','white',...
'YColor','white','Zcolor','white')
box on

原文:https://blog.csdn.net/gyt15663668337/article/details/83962357

matlab的三维绘图和四维绘图的更多相关文章

  1. Latex--TikZ和PGF--高级文本绘图,思维绘图,想到--得到!

    Latex--TikZ和PGF--高级文本绘图,思维绘图,想到--得到! TikZ和PGF是一种用在TeX上的CLI绘图工具.CLI和GUI是两种常见的绘图方式,前者是所想即所得(WYTIWYG)的, ...

  2. cocos2d-x游戏引擎核心之六——绘图原理和绘图技巧

    一.OpenGL基础 游戏引擎是对底层绘图接口的包装,Cocos2d-x 也一样,它是对不同平台下 OpenGL 的包装.OpenGL 全称为 Open Graphics Library,是一个开放的 ...

  3. MATLAB的三维散点图

    MATLAB中三维散点图函数为scatter3(x,y,z) 三维火柴图为stem3(x,y,z)

  4. C#-gdi绘图,双缓冲绘图,Paint事件的触发

    一. 画面闪烁问题与双缓冲技术 1.1 导致画面闪烁的关键原因分析: 1  绘制窗口由于大小位置状态改变进行重绘操作时 绘图窗口内容或大小每改变一次,都要调用Paint事件进行重绘操作,该操作会使画面 ...

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

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

  6. QT_8_Qt中的事件处理_定时器事件_定时器类_事件分发器_事件过滤器_绘图事件_高级绘图事件_绘图设备_QFile 文件读写_QFileInfo文件信息

    Qt中的事件处理 1.1. 捕获QLabel中是鼠标事件 1.2. enterevent 鼠标进入 1.3. leaveevent 鼠标离开 1.4. 鼠标按下MyLabel::mousePressE ...

  7. Matlab 三维绘图与统计绘图

    一. 三维绘图 p = : pi/: *pi; x = cos(p); y = sin(p); z = p; plot3(x,y,z) x = -:.:; %有-2为起点,2为递增步长,2为终止点 y ...

  8. matlab读取csv文件数据并绘图

    circle.m(画二维圆的函数) %该函数是画二维圆圈,输入圆心坐标和半径%rectangle()函数参数‘linewidth’修饰曲线的宽度%'edgecolor','r',edgecolor表示 ...

  9. matlab学习笔记8 基本绘图命令-基本绘图操作

    一起来学matlab-matlab学习笔记8 基本绘图命令_2基本绘图操作 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matlab 程序设计与综合应用>张德丰等著 ...

随机推荐

  1. java随机排座位

    //打乱学生顺序 Collections.shuffle(); 容我记个单词 peer: vi.凝视; 盯着看; 隐退,若隐若现; 同等,比得上;n.同辈,同等的人; 贵族; 同伴,伙伴;adj.贵族 ...

  2. 函数式编程语言(functional language)

    内容根据百度词条整理! 转载请声明来源:https://baike.baidu.com/item/%E5%87%BD%E6%95%B0%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8 ...

  3. D Cloud of Hashtags Codeforces Round #401 (Div. 2)

    Cloud of Hashtags [题目链接]Cloud of Hashtags &题意: 给你一个n,之后给出n个串,这些串的总长度不超过5e5,你要删除最少的单词(并且只能是后缀),使得 ...

  4. 记无法用被动方式登录远程linux主机的原因

    [环境]: linux主机:华为企业云 ftp服务端:vsftpd 客户端:ftp命令行工具,安卓端ES文件浏览器 [现象]: 在ES文件浏览器中,使用被动方式没法连接,使用主动方式可以连接,但是没法 ...

  5. SQLGetEnvAttr

    SQLGetEnvAttr 函数定义: 用于得到当前环境的各项设置属性 SQLRETURN SQLGetEnvAttr( SQLHENV     EnvironmentHandle, SQLINTEG ...

  6. modelform的简介

    Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否 ...

  7. MapReduce的map个数调节 与 Hadoop的FileInputFormat的任务切分原理

    在对日志等大表数据进行处理的时候需要人为地设置任务的map数,防止因map数过小导致集群资源被耗光.可根据大表的数据量大小设置每个split的大小. 例如设置每个split为500M: set map ...

  8. linux常用命令:more 命令

    more命令,功能类似 cat ,cat命令是整个文件的内容从上到下显示在屏幕上. more会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会 ...

  9. pcb走线注意事项笔记

    一.高压隔离. PCB的安全距离: 1.电气间隙或者叫做控件距离. (两相邻的后者一个到相邻电机壳表面的沿空气测量的最短距离,电气间隙的决定,根据测量的工作电压以及绝缘等级就可以决定距离.) a.一次 ...

  10. 获取当前exe的路径

    1.Assembly.GetExecutingAssembly().Location得到exe的全路径,Path.GetDirectoryName得到目录路径,不要用Directory.GetCurr ...