domingo, 13 de setembro de 2020

Recursividade

 

<script>
    // não necessário saber agora
    getSenCos = function(angulo)
    {   
        angulo = manterLimites(angulo);
        seno =  Math.sin(angulo * Math.PI / 180);
        cose =  Math.cos(angulo * Math.PI / 180);
        return [cose, seno];
    }
    // não necessário saber agora
    manterLimites = function(angulo)
    {
        while(angulo>=360)
        {
            angulo=angulo-360;
        }
        while(angulo<0)
        {
            angulo=angulo+360;
        }
        return angulo;
    }
    // função galho recebe a posição inicial da reta em x1, y1.
    galho = function(ctx, x1, y1, tamanho, angulo, poda)
    {
    //coloco a proxima semente de acordo com o giro e o novo tamanho
        var senCos= getSenCos(angulo)   
        var novox = x1+tamanho*senCos[0]
        var novoy = y1+tamanho*senCos[1]
        ctx.lineWidth = 2;
        ctx.beginPath();
        ctx.strokeStyle="#FF0000";
        ctx.moveTo(x1,y1); // inicio linha
        ctx.lineTo(novox,novoy); // fim linha
     // desenha linha
        ctx.stroke();
     // impede loop infinito
        if( poda>1 )
        {
        //  a função chama a sí mesma
            galho(ctx, novox, novoy, tamanho*0.9, angulo-30,poda-1 )
        }
    }
    load = function()
    {
        var c = document.getElementById("myCanvas");
        var ctx = c.getContext("2d");
        galho(ctx, 80, 80, 100,   125, 16);
    }
</script>  
<canvas id="myCanvas" width="400" height="400" style="border:1px solid #000000;">
</canvas>
<script>load();</script> 

Resultado:

Nenhum comentário: