function Aehnlichkeit

% http://geometrie.hs-nb.de/MATLAB-Programme/Aehnlichkeit.m   Bearbeitungsstand: 28.2.2005
% (C) Martin Nitschke, nitschke@hs-nb.de

clc;
close('all')
global ax
deg=pi/180;
verschieb=inline('P+repmat(v,1,size(P,2))','P','v');
dreh=inline('[cos(t) -sin(t);sin(t) cos(t)]*P','P','t');
spiegel=inline('[cos(t) sin(t);sin(t) -cos(t)]*P','P','t');
nEck=inline('repmat(r,2,1).*[cos(t);sin(t)]','r','t');
ax=[inf -inf inf -inf];
t=linspace(0,2*pi,12);
Q=nEck(3+cos(5.2*t),t);
Q=Q(:,[1:3 5 4 6:end]);
hold('on')
Abb(Q)

P=0.5*dreh(Q,45*deg);
P=verschieb(P,1.7*[max(P(2,:))-min(P(1,:));0]);
Abb(P)

P=1.2*dreh(Q,120*deg);
P=verschieb(P,1.45*[max(P(2,:))-min(P(1,:));0]);
Abb(P)

P=0.7*spiegel(Q,60*deg);
P=verschieb(P,4.15*[max(P(2,:))-min(P(1,:));0]);
Abb(P)

P=1.5*spiegel(Q,135*deg);
P=verschieb(P,2.65*[max(P(2,:))-min(P(1,:));0]);
Abb(P)

P=0.8*spiegel(Q,180*deg);
P=verschieb(P,5.75*[max(P(2,:))-min(P(1,:));0]);
Abb(P)

hold('off')
axis('equal')
axis(ax)
axis('off')
print('-deps','Aehnlichkeit')

function Abb(P);
global ax
fill(P(1,:),P(2,:),0.875*[1 1 1])
M=(P(:,[2:end 1])+P)/2;
Spitze(M,M-P,0.04*norm([max(P(1,:))-min(P(1,:)) max(P(2,:))-min(P(2,:))]),60*pi/180)
if min(P(1,:))<ax(1)
  ax(1)=min(P(1,:));
end
if max(P(1,:))>ax(2)
  ax(2)=max(P(1,:));
end
if min(P(2,:))<ax(3)
  ax(3)=min(P(2,:));
end
if max(P(2,:))>ax(4)
  ax(4)=max(P(2,:));
end

function Spitze(P,v,L,phi);
if nargin<=2
  L=1;
end
if nargin<=3
  phi=7.5*pi/180;
end
ta=tan(phi/2);
v=L*v./repmat(sqrt(dot(v,v)),size(P,1),1);
n=[-v(2,:);v(1,:)];
Q=P-v+ta*n;
R=P-v-ta*n;
for k=1:size(P,2);
  fill([P(1,k) Q(1,k) R(1,k)],[P(2,k) Q(2,k) R(2,k)],'k')
end