3D game chaos Code
3D Chaosgame on Matlab
function chaosgame3d(form,N)
function chaosgame3d(form,N)
if nargin==0
form.name = 'Sierpinski tetrahedron';
form.polyg = [0 1 .5 .5 ; 0 0 sqrt(3)/2 sqrt(3)/6 ; 0 0 0 sqrt(2/3)];
form.frac = .5;
form.keeppolyg = true;
N = 100000;
end
xs = .5+rand/10;
ys = .5+rand/10;
zs = .5+rand/10;
sp = size(form.polyg,2);
idx = randperm(sp);
x = zeros(1,N);
y = zeros(1,N);
z = zeros(1,N);
c = zeros(1,N);
if form.keeppolyg
x(1:sp) = form.polyg(1,:);
y(1:sp) = form.polyg(2,:);
z(1:sp) = form.polyg(3,:);
c(1:sp) = 1:sp;
k = sp+1;
else
k = 1;
end
x(k) = form.frac*form.polyg(1,idx(1))+(1-form.frac)*xs;
y(k) = form.frac*form.polyg(2,idx(1))+(1-form.frac)*ys;
z(k) = form.frac*form.polyg(3,idx(1))+(1-form.frac)*zs;
c(k) = idx(1);
for n=k+1:N
idx = randperm(sp);
x(n) = form.frac*form.polyg(1,idx(1))+(1-form.frac)*x(n-1);
y(n) = form.frac*form.polyg(2,idx(1))+(1-form.frac)*y(n-1);
z(n) = form.frac*form.polyg(3,idx(1))+(1-form.frac)*z(n-1);
c(n) = idx(1);
end
figure('color','w')
mc = max(c);
hold on
cmap = hsv(mc);
cmap = cmap(randperm(mc),:);
for n = 1:mc
idx = c==n;
h(n) = plot3(x(idx),y(idx),z(idx),'k.');
set(h(n),'color',cmap(n,:));
end
title(sprintf('%s (%d iterations)',form.name,N))
view(3);
xlabel('x');
ylabel('y');
zlabel('z');
box on
grid on
axis equal on vis3d
Commentaires
Enregistrer un commentaire