%% Uppgift 1 (exempel på rotation av en figur i planet, i detta fall en triangel)
x=[4 1 5 4];y=[1 3 2 1]; % Anger koordinaterna för hörnen i en plan triangel
fill(x,y,'g','edgecolor','k','linewidth',1), % Plottar triangeln med fylld grön färg
hold on 
axis equal, axis([-10 10 -10 10]), 
pause(0.5)
v=pi/6; A=[cos(v) -sin(v); sin(v) cos(v)]; % Beskriver en rotationsmatris
P=[x;y];  % Lagrar koordinaterna för triangelns hörn på lämpligt sätt i en matris
for i=1:5 % En snurra som beräknar och plottar de trianglar som bildas då triangeln roterar steg för steg kring origo
P=A*P;    % Varje koordinatpar roteras med vinkeln pi/6
fill(P(1,:),P(2,:),'g','edgecolor','r','linewidth',1), % Plottar den roterade triangeln
pause(0.5)
end
plot(0,0,'ko','linewidth',2,'markersize',2)  % Markerar origo i figuren
hold off

%% Uppgift 2 (exempel på plot av tredimensionell kropp, i detta fall en kub)
H=[0 1 0 1 0 1 0 1   % H(:,j), j:te kolonnen i H, ger koordinater för hörnpunkt j
0 0 1 1 0 0 1 1      % size(H,2) ger antal h ?ornpunkter
0 0 0 0 1 1 1 1];
S=[1 2 4 3           % S(i,:), i:te raden i S, ger nr på hörnpunkter på sida i
1 2 6 5
1 3 7 5
3 4 8 7
2 4 8 6
5 6 8 7];            % size(S,1) ger antal sidor
figure(1), clf, hold on
for i=1:size(S,1)
Si=S(i,:); fill3(H(1,Si),H(2,Si),H(3,Si),'g','facealpha',0.7)
end
axis equal, axis tight, axis off, hold off, view(20,10)
pause(2)

%% Examinationsuppgift 1 (rotation av kub)
ax=[-2 2 -2 2 -2 2]; % Gränser för koordinataxlarna. Dessa sätts så att hela rotationsförloppet får plats
v=pi/8; % Liten vinkel för upprepad rotation
A=[cos(v) -sin(v) 0; sin(v) cos(v) 0; 0 0 1];  % Rotationsmatrisen
H=[0 1 0 1 0 1 0 1   
0 0 1 1 0 0 1 1      
0 0 0 0 1 1 1 1]; % H är matrisen med kroppens koordinater
clf
hold on
for i=1:size(S,1)  % Ritar kuben
Si=S(i,:); fill3(H(1,Si),H(2,Si),H(3,Si),'g')
end
hold off
axis equal, axis(ax)  % Undvik deformation och använd samma skalor på axlarna
box on, grid on % Förstärker tredimensionella känslan nåagot
pause(0.5) % Paus så vi hinner se tetraedern innan den roteras
kmax=16;  % Antal små rotationer, t.ex. kmax=16; (kmax*v=2*pi, ett varv)
for k=1:kmax  % Rotera kmax gånger
H=A*H;
clf
hold on
for i=1:size(S,1)  % Ritar kuben i nya positionen
Si=S(i,:); fill3(H(1,Si),H(2,Si),H(3,Si),'g')
end
hold off
axis equal, axis(ax), box on, grid on
pause(0.1)
end

%% Exempel som illustrerar att funktionsfiler kan anropas (lokalt) i en scriptfil om de placeras sist i samma scriptfil.
[x y]=ode45(@system,[-1 2],[2;3]);
plot(x,y(:,1),x,y(:,2))
lastx=x(length(x)), 
lasty=y(length(y),1)

function z=system(x,y)
z=[x.*y(1)-y(2);y(1).*sin(x.*y(2))];
end