rotate1

clf
clear
% Set the limits and select a view
axes('XLim',[-1 1],'YLim',[-1 1],'ZLim',[-1 1]);
view(3); grid on; axis square; axis equal
camva(4);

% green sphere
mpoint([0 0 0],0.4,'green');

% arrow
ux = [0 -1 1];
ux = ux/norm(ux);
arrow(ux);

% rotating point
pn = cross([0 0 1],ux);
p = ux+0.3*pn;
scl = 0.03;
tp = mpoint(p,scl,'red');

% show rotation path
h = findobj(tp,'Type','Surface');
set(h,'EdgeColor','none');

t = hgtransform('Parent',gca);
set(tp,'Parent',t);


ph = [p 1];
N = 300;
x = zeros(N,1);
y = zeros(N,1);
z = zeros(N,1);
for k=1:300
    phi = (k-1)*pi/180;
    R = makehgtform('axisrotate',ux,phi);
    pnew = ph*R';
    x(k)= pnew(1);
    y(k)= pnew(2);
    z(k)= pnew(3);
end
hold on
plot3(x,y,z,'k');
hold off
enable = true;
if enable
    mov = avifile('rotate1.avi','fps',5);
end

for k=0:6:360
    R = makehgtform('axisrotate',ux,k*pi/180);
    set(t,'Matrix',R);
    %drawnow;
    pause(0.05);
    if enable
        F = getframe(gca);
        rgb = frame2im(F);
        F = im2frame(rgb);
        mov = addframe(mov,F);
    end
end
if enable
    mov = close(mov);
end