因此,我希望在3D绘图中包含一个2D图形并旋转该图形(使用view(alpha beta))。正如你可以想象的那样,这会扭曲曲面图。因此,基本上我正在试图弄清楚,如何调整曲面图,使其与视角垂直(以使图形看起来像它应该是的那样),并且仍然居中于原始位置。我发现了像这样的东西
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]);
但是图像角的含义是什么呢?我如何调整原始坐标,将表面旋转到视角(但仍然居中在原始位置)?
发布于 2019-05-09 19:36:50
您可以使用viewmtx命令来确定正确的变换矩阵。要执行此操作,需要将所有X、Y和Z值重新整形为一行。如果原始数据没有Z值,请将其设置为零。
为了在“surf”命令中使用它们,你必须将变换后的坐标重塑回它们以前的形状。
转换矩阵只是视图的函数,因此您可以通过创建一个新的XYZ1变量并再次乘法,将相同的转换应用于多个数据集。如果您想在围绕绘图时制作动画,这也很方便。只需重新应用转换即可。
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
https://stackoverflow.com/questions/55976399
复制相似问题