0
$\begingroup$

Greetings All I have a function that creates an affine matrix that works for 2D rotation around an arbitrary point but now I would like it to work for 3D rotations also. The working function example is below with it's example function:

%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) %format in rrtaffine[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 endfunction 

Example code to use with function below:

clear all, clc,clf,tic t= linspace(0,2*pi,1000); %from 0 to 1 with 100 equal spaces between freq=1; y=sin(freq*(t)); %pi will change phase of angle (t+pi) y2=sin(freq*(t)); %pi will change phase of angle (t+pi) z = ones(size(y)); siga=[t;y;z]; siga2=[t;y2;z]; rpcalc=[t(1,size(t,2)/2),0]; %size(b,2) %will count all the rows with a 1, count all colmns with 2 rp=[t(1,size(t,2)/2),0]; %rotation point half way on x/t axis rotsigt=[]; for theta=0:1:360     rotsig=rtaffine(theta,rp(1,1),rp(1,2),siga(1,:),siga(2,:),siga(3,:));     rotsig2=rtaffine((theta*2),rp(1,1),rp(1,2),siga(1,:),siga(2,:),siga(3,:));      rotsigcomb=rotsig+rotsig2;     axis([-10 15 -10 10])     plot(0,0,'g*',rp(1,1),rp(1,2),'r*',rotsig(1,:),rotsig(2,:),'b-',rotsig2(1,:),rotsig2(2,:),'r',rotsigcomb(1,:),rotsigcomb(2,:),'g')     %plot(0,0,'g*',rp(1,1),rp(1,2),'r*',rotsigcomb(1,:),rotsigcomb(2,:),rotsig2(1,:),rotsig2(2,:))     axis([-10 15 -10 10])     title(['Phase Shift is ',num2str(theta),' deg']);     grid on     pause(.001)     %rotsigt=[rotsigt(:,:),rotsig(:,:)]; end fprintf('- Complete re-import test in %4.4fsec or %4.4fmins\n',toc,toc/60); 

Any suggestions?

  • 0
    the way to do this is 1) Translate point you want to rotate about to origin (0,0) 2) Rotate signal $3$) Translate signal back to original position2011-03-26

1 Answers 1

1

the way to do this is: 1) Translate point you want to rotate about to origin (0,0) 2) Rotate signal 3) Translate signal back to original position