WX.Python - Desenhar circulo sem ser Bitmap

168 views
Skip to first unread message

Ronan T. de Jesus

unread,
Dec 2, 2012, 9:35:05 PM12/2/12
to python...@googlegroups.com
Pessoal se alguém puder me ajudar
Estou precisando desenhar circulos em minha interface grafica usando wxpython, porém quando uso a função DrawCircle, o circulo aparece como sendo uma imagem bitmap
e fica por cima dos outros elementos.

Se alguém souber como desenhar ou tiver um algoritmo para desenhar usando linhas eu agradeceria.
Valew!!!

Alex

unread,
Dec 3, 2012, 6:22:38 PM12/3/12
to python...@googlegroups.com
# rc  -  raio do cículo
# px -  coordenada x no eixo das abscissas
# py -  coordenada y no eixo das ordenadas
# ang - ângulo em graus.

# inipx - posição inicial x do centro do circulo
# inipy - posição inicial y do centro do circulo

# cos, sin - seno e cosseno do modulo math

rc = 10
ang = 0

inipx = 100
inipy = 100

px =  inipx + cr * cos(ang)
py =  inipy + cr * sin(ang)

point = (px, py) # coordenada para um ponto no plano

No total são 360 pontos no plano. Ou seja um ponto para cada grau.

O algorimo cria um triângulo retângulo para cada grau(formando um circulo no final), no plano cartesiano, usando trigonometria
http://www.matematicadidatica.com.br/PlanoCartesiano.aspx

Ronan T. de Jesus

unread,
Dec 3, 2012, 7:40:24 PM12/3/12
to python...@googlegroups.com
Valew Alex, era disso mesmo que tava precisando.

Linux Polegato

unread,
Dec 3, 2012, 8:37:33 PM12/3/12
to python...@googlegroups.com
Só um adendo, fixar em 360 pontos não é boa ideia, o ideal é encontra o passo de acordo com raio, isto é, o número de pixels em um círculo dado o raio em pixels, seria 2*pi*r, mas por Nyquist deve fazer o dobro para ter um precisão mínimo, assim devo calcular 4*pi*r. Assim sendo, cada passo seria os 2*pi (360 graus) dividido pelo número de pontos (4*pi*r) => 2*pi / (4*pi*r) = 1/(2*r):

r = 100
centro_x, centro_y = 0, 0
passo = 1./(2*r)
ang_rad = 0
i = 0
while ang_rad < 2 * pi:
....px =  centro_x + r * cos(ang_rad)
....py =  centro_y + r * sin(ang_rad)
....ponto = (px, py)
....i += 1
....print i, ang_rad / (2*pi) * 360, ponto
....ang_rad += passo

[]'s
         Junior Polegato


--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com

Ronan T. de Jesus

unread,
Dec 3, 2012, 9:12:21 PM12/3/12
to python...@googlegroups.com
Valew Junior, consegui fazer o que eu precisava, funcionou perfeitamente com a dica do Alex, mas vou implementar desse jeito pois me parece que a dupla precisão fica melhor para raios maiores.

Valew!!!
Reply all
Reply to author
Forward
0 new messages