MATLAB绘制纹理映射和参数化表面图形
利用meshgrid函数可以创建一个随机采样数据点的栅格,以便计算和绘制我们在前面定
义的Z函数。MATLAB然后通过将相连的矩阵元素连接在-起形成四角形的方式来构建表面
图形。
为了从随机采样数据中生成表面图形,首先需要调用griddata函数将数据内插到规则分
布的空间点上, 然后调用mesh函数和surf函数。
下面的例子中,首先在指定范围的随机点上计算Z函数,然后生成随机采样数据,并显
示为表面图形。整个过程包含下面几个步骤:
调用linespace函数在随机采样数据范围内生成均匀分宁布的数据。
调用meshgrid函数创建栅格。
调用griddata函数将数据内插到由meshgrid函数返回的规则分布的空间栅格上。
调用任意一个绘图函数将数据显示出来。
代码如下:
x=rand(100, 1) *16-8;
y=rand(100, 1) *16-8;
r=sqrt(x.^2+y.^2) +eps;
z=sin(r) ./r;
xlin=linspace(min(x),max(x),33);
ylin=linspace(min(y),max(y),33);
[X,Y] =meshgrid(xlin, ylin);
Z=griddata(x, y, z, X, Y, 'cubic');
mesh(X, Y, Z)
axis tight;
hold on
plot3(x,y, z,'.' ,'MarkerSize', 15)

MATLAB中, 绘制表面图形的函数可以再数据参数后面添添加另外两个附加的矢量或矩阵
参数,以对表面按照指定的x数据和y数据进行描述。例如,假设Z为一个mXn的矩阵, x
是一个n维的矢量,y是一个m维的矢量,则:
mesh(x, y, Z, C)
将绘制一个带有顶点的网格表面图形,其中顶点的颜色由C(ij)来指定,坐标为:
(x(j),y(i),Z(i,j))
此处x对应于矩阵Z的列,而y对应于Z的行。
更为一般的情况,即X、Y、Z、C均为同维的矩阵(设均为m×n),则表达式:
mesh(X, Y, Z, C)
将绘制一个带有顶点的网格表面图形,其中顶点的颜色由C(i jj) 来指定, 坐标为:
(X(ij),Y(ij),Z(ij))
下面的例子中使用了球形坐标系, 绘制一个以Hadamard矩阵表征黑白相间的立体球。
Hadamard矩阵是一个正交阵, 主要用于信号处理编码理论中。代码如下:
k=5;
n=2^k-1;
theta=pi*(-n:2:n) /n;
phi=(pi/2) *(-n:2:n)'/n;
X=cos(phi)*cos(theta);
Y=cos(phi)*sin(theta);
Z=sin(phi)*ones(size(theta));
colormap([0 0 0; 1 1 1])
C=hadamard(2^k);
surf(X,Y, Z, C)
axis square

在MATLAB中, 纹理映射是一种将二维图像映射到三维表面图形上的技术。这种技术
通过转换颜色数据使二维图像与三维表面图形保持一致。这里的颜色数据可以是任何一种图
形,甚至可以是扫描的图像。
下面的例子将一个如图5-15所示的数据图形作为纹理映射到立体球的表面。
load earth%加载二维数据图形
sphere;
h=findobj('Type', 'surface');
hemisphere=[ones(257,125),X,ones(257,125)];
set(h,'CData',flipud(hemisphere),'FaceColor','texturemap')
colormap(map)
axis equal
view([90 0])
set(gca, 'CameraViewAngleMode', 'manual')
view([65 30])

开发环境:MATLAB 2021b
MATLAB高级应用---图形及影像处理 清源计算机工作室 编著----北京[M]:机械工业出版社
- 点赞
- 收藏
- 关注作者
评论(0)