A ver a categoria “Actionscript”

Recentemente, inserido num projecto extenso – e não quero falar sobre isso! – uma das fases consistia em dividir um círculo em fatias, de forma dinâmica. O grafismo é relativamente simples, basta usar uns lineTo’s e uns curveTo’s, tudo pintalgado com uns fills, e a coisa ia fluida. Quanto à matemática inerente, também me parecia bastante simples, basicamente é dividir um círculo completo pelo número de fatias.

O Actionscript, como quase todas as linguagens de programação, trabalha em radianos, o que acaba por ser, até, intuitivo. Aprende-se para aí no 7º ano que um círculo são 2 x PI, que corresponde aos 360 graus. Posto isto, o código era, aparentemente, trivial e croquetes:

// gráfico onde vamos desenhar as fatias
var gfx:Graphics = container.graphics;
// raio da tarte
var raio:Number = oMeuRaio;
// angulo de cada fatia
var angulo:Number = (Math.PI * 2) / numFatias;

// i é incrementado o angulo correspondente às fatias a cada passagem
for(var i:Number = 0; i < (Math.PI * 2); i += angulo)
{
    // mover para o centro do círculo
    gfx.moveTo(0, 0);
    // linha até ao limite da tarte
    gfx.lineTo(raio * Math.cos(i), raio * Math.sin(i));
}

Parece bastante simples e intuitivo, certo? Durante algumas horas, a coisa rolou maravilhosamente. Até que reparei que, nalgumas situações, era desenhada uma fatia extra por cima da primeira. Uma das situações onde isso acontecia era quando a quantidade de fatias era igual a seis. Alguns trace’s mais tarde, dei com o gato e, depois de praguejar durante alguns minutos contra a Adobe, a solução foi feita com um mínimo de esforço. Mas vamos ao gatinho primeiro…

 Categorias
 Arquivo
 Projectos em Destaque
 Últimas Postas no Blog
 Últimos Comentários do Blog