在看三维图像相关的代码时,理解的不太透彻,有时间了就看了几本书,巩固一下。
meshgrid()很常见的一个函数,见下图
第一句话很关键啊,其实就是产生坐标,因为二维图像的时候,用的是向量来表示坐标点,那么三维图像的时候,坐标点就应该用矩阵来表示,这是很自然的一件事情,但是落实到编程实现的时候,却不太直观,
如下是我们想象中的坐标和函数值
但计算机处理的时候,不是这样的。他会把
的坐标分开来存
可以想象到的是,
是坐标点的缘故,X的每一列肯定是同一个值,Y的每一行也是同一个值。
%%
X =
-2.0000 -1.5000 -1.0000 -0.5000 0 0.5000 1.0000 1.5000 2.0000
-2.0000 -1.5000 -1.0000 -0.5000 0 0.5000 1.0000 1.5000 2.0000
-2.0000 -1.5000 -1.0000 -0.5000 0 0.5000 1.0000 1.5000 2.0000
-2.0000 -1.5000 -1.0000 -0.5000 0 0.5000 1.0000 1.5000 2.0000
-2.0000 -1.5000 -1.0000 -0.5000 0 0.5000 1.0000 1.5000 2.0000
-2.0000 -1.5000 -1.0000 -0.5000 0 0.5000 1.0000 1.5000 2.0000
-2.0000 -1.5000 -1.0000 -0.5000 0 0.5000 1.0000 1.5000 2.0000
-2.0000 -1.5000 -1.0000 -0.5000 0 0.5000 1.0000 1.5000 2.0000
-2.0000 -1.5000 -1.0000 -0.5000 0 0.5000 1.0000 1.5000 2.0000
Y =
-2.0000 -2.0000 -2.0000 -2.0000 -2.0000 -2.0000 -2.0000 -2.0000 -2.0000
-1.5000 -1.5000 -1.5000 -1.5000 -1.5000 -1.5000 -1.5000 -1.5000 -1.5000
-1.0000 -1.0000 -1.0000 -1.0000 -1.0000 -1.0000 -1.0000 -1.0000 -1.0000
-0.5000 -0.5000 -0.5000 -0.5000 -0.5000 -0.5000 -0.5000 -0.5000 -0.5000
0 0 0 0 0 0 0 0 0
0.5000 0.5000 0.5000 0.5000 0.5000 0.5000 0.5000 0.5000 0.5000
1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000
1.5000 1.5000 1.5000 1.5000 1.5000 1.5000 1.5000 1.5000 1.5000
2.0000 2.0000 2.0000 2.0000 2.0000 2.0000 2.0000 2.0000 2.0000
顺便又发现了下面的不同。
plot(X,Y,'o');
plot(X,Y);
很奇怪为什么添加了一个参数之后,线条没有了,变成了一条条垂直线。事出必有因,查查plot函数把。
应该就是上面一段话了,猜测三个参数如果只写一个的话会使得其他两个参数为空?也不对,先这样理解吧。
回归正题,有了坐标点,以及函数关系式,可以画图了。
%%
clc
clear all
close all
[X,Y] = meshgrid([-1:0.2:1]);%创建网格数据
Z = X.*(-X.^2 - Y.^2);
plot3(X,Y,Z);
xlabel('x');
ylabel('y');
zlabel('z');
%%
可以发现plot3丢失了许多细节,不太好看。
%%