Função
function desenharCirculo ( X0 , Y0 , raio , mode )
function converterGrau2Rad ( x )
return ( x / 180 ) * math.pi
end
local tblPt = {}
if mode ~= 'fill' then
mode = 'frame'
end
for i=0, 360 do
local x = (raio * math.cos(converterGrau2Rad(i)))
local y = (raio * math.sin(converterGrau2Rad(i)))
if mode == 'frame' then
tblPt[i] = {}
table.insert(tblPt[i],X0 - x)
table.insert(tblPt[i],Y0 - y)
end
if mode == 'fill' then
canvas:drawLine (X0, Y0, X0 - x, Y0 - y)
end
end
if mode == 'frame' then
for i=0, table.maxn(tblPt) do
if i == table.maxn(tblPt) then
canvas:drawLine (tblPt[i][1], tblPt[i][2], tblPt[0][1], tblPt[0][2])
else
canvas:drawLine (tblPt[i][1], tblPt[i][2], tblPt[i+1][1], tblPt[i+1][2])
end
end
end
end
A chamada para a função é a seguinte:
canvas:attrColor(96, 181, 255, 255)
desenharCirculo ( 250 , 250 , 20 , 'frame' )
canvas:flush()
Parâmetros
A função trabalha com quatro parâmetros, são eles:
X0: A coordenada X do ponto central.
Y0: A coodenada Y do ponto central.
Raio: O tamanho do raio do círculo.
Mode: É o tipo de desenho que será feito. Se escolhido frame, será desenhado apenas a moldura. Se for escolhido fill o desenho será preenchido. O modo frame é utilizado como default.
Problemas
Nem tudo na vida é perfeito e esta função não seria diferente. Quando desenhamos um círculo com mode fill e raio muito grande, vemos algumas falhas. Se alguém conseguir solucionar o problema, escreva nos comentários que a função será atualizada e dado os devidos créditos. :)
2 comentários:
o problema com certeza está aki "for i=0, 360 do" com passo 1 vc vai pegar so as posições de grau exato, e qdo vc aumenta muito o pixel do grau exato não vai cobrir todo espaço necessário, então ou vc diminui o passo para 0,1 para pegar mais posições ou limita um raio maximo ..
Marcelo você está completamente certo.
A partir do momento que eu vario o passo do for, aumento a precisão.
Quando maior a precisão, melhor o resultado final, maior o processamento.
Eu inclui uma atualização desta função no meu site pessoal: http://luizeduardoaraujo.info/?p=277
[[]]'s
Postar um comentário