MATLAB Language
Grafik: 2D- und 3D-Transformationen
Suche…
2D-Transformationen
In diesem Beispiel werden wir eine sqaure förmige Linie geplottet mit nehmen line
und führen Transformationen darauf. Dann werden wir die gleichen Transformationen verwenden, aber in einer anderen Reihenfolge und sehen, wie sie die Ergebnisse beeinflusst.
Zuerst öffnen wir eine Figur und setzen einige Anfangsparameter (Quadratpunktkoordinaten und Transformationsparameter).
%Open figure and create axis
Figureh=figure('NumberTitle','off','Name','Transformation Example',...
'Position',[200 200 700 700]); %bg is set to red so we know that we can only see the axes
Axesh=axes('XLim',[-8 8],'YLim',[-8,8]);
%Initializing Variables
square=[-0.5 -0.5;-0.5 0.5;0.5 0.5;0.5 -0.5]; %represented by its vertices
Sx=0.5;
Sy=2;
Tx=2;
Ty=2;
teta=pi/4;
Als nächstes konstruieren wir die Transformationsmatrizen (Maßstab, Rotation und Translation):
%Generate Transformation Matrix
S=makehgtform('scale',[Sx Sy 1]);
R=makehgtform('zrotate',teta);
T=makehgtform('translate',[Tx Ty 0]);
Als nächstes zeichnen wir das blaue Suare:
%% Plotting the original Blue Square
OriginalSQ=line([square(:,1);square(1,1)],[square(:,2);square(1,2)],'Color','b','LineWidth',3);
grid on; % Applying grid on the figure
hold all; % Holding all Following graphs to current axes
Als Nächstes zeichnen wir es erneut in einer anderen Farbe (rot) und wenden die Transformationen an:
%% Plotting the Red Square
%Calculate rectangle vertices
HrectTRS=T*R*S;
RedSQ=line([square(:,1);square(1,1)],[square(:,2);square(1,2)],'Color','r','LineWidth',3);
%transformation of the axes
AxesTransformation=hgtransform('Parent',gca,'matrix',HrectTRS);
%seting the line to be a child of transformed axes
set(RedSQ,'Parent',AxesTransformation);
Das Ergebnis sollte so aussehen:
Nun sehen wir, was passiert, wenn wir die Transformationsreihenfolge ändern:
%% Plotting the Green Square
HrectRST=R*S*T;
GreenSQ=line([square(:,1);square(1,1)],[square(:,2);square(1,2)],'Color','g','LineWidth',3);
AxesTransformation=hgtransform('Parent',gca,'matrix',HrectRST);
set(GreenSQ,'Parent',AxesTransformation);
%% Plotting the Yellow Square
HrectSRT=S*R*T;
YellowSQ=line([square(:,1);square(1,1)],[square(:,2);square(1,2)],'Color','y','LineWidth',3);
AxesTransformation=hgtransform('Parent',gca,'matrix',HrectSRT);
set(YellowSQ,'Parent',AxesTransformation);
Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow