Onzième Exemple: Les tracés point par point

On doit l'exemple qui suit et les fonctions nécessaires pour le réaliser à une philosophe bordelaise qui étudiait la théorie du chaos, devait faire un article dans une revue et souhaitait illustrer cet article avec des images, notamment de la fractale de Verhultz.

Cette fractale est définie comme une suite par la formule    yn+1= x*yn*(1-yn)

A une valeur de x est associée plusieurs valeurs de y. Certes, lors d'une première analyse, on voit que l'on peut tracer cette espace sous la forme d'une équation paramétrique en n, cependant le temps de tracé est prohibitif et les points obtenus reliès entre eux, ce qui rend la fractale illisible.

Deux fonctions ont été établies pour pallier au problème.

Nom Rôle Particularités
PointsOnly(Bool) Ne trace que des points Est mémorisé. Doit être remis à 0.
PlotXY(x,y) Tarce un point Trace un point aux coordonnées X,Y.

La fracatle de Verhultz s'écrit alors:

[Init]
{
    PointsOnly(1);
    Rup1 = 200;
    Rup2 = 500;
}
[Body]
{
    i = 0;
    y = 0.5;
    while( i<Rup1)
    {
        y = x * y * (1 - y );
        i = i + 1;
    }

    while( i<Rup2)
    {
        y = x * y * (1 - y );
        i = i + 1;
        PlotXY(x, y);
    }

}

Normalement, sur une equation de type y = f(x), la section [Body] est appelée une fois pour chaque valeur de x dans l'intervalle visible, par pas correspondant à un pixel visible. Bien que ce ne soit pas l'esprit de Script Equation Grapher, ces deux fonctions permettent de surpasser ce mécanisme et de faire n'importe quoi... En voici un exemple :

[init]
{
    PointsOnly(1)

    y = 10000

}

[Body]
{
    if(x>0) if(x<1)
    {
        for( a=0; a<=360.0; a+= 0.25)
        {
            setHLS(360*x, 0.5, sin(a*PI/180)/2+0.5)
            c = x*sin(a*PI/180)
            d = x*cos(a*PI/180)
            PlotXY(c,d)
        }
    }
}



 

La transformée de Fourier...