Ein Spiel mit regulären Polygonen vom Dreieck bis zum Achteck.
% newpolygonfilms
% Kombination von Poygonmandala und Polygon Extruder
% polygonfilms - Aufbau von regulaeren Dreiecken bis zu Achtecken
% und anschliessend drehend Verschwinden der Polygone
% uses simpbezier und simplinipo
figure(1); clf;
ntot=9; colvar = ['r','g','b','m','c','r'];
w = zeros(1,ntot);
r=9.8; sgen = 2*r*sin(pi/8); rn = zeros(1,8);
voidbk = 0;
t = (0:0.005:1)*2*pi;
for ne = 3:8
rn(ne) = sgen/2/sin(pi/ne);
end
%
hdtx(1) = text(-9.6,9.5,'Polygon', ...
'FontUnits','points','FontSize',20 , ...
'Fontweight','demi');
%
axis([-12 12 -12 12]); axis equal
axis off ; hold on;
hdtx(2) = text(2.6,9.5,'- Reigen', ...
'FontUnits','points','FontSize',20 , ...
'Fontweight','demi');
we = zeros(8,9);
for ne = 3:8
xk = rn(ne)*cos(t); yk = rn(ne)*sin(t);
krhdl(ne) = plot(xk,yk,'k','LineWidth',1);
k=1; kbeg = 0;
wn = 0;
for wn = 0:0.005:1
we(ne,ntot) = wn ;
if wn > k/ne
we(ne,ntot-k-1+(1:k)) = (1:k)/ne;
k=k+1;
end
if kbeg>0
delete(plhd(ne))
end
if ne > 3
delete(krhdl(ne-1))
end
kbeg=1;
x=rn(ne)*sin(2*pi*we(ne,:));
y=rn(ne)*cos(2*pi*we(ne,:));
plhd(ne) = plot(x,y,colvar(ne-2),'LineWidth',4);
pause(0.008)
end
end
delete(krhdl(8))
% Verdrehen
hvals = [0.28 0.42 0.55 0.7 0.85 1];
xpt = [0 0.65 0.7 1];
for lev = 1:6
[xbez(lev,:),ybez(lev,:)] = simpbezier(hvals(lev),0.02);
end
wend = 5;
for wd = 0:0.005:wend
u = wd/wend;
for nro = 3:8
delete(plhd(nro))
rf = simplinipo(xbez(nro-2,:),ybez(nro-2,:),u);
x=rf*rn(nro)*sin(2*pi*(wd/nro+we(nro,:)));
y=rf*rn(nro)*cos(2*pi*(wd/nro+we(nro,:)));
plhd(nro) = plot(x,y,colvar(nro-2),'LineWidth',4);
end
pause(0.005)
end
delete(plhd);
delete(hdtx);
Diese Filmproduktion benötigt die Funktionen simplinipo und simpbezier.
function [ yipo ] = simplinipo( xarr, yarr, xn )
%function [ yipo ] = simplinipo( xarr, yarr, xn )
% simple linear interpolation
yipo = 0*xn;
for k = 1:length(xn)
xac = xn(k);
% always search from below
if xac < xarr(1)
yipo(k) = xarr(1);
else
for n = 1:length(xarr)
if xac < xarr(n)
fr = (xac-xarr(n-1))/(xarr(n)-xarr(n-1));
yipo(k) = yarr(n-1)*(1-fr)+ yarr(n)*fr;
dia = [k,n,fr,yarr(n-1),yarr(n),yipo(k)];
break
end
end
if xac >= xarr(end)
yipo(k) = yarr(end);
end
end
end
function [ xbez,ybez ] = simpbezier( h1, h2 )
%function [ ybez ] = simpbezier( xpos, h1, h3 )
t = 0:0.005:1;
xp1 = 0; xp2 = 0.65; xp3 = 0.7; xp4 = 1;
yp1 = 1; yp4 = 0; yp2 = h1; yp3 = h2;
xbez = xp1*(1-t).^3 + 3*xp2*t.*(1-t).^2 ...
+ 3*xp3*t.^2.*(1-t) + xp4*t.^3;
ybez = yp1*(1-t).^3 + 3*yp2*t.*(1-t).^2 ...
+ 3*yp3*t.^2.*(1-t) + yp4*t.^3;
% plot(xbez,ybez)
end