[matlab]三维画图
三维画图函数
plot3函数
plot3是画三维图形的最基本函数,调用格式
plot3(X1,Y1,Z1,...)
plot3(X1,Y1,Z1,LineSpec,...)
plot3(...,'PropertyName',PropertyValue,...)
X1,Y1,Z1为向量或者矩阵,LineSpec定义曲线线型、颜色和数据点,PropertyName线对象的属性,PropertyValue属性的值
t = 0:pi/50:10*pi;
plot3(sin(t),cos(t),t);

三维网格线绘制
所用的函数为mesh,调用格式
mesh(X,Y,Z)
mesh(Z)
mesh(...,C)
mesh(...,'PropertyName',PropertyValue,...)
mesh(axes_handles,...)
h = mesh(...)
C是用于控制颜色,如果没有定义C,mesh绘制图的颜色随着Z值成比例变化;X和Y都是向量,长度分别为m和n,Z即为m×nm×n<script type="math/tex" id="MathJax-Element-13">m \times n</script>矩阵,网格点坐标(X(i),Y(j),Z(i,j))(X(i),Y(j),Z(i,j))<script type="math/tex" id="MathJax-Element-14">(X(i),Y(j),Z(i,j))</script>;参数没有X,Y时,,网格点坐标(i,j,Z(i,j))(i,j,Z(i,j))<script type="math/tex" id="MathJax-Element-15">(i,j,Z(i,j))</script>

网格透明控制
hidden on
hidden off
[X,Y,Z] = sphere(12);
subplot(1,2,1);
mesh(X,Y,Z);
hidden on
axis square off
subplot(1,2,2);
mesh(X,Y,Z);
hidden off
axis square off
axis square 将当前坐标系图形设置为方形。横轴及纵轴比例是1:1
axis equal 将横轴纵轴的定标系数设成相同值。

还有两个变种函数
1. meshc 绘制等值线图
2. meshz 包含0平面的网格图
[X,Y,Z] = peaks(30);
subplot(1,2,1);
meshc(X,Y,Z);
subplot(1,2,2);
meshz(X,Y,Z);

三维表面图surf
主要用于绘制一个着色的三维表面图,调用格式
surf(Z)
surf(Z,C)
surf(X,Y,Z)
surf(X,Y,Z,C)
surf(...,'PropertyName',PropertyValue)
surf(axes_handles,...)
h = surf(...)
参数和mesh基本相同
x = 0:0.2*pi:2*pi;
y = 0:0.2*pi:2*pi;
z = sin(x') * cos(y);
surf(x,y,z);

shading flat
%平面阴影
shading interp
%插值阴影
与mesh不同,surf没有办法进行透明显示,除非删除前面部分
可以把前面部分点的值赋值为NaN,绘图函数会自动的忽略NaN值的点,就会产生漏洞
[X,Y,Z] = peaks(20);
x = X(1,:);
%X向量的第一行
y = Y(:,1);
%Y向量的最后一列
i = find(y > .5 & y < 1);
j = find(x > -.4 & x < .8);
%find查找函数,查找符合条件的元素的索引和值
Z(i,j) = nan;
surf(X,Y,Z);

surf的变种函数
surfc %绘制底层等高线
surfl %有光照效果
其他的画图命令
cylinder
用于绘制圆柱图形
[X,Y,Z] = cylinder(r,n)
返回半径为r,高度为1的圆柱体x,y,z的坐标轴,圆柱体的圆周有n个距离相同的点
sphere
用于生成球体(只是返回点的坐标,绘图还需要调用mesh或者surf)
sphere
生成一个单位球,单位球有20×2020×20<script type="math/tex" id="MathJax-Element-18">20 \times 20</script>个面组成
sphere(n)
生成一个单位球,单位球有n×nn×n<script type="math/tex" id="MathJax-Element-19">n \times n</script>个面组成
stem3
用于绘制三维空间的离散数据序列
stem(x,y,z,c,'filled')
c指定线条和标记颜色,filled是否为标记填充颜色;只传递z,z的行和列作为x和y
等高线和带状图
contour(x,y,z,n,v) %二维等高线
contour3() %三维等高线
Pcolor() %带颜色的绘制
n是等高线层数,v是等值线的范围
ribbon(x,Y,width)
绘制Y关于x的带状列图,带宽度为width,默认为0.75
立体可视化
slice函数
正常情况下,计算机只能显示三个空间变量,而slice则通过颜色存储第四维空间变量
slice(V,sx,sy,sz)
函数V=V(X,Y,Z)V=V(X,Y,Z)<script type="math/tex" id="MathJax-Element-21">V = V(X,Y,Z)</script>在x轴,y轴,z轴上的切片图,坐标由sx,sy和sz来进行制定;V为三维向量
slice(X,Y,Z,Y,sx,sy,sz)
例如当X = X_{0}时,V=V(X0,Y,Z)V=V(X0,Y,Z)<script type="math/tex" id="MathJax-Element-24">V = V(X_{0},Y,Z)</script>变成一立体曲面
slice(V,XI,YI,ZI)
由参量矩阵XI,YI,ZI确定的超立体切面图;XI,YI,ZI定义了一个曲面,同时在曲面上的点计算V的值 ;XI,YI,ZI为同型矩阵
slice(...,'method')
| 参数 | 方法 |
|---|---|
| linear | 三次线性内插值(默认) |
| cubic | 三次立方内插值 |
| nearest | 最近内插值 |
例子
在−2≤x≤2−2≤x≤2<script type="math/tex" id="MathJax-Element-37">-2 \le x \le 2</script>,−2≤y≤2−2≤y≤2<script type="math/tex" id="MathJax-Element-38">-2 \le y \le 2</script>,−2≤z≤2−2≤z≤2<script type="math/tex" id="MathJax-Element-39">-2 \le z \le 2</script>区域绘制可视化函数
[x,y,z] = meshgrid(-2:.1:2,-2:.4:2,-2:.4:2);
v = sqrt(x.^2 + sin(y).^2+z.^2);
xslice = [-1.2,.8,2];
yslice = 2;
zslice = [-2,0];
slice(x,y,z,v,xslice,yslice,zslice);

控制视角
在有些时候因为我们的某个视角观察图像时不方便,所以可以合理的移动视角
view
view可以指定图形的观察点,用方位角和仰角一起或者空间中的一点确定位置
view([x,y,z])
视角沿着向量[x,y,z]指向原点
view(2) %默认二维视点,方位角0,仰角90
view(3) %默认三维视点,方位角-37.5,仰角30
view(az,el)
设置视点的方位角和仰角
viewmtx
用于视点转换矩阵
T = view(az,el)
返回一个与视点方位角za与仰角el对应地正交矩阵,不改变视角
T = view(az,el,phi)
返回一个透视的转换矩阵,透视的角度为phi
| phi值 | 说明 |
|---|---|
| 0 | 正交投影 |
| 10 | 类似远距离投影 |
| 25 | 类似普通投影 |
| 60 | 类似以广角投影 |
rorate3d
三维视角变换函数
rorate3d on
然后就可以用鼠标左键控制视角变化
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)