O truque para conseguir desenhar o círulo é olhar para duas funções diferentes. Pense em uma circunferência, r^2 = (x-a)^2 + (y-b)^2. Vista como função de x, y (x) = b +- RAIZ (r^2 - (x-a)^2) Temos aí duas funções: y1 (x) = b - RAIZ (r^2 - (x-a)^2) y2 (x) = b + RAIZ (r^2 - (x-a)^2) Lembre-se de que como dispusemos os eixos na tela: y +-------------> | | x | | | v Esse é o plano cartesiano que você conhece, mas rotacionado 90 graus no sentido horário. y1, metade da circunferência: * * * * * * * * * y2, a outra metade: * * * * * * * * * Precisamos ir da esquerda para a direita, mostrando espaços e asteriscos: * * * * * * * * * * A * B * --> * -------------> * * * * * * * * * * * * * Em cada linha: Primeiro mostramos uma quantidade de espaços (A), depois uma quantidade de asteriscos (B), e depois mudamos para a próxima linha. Isso nos dará o círculo: * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Note também que intercalamos os asteriscos com espaços. Isso porque a fonte usada na tela é mais alta que larga, e sem espaços a figura ficaria distorcida: ****** ******** ********** ********** ********** ********** ********** ******** ****** ======================= real a, b, r, x, j, z, inicio, fim leia r a <- 0.0 b <- r + 2.0 // b desloca a figura um pouco da margem esquerda // x vai de -r a +r, que é a parte que nos interessa: para x em (-r,r): z <- r**2 - (x-a)**2 // Não faremos raiz de negativos: se (z >= 0.0): // inicio e fim são as colunas inicial e final onde // mostraremos os asteriscos: fim <- b + sqrt(z) inicio <- b - sqrt(z) // Mostre espaço até chegar ao ponto inicio, y1(x) para j em (0.0,inicio): mostra " " // DOIS espaços // Mostre asteriscos até chegar ao ponto fim, y2(x) para j em (inicio, fim): mostra "* " // Próxima linha! nova_linha