利用矩陣乘法來實現剛體的平面運動,並繪製剛體運動前後的圖形用平面坐標系中的一個閉合圖形來描述剛體,用一個矩陣X來描述它。X的一列表示剛體一個頂點的坐標。為了使圖形閉合,X的最後一列和第一列相同;為了實現剛體的平移運算,給矩陣X添加元素值為1的一行,使矩陣X的形狀為3Xn若有矩陣:可以證明:矩陣Y1是...
利用矩陣乘法來實現剛體的平面運動,並繪製剛體運動前後的圖形
用平面坐標系中的一個閉合圖形來描述剛體,用一個矩陣X來描述它。X的一列表示剛體一個頂點的坐標。為了使圖形閉合,X的最後一列和第一列相同;
為了實現剛體的平移運算,給矩陣X添加元素值為1的一行,使矩陣X的形狀為3Xn
若有矩陣:
可以證明:矩陣Y1是剛體沿x軸正方向平移c1、沿y軸正方向平移c2後的結果;矩陣Y2是剛體X以坐標原點為中心逆時針轉動t弧度的結果
例:用下列數據表示大寫字母A,對圖形A進行以下平面運動,並繪製移動前後的圖形
x 0 4 6 10 8 5 3.5 6.1 6.5 3.2 2 0
y 0 14 14 0 0 11 6 6 4.5 4.5 0 0
(1)向上移動15,向左移動30
(2)逆時針轉動∏/3
(3)先逆時針轉動∏3/4,然後向上移動30,向右移動20
clear all
x = [0 4 6 10 8 5 3.5 6.1 6.5 3.2 2 0];
y = [0 14 14 0 0 11 6 6 4.5 4.5 0 0];
A = [x;y;ones(1,length(x))];
axis equal%縱、橫坐標軸採用等長刻度
plot(x,y)
hold on %保持當前圖形視窗
%向上移動15
M = [1 0 0;0 1 15;0 0 1];%一行3列設為0,二行3列設為15
Y1 = M*A;
%然後,向左移動30
M = [1 0 -30;0 1 0;0 0 1];
Y1 = M*Y1;
fill(Y1(1,:),Y1(2,:),'red')
%逆時針轉動pi/3
M = [cos(pi/3) -sin(pi/3) 0;sin(pi/3) cos(pi/3) 0;0 0 1];
Y1 = M*A;
fill(Y1(1,:),Y1(2,:),'blue')
%先逆時針轉動pi*3/4,然後向上移動30,向右移動20
M = [cos(3*pi/4) -sin(3*pi/4) 0;sin(3*pi/4) cos(3*pi/4) 0;0 0 1];
Y1 = M*A;
M = [1 0 0;0 1 30;0 0 1];%一行3列設為0,二行3列設為30
Y1 = M*Y1;
M = [1 0 20;0 1 0;0 0 1];
Y1 = M*Y1;
fill(Y1(1,:),Y1(2,:),'green')
grid on %添加網格線
hold off