[Enseignement] objet fractal à faire apparaître progressivement

classic Classic list List threaded Threaded
3 messages Options
Jean-François PIETRI Jean-François PIETRI
Reply | Threaded
Open this post in threaded view
|

[Enseignement] objet fractal à faire apparaître progressivement

Bonjour,

Le programme ci-dessous permet d'obtenir le dragon de Heighway, mais je regrette qu'il arrive d'un bloc.
Comme je me lance à peine avec scilab, quelqu'un pourrait-il me dire comment le modifier pour que le dragon apparaisse progressivement en 30 secondes par exemple.

Scilab et dragon de Heighway

 

function point_image=transformation(point_antecedent, choix)
if choix == 1 then
A = [[0.5,-0.5];[0.5,0.5]] ; V=[0;0];
end
if choix == 2 then
A = [[-0.5,-0.5];[0.5,-0.5]] ; V=[1;0];
end
point_image = A * point_antecedent + V
endfunction
nPoints = 6000
P = zeros(2,nPoints);
for i = 2:nPoints
tirage = rand();
if tirage < 0.5 then choix = 1;
else choix = 2;
end
P(:,i) = transformation(P(:,i-1),choix);// P(:,i) est la colonne numéro i
end
plot(P(1,:),P(2,:),"*b");// toutes les colonnes sont retenues pour former les points du dragon

 Par avance merci,


JF PIETRI


_______________________________________________
enseignement mailing list
[hidden email]
http://lists.scilab.org/mailman/listinfo/enseignement
Samuel GOUGEON Samuel GOUGEON
Reply | Threaded
Open this post in threaded view
|

Re: [Enseignement] objet fractal à faire apparaître progressivement

Bonjour,

Le 04/07/2014 12:18, Jean-François PIETRI a écrit :
Bonjour,

Le programme ci-dessous permet d'obtenir le dragon de Heighway, mais je regrette qu'il arrive d'un bloc.
Comme je me lance à peine avec scilab, quelqu'un pourrait-il me dire comment le modifier pour que le dragon apparaisse progressivement en 30 secondes par exemple.
Voici une possible mise en oeuvre :
function point_image=transformation(point_antecedent, choix)
    if choix == 1 then
        A = [[0.5,-0.5];[0.5,0.5]] ; V=[0;0];
    end
    if choix == 2 then
        A = [[-0.5,-0.5];[0.5,-0.5]] ; V=[1;0];
    end

    point_image = A * point_antecedent + V

endfunction

nPoints = 6000;
P = zeros(2,nPoints);
clf
plot(0,0,"*b")
c = gce();
c.parent.data_bounds = [-0.4,-0.4;1.2 0.7];
c = c.children;
for i = 2:nPoints
    tirage = rand();
    if tirage < 0.5 then choix = 1;
    else choix = 2;
    end
    tmp = transformation(P(:,i-1),choix);// P(:,i) est la colonne numéro i
    c.data($+1,:) = tmp.';
    P(:,i) = tmp;
end


_______________________________________________
enseignement mailing list
[hidden email]
http://lists.scilab.org/mailman/listinfo/enseignement
Jean-François PIETRI Jean-François PIETRI
Reply | Threaded
Open this post in threaded view
|

Re: [Enseignement] objet fractal à faire apparaître progressivement

Bonjour Monsieur Gougeon,

Tout d'abord, merci beaucoup d'avoir pris le temps de me répondre.
Je suis enseignant en mathématiques et je voudrais montrer aux élèves de TS spécialité maths une application du calcul matriciel.

Pourriez-vous me dire si votre proposition est un arbre qui se construit point par point grâce à la boucle FOR ?

En fait je pensais aussi à utiliser une boucle FOR de la façon suivante par exemple : 
nPoints = 6000
P = zeros(2,nPoints);
for i = 2:nPoints
tirage = rand();
if tirage < 0.5 then choix = 1;
else choix = 2;
end
P(:,i) = transformation(P(:,i-1),choix);// P(:,i) est la colonne numéro i
plot(P(1,i),P(2,i),"*b");
end


Mais il faut attendre longtemps pour avoir une belle figure.
Y aurait-il moyen de maîtriser le temps de construction de la figure, par exemple 30 seconde pour les 6000 points choisis au départ?

Cordialement,

JF PIETRI


Le 4 juillet 2014 21:19, Samuel Gougeon <[hidden email]> a écrit :
Bonjour,

Le 04/07/2014 12:18, Jean-François PIETRI a écrit :
Bonjour,

Le programme ci-dessous permet d'obtenir le dragon de Heighway, mais je regrette qu'il arrive d'un bloc.
Comme je me lance à peine avec scilab, quelqu'un pourrait-il me dire comment le modifier pour que le dragon apparaisse progressivement en 30 secondes par exemple.
Voici une possible mise en oeuvre :
function point_image=transformation(point_antecedent, choix) if choix == 1 then A = [[0.5,-0.5];[0.5,0.5]] ; V=[0;0]; end if choix == 2 then A = [[-0.5,-0.5];[0.5,-0.5]] ; V=[1;0]; end point_image = A * point_antecedent + V endfunction nPoints = 6000; P = zeros(2,nPoints);
clf plot(0,0,"*b") c = gce(); c.parent.data_bounds = [-0.4,-0.4;1.2 0.7]; c = c.children;
for i = 2:nPoints tirage = rand(); if tirage < 0.5 then choix = 1; else choix = 2; end
tmp = transformation(P(:,i-1),choix);// P(:,i) est la colonne numéro i c.data($+1,:) = tmp.'; P(:,i) = tmp; end


_______________________________________________
enseignement mailing list
[hidden email]
http://lists.scilab.org/mailman/listinfo/enseignement



_______________________________________________
enseignement mailing list
[hidden email]
http://lists.scilab.org/mailman/listinfo/enseignement