- /
-
A light in the attic
on 3 Dec 2023
- 9
- 118
- 0
- 1
- 844
drawframe(1);
Remix of my 2021 minihack entry A Time-Lapse of the Night Sky
Write your drawframe function below
function drawframe(f)
persistent h x y n wdw
rng default
if isempty(h) || f==1
% Dark sky
axes(Position=[0 0 1 1])
s = 99;
q=linspace(50,1,s);
hold on % hold before imagesc to keep ydir normal
imagesc(q'.*(q./q),[20,80])
% Add star rotation
td=0:0.001:.1; % theta delta
n=1000; % number of stars
theta = pi/1.8*rand(1,n)+pi-.1; % range: 180:270 +/- (quadrant III)
[x,y]=pol2cart(theta+td',rand(1,n).*s*sqrt(2));
x = x+s; % move polaris to the upper right corner
y = y+s; % move polaris to the upper right corner
h = plot(x, y,'color','w');
rgba = ones(n,4);
rgba(:,4) = rescale(randg(1,n,1),.1,1);
set(h,{'color'},mat2cell(rgba,ones(n,1),4))
% Add grassy hill
g = 1000; % number of grass blades
xg = linspace(0,s+1,g);
yg = cos(xg/(s+1))*30+randg(1,1,g);
area(xg,yg,FaceColor='k')
xg=[1,1:.1:s,s];
yg=[1,cos(0:.1/98:1)*30+randg(1,1,981),1];
fill(xg,yg,'k')
% Add house silhouette
fill([4 4 3 6 9 8 8]*5,[5 7 7 8 7 7 5]*5,'k')
% Add window
wdw=fill(30+2*[-1 1 1 -1],35+[2.2 2.2 .1 .1],[.1 .1 .1]);
camva(6)
axis equal off
xlim([1 s])
ylim([1 s])
colormap gray
end
k = round(f/48*height(x));
set(h,{'XData'},mat2cell(x(1:k,:),k,ones(1,n))',{'YData'},mat2cell(y(1:k,:),k,ones(1,n))')
if f==24
wdw.FaceColor = [0.6 0.6 0.4];
end
end