1/20/07

1.1.6 內建之rotate指令

MATLAB也有內建之迴轉指令rotate,該指令係針對某一特定方向作物件旋轉。其語法如下:

rotate(h,direction,alpha)
rotate(...,origin)

迴轉函數是將一個三度空間的物件依右手法則進行旋轉。這個指令並無輸出,僅就h的圖形直接改變資料。

rotate(h,direction,alpha) 之敘述是將物件h(握把)作alpha 角度的迴轉,而direction則是以原點為參考點之轉動軸,通常以二維或三維向量表示。

rotate(...,origin)則是特別指出迴轉軸之原點,以三維向量表示。預設原點為繪圖方塊(plot box)之中心點。



須注意的是待轉動的物件應同屬座標軸的子系,物件之資料會因旋轉過程而改變,這與view 及rotate3d兩指令不同,後者僅是改變外在的觀測方位。

迴轉軸是經過原點與另一點P來決定。P點可用球座標[theta phi]或直角座標表示。球座標係以兩項參數[theta phi]決定旋轉方向,theta為xy面上由正x軸算起反時鐘方向為正;phi則是由xy面上算起的高度。

直角座標則以三項參數(X,Y,Z)表示,迴轉方向則是由原點指向這一點的座標。一般而言,rotate這個指令會改變圖形中之 Xdata, Ydata與 Zdata 等之參數。


例一、將一物件圖沿x軸迴轉180º



% demo_trans4_1
subplot(1,2,1); h1 = surf(peaks(20));% original plot
xlabel(’Orginal plot’);
subplot(1,2,2); h2= surf(peaks(20)); %duplicate it for comparison
rotate(h2,[1 0 0],180);
xlabel(‘Rotate(h2,[1 0 0],180)’);



二、將一個長方形的物件沿z軸迴轉45º、90º、135º、180º、225º



%demo_rot3.m
clf;
h = surf(peaks(20));
zdir = [0 0 1];
center = [10 10 0];
hold on;
axis equal;
xlabel('x-axis');
ylabel('y-label');
zlabel('z-label');
for i=0:45:225,
rotate(h,zdir,i,center);
pause;
end;



利用上面程式執行後,可以看到peaks之圖形依z軸方向作迴轉的情形。其中之pause指令則是依執行者按鍵回應而逐步完成整套圖形之轉換。