⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rotate.m

📁 这是一个关于hht变换很有用的工具箱
💻 M
字号:
function rotate(h,azel,alpha,origin)

% The function ROTATE rotates an object through angle alpha about a specified direction.
%
% Calling sequence-
% rotate(h,azel,alpha[,origin])
%
% ROTATE(H,AZEL,ALPHA,ORIGIN) rotates the object H through angle 
% ALPHA about an axis described by AZEL, which is a 2-vector of
% azimuth and elevation or a 3-vector.  The optional argument
% ORIGIN is a 3-vector used as the origin for rotation.
 
% Copyright (c) 1984-94 by The MathWorks, Inc.

if nargin < 4
	origin = [0 0 0];
end
x = get(h,'xdata')-origin(1);
y = get(h,'ydata')-origin(2);
z = get(h,'zdata')-origin(3);
if isempty(z)
    z = -origin(3)*ones(size(y));
end
[m,n] = size(z);
if prod(size(x)) < m*n
	[x,y] = meshgrid(x,y);
end
% find unit vector for axis of rotation
if prod(size(azel)) == 2 % theta, phi
	phi = pi*azel(1)/180;
	theta = pi*azel(2)/180;
	u = [cos(theta)*cos(phi); cos(theta)*sin(phi); sin(theta)];
elseif prod(size(azel)) == 3 % direction vector
	u = azel(:)/norm(azel);
	theta = asin(u(3));
	phi = atan2(u(2),u(1))-pi/2;
end
newxyz = [x(:), y(:), z(:)];
alph = alpha*pi/180;
cosa = cos(alph);
sina = sin(alph);
vera = 1 - cosa;
x = u(1);
y = u(2);
z = u(3);
rot = [cosa+x^2*vera x*y*vera-z*sina x*z*vera+y*sina; ...
       x*y*vera+z*sina cosa+y^2*vera y*z*vera-x*sina; ...
       x*z*vera-y*sina y*z*vera+x*sina cosa+z^2*vera];
newxyz = newxyz*rot;
newx = origin(1) + reshape(newxyz(:,1),m,n);
newy = origin(2) + reshape(newxyz(:,2),m,n);
newz = origin(3) + reshape(newxyz(:,3),m,n);
set(h,'xdata',newx,'ydata',newy,'zdata',newz);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -