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

Articles les plus consultés