• Remix
  • Share
  • New Entry

on 21 Nov 2023
  • 11
  • 11
  • 0
  • 0
  • 1819
drawframe(1);
Write your drawframe function below
function drawframe(f)
m=1;
fv.startPoint=[0,0,0;m,0,0;m,m,0;0,m,0];
fv.endPoint=fv.startPoint;
fv.V=fv.startPoint;
fv.F=[1,2,3,4];
fv.n=[];
s=48;
ss= RandStream('mcg16807','Seed',20);
n=randi(ss,[1,4],s,1);
index=n;
for i=1:s
fv =MagicRuleSeed(fv,n(i));
end
function fv =MagicRuleSeed(fv,n)
startPoint=fv.endPoint;
m=norm(startPoint(2,:)-startPoint(1,:));
C = cross(startPoint(2,:)-startPoint(1,:),startPoint(3,:)-startPoint(2,:)) ;
normC=C/norm(C)*m;
switch n
case 1
addPoint=startPoint([2,1],:)+normC;
fv.V=[fv.V;startPoint([1,2],:);addPoint];
npoint=size(fv.V,1);
fv.F =[fv.F;[npoint-2,npoint-5,npoint-1,nan];[npoint-4,npoint-3,npoint,nan];[npoint,npoint-1,npoint-5,npoint-4];[npoint-3,npoint-2,npoint-1,npoint]];
case 2
addPoint=startPoint([3,2],:)+normC;
fv.V=[fv.V;startPoint([2,3],:);addPoint];
npoint=size(fv.V,1);
fv.F =[fv.F;[npoint-7,npoint-3,npoint,nan];[npoint-2,npoint-4,npoint-1,nan];[npoint,npoint-1,npoint-4,npoint-7];[npoint-3,npoint-2,npoint-1,npoint]];
case 3
addPoint=startPoint([4,3],:)+normC;
fv.V=[fv.V;startPoint([3,4],:);addPoint];
npoint=size(fv.V,1);
fv.F =[fv.F;[npoint-6,npoint-3,npoint,nan];[npoint-2,npoint-7,npoint-1,nan];[npoint,npoint-1,npoint-7,npoint-6];[npoint-3,npoint-2,npoint-1,npoint]];
case 4
addPoint=startPoint([1,4],:)+normC;
fv.V=[fv.V;startPoint([4,1],:);addPoint];
npoint=size(fv.V,1);
fv.F =[fv.F;[npoint-2,npoint-6,npoint-1,nan];[npoint-3,npoint-5,npoint,nan];[npoint,npoint-1,npoint-6,npoint-5];[npoint-3,npoint-2,npoint-1,npoint]];
% fv.endPoint=fv.V([end-2,end-5,end-1,end],:);
end
fv.n=[fv.n;n];
fv.startPoint=startPoint;
fv.endPoint=fv.V([end-3,end-2,end-1,end],:);
end
AnimatedMagicRule(f,fv)
function AnimatedMagicRule(sz,fv)
for i=1:4
c(i:4:4*(sz+1),:)=jet(sz+1);
end
c(end-2:end,:)=[];
axis equal off
view(120,30+f);
hold on
for i=1:sz
patch('Faces',fv.F(4*i-3:4*i,:)-4*i+4,'Vertices',fv.V(4*i-3:4*i+4,:),'FaceVertexCData',c(4*i-3:4*i,:),'EdgeColor','k','FaceColor','flat','LineWidth',0.5);
title(['i=',num2str(i)]);
% drawnow;
% frame = getframe;
% im{i} = frame2im(frame);
end
% patch('Faces',1:4,'Vertices',fv.V(sz*4+1:sz*4+4,:),'FaceVertexCData',c(sz+1,:),'EdgeColor','k','FaceColor','flat','LineWidth',0.5);
end
end
Animation
Remix Tree