所以我想在3D图中包括2D图形并旋转图形(带有view(α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]);
但是图像角点是什么意思?以及如何调整原始坐标,以将表面朝着观看角度旋转(但仍以原始位置为中心)?
答案 0 :(得分:0)
您可以使用viewmtx命令确定正确的转换矩阵。为了完成这项工作,您需要将所有X,Y和Z值重新整形为一行。如果原始数据没有Z值,请将其设置为零。
您必须将变换后的坐标重塑回其先前的形状,以便在“冲浪”命令等中使用它们。
转换矩阵只是视图的一个函数,因此您只需将一个新的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