MATLAB Language
Grafische weergave: 2D- en 3D-transformaties
Zoeken…
2D-transformaties
In dit voorbeeld gaan we een vierkante lijn nemen die is uitgezet met een line
en daarop transformaties uitvoeren. Dan gaan we dezelfde transformaties gebruiken, maar in een andere volgorde en kijken hoe dit de resultaten beïnvloedt.
Eerst openen we een figuur en stellen we enkele beginparameters in (coördinaten van vierkante punten en transformatieparameters)
%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;
Vervolgens construeren we de transformatiematrices (schaal, rotatie en vertaling):
%Generate Transformation Matrix
S=makehgtform('scale',[Sx Sy 1]);
R=makehgtform('zrotate',teta);
T=makehgtform('translate',[Tx Ty 0]);
Vervolgens plotten we de blauwe 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
Vervolgens zullen we het opnieuw in een andere kleur (rood) plotten en de transformaties toepassen:
%% 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);
Het resultaat zou er zo uit moeten zien:
Laten we nu eens kijken wat er gebeurt als we de transformatie volgorde wijzigen:
%% 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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow