MATLAB绘制纹理映射和参数化表面图形

临风暖阳 发表于 2022/10/31 15:39:14 2022/10/31
【摘要】 笔者用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]:机械工业出版社

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。