在八度/ matlab中使用仿射矩阵的旋转/仿射矩阵函数
Rotation / Affine matric function using affine matrix in octave / matlab
我可以创建一个以蓝色显示的图,这是正确的,但是当我尝试将其围绕点 (0,0) 旋转 90 度时,将创建红色图。它应该只围绕点 (0,0) 旋转 90 度。有人知道我的函数/代码的哪一部分导致了问题吗?
查看函数以及下面的示例代码:
%affine matrix rotation about a point rtaffine[theta,rpx,rpy,sigx,sigy,sigz]
%crx cry rpx rpy represent center of rotation
function [rotsig,theta,crpx,crpy,sigx,sigy,sigz] = rtaffine(theta,rpx,rpy,sigx,sigy,sigz)
rotsig=[];
%affinematrix=[];
siga=[sigx;sigy;sigz];
r00 = cosd(theta); r01 = -sind(theta); r10 = sind(theta); r11 = cosd(theta);
affinematrix = [r00, r01, rpx(1,1) - r00*rpx(1,1) - r01*rpy(1,1);...
r10, r11, rpy(1,1) - r10*rpx(1,1) - r11*rpy(1,1);...
0, 0, 1];
rotsig=affinematrix*siga; %new affine matrix
end
%radial arms
t = linspace(0,2*pi,500);
r=e^0.3063489*t;
x = r.*cos(t);
y = r.*sin(t);
plot(x,y)
hold on
%rotation
theta=90;
z = ones(size(y));
siga=[t;y;z];
rotsig=rtaffine(theta,0,0,siga(1,:),siga(2,:),siga(3,:));
plot(t(1,:),rotsig(1,:),'r-')
你正在传递 t
并试图在这两种情况下针对 t
而不是 x
作图:
siga=[t;y;z];
应该是
siga=[x;y;z];
和
plot(t(1,:),rotsig(1,:),'r-')
应该是
plot(rotsig(1,:),rotsig(2,:),'r-')
我可以创建一个以蓝色显示的图,这是正确的,但是当我尝试将其围绕点 (0,0) 旋转 90 度时,将创建红色图。它应该只围绕点 (0,0) 旋转 90 度。有人知道我的函数/代码的哪一部分导致了问题吗?
查看函数以及下面的示例代码:
%affine matrix rotation about a point rtaffine[theta,rpx,rpy,sigx,sigy,sigz]
%crx cry rpx rpy represent center of rotation
function [rotsig,theta,crpx,crpy,sigx,sigy,sigz] = rtaffine(theta,rpx,rpy,sigx,sigy,sigz)
rotsig=[];
%affinematrix=[];
siga=[sigx;sigy;sigz];
r00 = cosd(theta); r01 = -sind(theta); r10 = sind(theta); r11 = cosd(theta);
affinematrix = [r00, r01, rpx(1,1) - r00*rpx(1,1) - r01*rpy(1,1);...
r10, r11, rpy(1,1) - r10*rpx(1,1) - r11*rpy(1,1);...
0, 0, 1];
rotsig=affinematrix*siga; %new affine matrix
end
%radial arms
t = linspace(0,2*pi,500);
r=e^0.3063489*t;
x = r.*cos(t);
y = r.*sin(t);
plot(x,y)
hold on
%rotation
theta=90;
z = ones(size(y));
siga=[t;y;z];
rotsig=rtaffine(theta,0,0,siga(1,:),siga(2,:),siga(3,:));
plot(t(1,:),rotsig(1,:),'r-')
你正在传递 t
并试图在这两种情况下针对 t
而不是 x
作图:
siga=[t;y;z];
应该是
siga=[x;y;z];
和
plot(t(1,:),rotsig(1,:),'r-')
应该是
plot(rotsig(1,:),rotsig(2,:),'r-')