首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过垂直于视角的表面绘制三维图形中的二维图像

通过垂直于视角的表面绘制三维图形中的二维图像
EN

Stack Overflow用户
提问于 2019-05-04 04:01:26
回答 1查看 39关注 0票数 0

因此,我希望在3D绘图中包含一个2D图形并旋转该图形(使用view(alpha beta))。正如你可以想象的那样,这会扭曲曲面图。因此,基本上我正在试图弄清楚,如何调整曲面图,使其与视角垂直(以使图形看起来像它应该是的那样),并且仍然居中于原始位置。我发现了像这样的东西

代码语言:javascript
运行
复制
img = imread('galileo3.png');     % Load a sample image
xImage = [...]   % The x data for the image corners
yImage = [...]             % The y data for the image corners
zImage = [...]   % The z data for the image corners
surf(xImage,yImage,zImage,...    % Plot the surface
     'CData',img,...
     'FaceColor','texturemap');
view([phi theta]);

但是图像角的含义是什么呢?我如何调整原始坐标,将表面旋转到视角(但仍然居中在原始位置)?

EN

回答 1

Stack Overflow用户

发布于 2019-05-09 19:36:50

您可以使用viewmtx命令来确定正确的变换矩阵。要执行此操作,需要将所有X、Y和Z值重新整形为一行。如果原始数据没有Z值,请将其设置为零。

为了在“surf”命令中使用它们,你必须将变换后的坐标重塑回它们以前的形状。

转换矩阵只是视图的函数,因此您可以通过创建一个新的XYZ1变量并再次乘法,将相同的转换应用于多个数据集。如果您想在围绕绘图时制作动画,这也很方便。只需重新应用转换即可。

代码语言:javascript
运行
复制
sizeX = size(X); % repeat for Y, Z;
X = reshape(X,1,numel(X)); % repeat for Y, Z;

XYZ1 = [X; Y; Z; ones(size(X))]; % it's important that you make this 4 rows

A = viewmtx(Azimuth, Elevation);
Transformed_XYZ = A * XYZ1; % you must left-multiply by A

X_Transformed = Transformed_XYZ(1,:); % rows 2 and 3 for Y and Z respectively
X_Transformed = reshape(X_transformed, sizeX); % putting X' into the same shape as X - repeat for Y and Z
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55976399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档