将 3D 旋转矩阵应用于从表面函数获得的 x、y、z 值

瑞克

将 3D 旋转矩阵应用于从表面函数对象获得的 x,y,z 值。我得到的错误是由于矩阵不符合,但如何正确调整矩阵?

我知道 hgtransform / makehgtform 可以进行旋转,但我需要使用旋转矩阵,因为我计划使用从四元数创建的矩阵来测试它

我用圆柱体和表面函数创建了一个小平面。见下面的代码:

clear all,clf

ax=axes('XLim',[-2 2],'YLim', [-2 10],'ZLim',[-1.5 1.5]);
grid on;
%axis equal;
xlabel('x');
ylabel('y');
zlabel('z');
ax

% rotate around
rot_mat = [.707 -.707 0;.707 .707 0; 0 0 1] %rotation matrix

[xc yc zc] = cylinder([0.1 0.0]); %cone
[x y z]= cylinder([0.2 0.2]);


h(1) = surface(xc,zc,-yc,'FaceColor', 'red'); %noise cone
h(2) = surface(z,y,0.5*x,'FaceColor', 'blue'); %right wing
h(3) = surface(-z,y,0.5*x,'FaceColor', 'yellow');%left wing
h(4) = surface(x,-1.5*z,0.5*y,'FaceColor', 'green'); %main body
h(5) = surface(xc,(1.5*yc)-1.3,z*.5,'FaceColor', 'red'); %tail

view(3);

x_temp = get(h(1),'xdata'); % get x values
y_temp = get(h(1),'ydata');
z_temp =get(h(1),'zdata');

xc_new=x_temp.*rot_mat;
%zc_new=
%yc_new=

小飞机

我可以使用命令获取 x、y 和 z 值

x_temp = get(h(1),'xdata');
y_temp = get(h(1),'ydata');
z_temp = get(h(1),'zdata');

我得到的错误是由于矩阵不符合,但如何正确调整矩阵?

错误:test_object_matrix_rot:产品:不一致的参数(op1 是 2x21,op2 是 3x3)。

错误在于行xc_new=x_temp.*rot_mat;

PS:我使用的是 Octave 5.0.91,就像 Matlab

西瓦·斯里尼瓦斯·科卢库拉

你把很多事情搞砸了……事实上我会说,你让你的工作变得复杂。您应该立即处理矩阵以旋转到新位置而不是数组并从图中选择它们。

这一行:

x_temp = get(h(1),'xdata'); % get x values

给你一个 2*21 的数组,你的 rot_mat 是 3X3 ......你不能将它们相乘。您需要选择 (x,y,z) 并将该点与旋转矩阵相乘以移动该点。检查下面的伪代码.....你可以用下面的示例代码开发你的逻辑。

t = 0:0.1:1;
[X,Y,Z] = cylinder((t));

%% Rotation 
th = pi/2 ;
Rx = [1 0 0 ; 0 cos(th) -sin(th) ; 0 sin(th) cos(th)] ;
P0 = [X(:) Y(:) Z(:)] ;
P1 = P0*Rx ;

X1 = reshape(P1(:,1),size(X)) ;
Y1 = reshape(P1(:,2),size(X)) ;
Z1 = reshape(P1(:,3),size(X)) ;

figure
hold on
surf(X,Y,Z)
surf(X1,Y1,Z1)

view(3)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章