ก่อนอื่นต้องพูดว่า ถ้าอยากหมุนเมทริกซ์ 90 องศา มันมีคำสั่งง่าย คือ rot90(A) หรือง่ายกว่านั้นคือใช้คำสั่ง matrix transpose A.' แต่ถ้าอยากจะหมุน 45 องศาล่ะ ต้องทำยังไง
สมมติ matrix ที่ต้องการหมุน, A, มีขนาด n x m
1. ก่อนอื่น สร้าง index array ขึ้นมาก่อน
1. ก่อนอื่น สร้าง index array ขึ้นมาก่อน
x = linspace(-1,1,n); y = linspace(-1,1,m); [X,Y]=meshgrid(x,y);
2. กำหนดตัวแปร theta เพื่อบอกว่าจะหมุนกี่องศา และหมุน index array ตามสูตรนี้ (อ่านเพิ่มเติมเกี่ยวกับ rotation matrix ใน wikipedia ได้)
theta = pi/4; Xq = X.*cos(theta) - Y.*sin(theta); Yq = X.*sin(theta) + Y.*cos(theta);
3. หมุนmatrix A ด้วยคำสั่งinterp2
Vq = interp2(X,Y,A,Xq,Yq);
เท่านี้ก็เรียบร้อยแล้วค่ะ อยากจะหมุนกี่องศาก็เปลี่ยนตัวแปร theta เอา
[th, r] = cart2pol(X, Y); [Xq, Yq] = pol2cart(th+pi/4, r);
No comments:
Post a Comment