Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Cuadrados Espaciados Concéntricos
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Cuadrados Espaciados Concéntricos 
 
Buenas!

Creo que seria interesante tener un lugar, ya sea un post o si llega un día..un foro..jeje , dedicado al dibujo.
Con sus subforos. Podríamos tener, Cairo o Paint, OpenGL, SDL ( cosa que no vemos mucho).

Actualmente estoy viendo esta página donde aprendo un poco de PyGame. Aunque tengo manuales.

Programar juegos arcades con Pygame

Como es logico es para Python. Aunque acabo de comenzar y aun no me entero bien del tema.
Al realizar un ejemplo de dibujar rectángulos, no daba con el problema.
Imaginar que queréis dibujar algo como esto: ( Está hecho con gambas )

 rectangulos

Me encontré el mismo problema tanto en PyGame como con gambas, no entendía por que me salía esto.
No es cuestión de saber el lenguaje, es cuestión de entender el problema.

 rectangulos_mal

Cuando hacemos las cosas a veces no nos damos cuenta.
En este caso es un área de dibujo de 500 x 500, Cuando dibujamos un rectángulo tenemos el vértice superior izquierda
y el vértice inferior derecha.

Así que en este dibujo, los lados de nuestro rectángulo van disminuyendo a medida que nuestro vértice superior izquierdo se va desplazando hacía la derecha.
Nuestro vértice inferior izquierda se desplaza  a la izquierda.

Pero, ah, ese era el problema. Donde comienza a dibujar tienes una parte por la izquierda y otro por la derecha, ( del mismo tamaño que debes restar
al segmento o lado que dibujas). Con lo que debes restar esos dos pequeños segmentos al segmento que forma nuestro lado.

Public Sub Form_Open()
  
End

Public Sub Dibujar()

  Dim i As Integer
  
  Paint.LineWidth = 2
  
  For i = 0 To 500 Step 10
    'Esto no vale
    'Paint.Rectangle(i, i, 500 - i, 500 - i)    
    Paint.Rectangle(i, i, 500 - i * 2, 500 - i * 2)      
  Next
  Paint.Stroke
  
End

Public Sub drw_Draw()
  
  Dibujar
  
End

 


Ejercicio:

A los "osados", ¿ y si quiero tener rectángulos rellenos de colores ?. Pudiendo ver cada  relleno de los colores.
¿ Necesitaremos un Paint.FIll para rellenar nuestros rectángulos ?.
¿ Cómo evitareis esto ?. Es que quiero ver lo mismo, pero con colores rellenos.  

 unsolocolor

Pd, ¿ Sabíais que el ejemplo anterior es más fácil en gambas ?.
Esto es en PyGame. No es que sea muy grande pero si hay que usar otras cosas más.

 conpygame

Código:
# Importamos la librería de funciones llamada 'pygame'
# Tenemos que tener instalada la librería
import pygame
# inicializamos el motor de juegos
pygame.init()

# Definimos algunos colores
NEGRO = ( 0, 0, 0)
BLANCO = ( 255, 255, 255)

# Podemos usar la web www.colorpicker.com para ver la gama de colores
# El formato es ( R, G, B )

# Ponemos el ancho y alto del area de dibujo
# tama = [ ancho, alto ]

tama  = [500, 500]
pantalla = pygame.display.set_mode(tama)

# Titulo de la ventana
pygame.display.set_caption('Rectángulos concéntricos espaciados')

# Se repetira hasta que el usuario haga clic en el botón de cerrar
done = False

# Lo usamos para que administre con cuanta rapidez actualizamos la pantalla
reloj = pygame.time.Clock()

# ---------- Programa Principal ----------------
while not done:
    # Todos los eventos que queremos procesar deben ir debajo de este comentario
    for evento in pygame.event.get(): # El usuario hace alguna cosa
        if evento.type == pygame.QUIT:
            done = True            
  
    # Todos los eventos que queremos procesar deben ir encima de este comentario

    # Todo el codigo para dibujar debería ir debajo de este comentario

    # Limpia la ventana y establece el color de fondo  
    pantalla.fill(BLANCO)

    # Actualiza por completo nuestra pantalla Pygame
    pygame.display.flip()

    for i in range(0, 500, 10):
        pygame.draw.rect(pantalla, NEGRO, [i, i, 500-i*2, 500-i*2], 2)  

    # Todo el codigo para dibujar debería ir encima de este comentario
    # Limite de 20 imagenes por segundos
    reloj.tick(20)

# Para salir
pygame.quit()
 


Saludos

Rectangulos.tar.gz
Descripción:  
Descargar
Nombre del archivo: Rectangulos.tar.gz
Tamaño: 11.98 KB
Descargado: 40 veces
Rectangulos.tar.gz
Descripción:  
Descargar
Nombre del archivo: Rectangulos.tar.gz
Tamaño: 11.98 KB
Descargado: 40 veces
Rectangulos.tar.gz
Descripción:  
Descargar
Nombre del archivo: Rectangulos.tar.gz
Tamaño: 11.98 KB
Descargado: 40 veces

 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
última edición por Shell el Jueves, 10 Marzo 2016, 11:36; editado 2 veces 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Cuadrados Espaciados Concéntricos 
 
Fijaros el efecto que hace Stroke.

Public Sub Form_Open()
  
End

Public Sub Dibujar()
  
  Dim i As Integer
  
  Randomize
  
  Paint.LineWidth = 2
  
  For i = 0 To 500 Step 10    
    Paint.Rectangle(i, i, 500 - i * 2, 500 - i * 2)      
    Paint.Brush = Paint.Color(Color.RGB(Rnd * 255, Rnd * 255, Rnd * 255))
    'Descomentar despues de la primera ejecución
    Paint.Stroke
  Next
  'Primera ejecución. Comentar despues de la primera ejecución
  'Paint.Stroke()
  
End

Public Sub drw_Draw()
  
  Dibujar
  
End

 


Dentro del bucle se dibuja cada uno de los lado concéntricos en colores aleatorios, solo que el bucle es tan rápido
que no da tiempo a verlo. Obteniendo algo como esto:

 rectangulos_a_un_solo_color_1457607337_544423

Fijaros el efecto de refresco que hace el DrawingArea cuando pasáis un ventana por encima de el, cuando
lo movéis. Cuando seleccionamos una ventana y luego la del dibujo

Si queramos que nuestro dibujo permaneciera, deberíamos usar banderas.

Ahora descomentamos el Paint.Stroke del interior del bucle y comentamos el externo.

 rectangulos_bordes_distintos_colores

Con eso, quizás tenemos la pista para rellenar de colores los cuadrados.
 
Vaya, he puesto rectángulos, cuando son cuadrados.  

Saludos

Rectangulos2.tar.gz
Descripción:  
Descargar
Nombre del archivo: Rectangulos2.tar.gz
Tamaño: 12.12 KB
Descargado: 40 veces
Rectangulos2.tar.gz
Descripción:  
Descargar
Nombre del archivo: Rectangulos2.tar.gz
Tamaño: 12.12 KB
Descargado: 40 veces
Rectangulos2.tar.gz
Descripción:  
Descargar
Nombre del archivo: Rectangulos2.tar.gz
Tamaño: 12.12 KB
Descargado: 40 veces

 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Cuadrados Espaciados Concéntricos 
 
Parece que el número de pasos en el bucle es la mitad del lado. Es algo que no se.
Pero si se hace una especie de animación hace un efecto bien raro.

Se siguen moviendo los vértices...

Private i As Integer

Public Sub Form_Open()

  Randomize
  Timer1.Delay = 18
  Timer1.Start

End


Public Sub Dibujar2b()
  
    Paint.Rectangle(i, i, 500 - i * 2, 500 - i * 2)          
    'Paint.Brush = Paint.Color(Color.RGB(Rnd * 255, Rnd * 255, Rnd * 255))      
    Paint.Brush = Paint.Color(Color.Green)      
    Paint.Fill(True)
    Paint.Brush = Paint.Color(Color.Black)
    Paint.Stroke
    
End

Public Sub drw_Draw()

  Dibujar2b
  
End

Public Sub Timer1_Timer()

  If i = 500 Then
    Timer1.Stop
  Else
    i += 10
  Endif  
  drw.Refresh
    
End
 


Por eso el bucle en los otros ejemplos, debería ser 250, En el timer se puede poner el limite a 250.
Y no veremos ese "rebote"

Había cometido el mismo error, el limite del tamaño del área de dibujo, y me estaba llegando al borde de este,
cuando solo debería llegar a la mitad. Pero no se ve. Quizás al hacer la segunda pasada del dibujo, se debería ver mas grueso el trazado.
En PyGame si lo he visto. ( El mismo error ).

Saludos

Rectangulos4.tar.gz
Descripción:  
Descargar
Nombre del archivo: Rectangulos4.tar.gz
Tamaño: 12.26 KB
Descargado: 43 veces
Rectangulos4.tar.gz
Descripción:  
Descargar
Nombre del archivo: Rectangulos4.tar.gz
Tamaño: 12.26 KB
Descargado: 43 veces
Rectangulos4.tar.gz
Descripción:  
Descargar
Nombre del archivo: Rectangulos4.tar.gz
Tamaño: 12.26 KB
Descargado: 43 veces

 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
última edición por Shell el Jueves, 10 Marzo 2016, 14:01; editado 3 veces 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Cuadrados Espaciados Concéntricos 
 
Después de ver "una posible" forma de hacer el ejercicio.
El "borde" del primer cuadrado aparenta ser la mitad de los otros. ¿ Alguien sabe el por qué ?.

 rellenocolores

Public Sub Form_Open()
  Randomize
End

Public Sub Dibujar() 'Posibilidad Una

  Dim i As Integer
  Dim anchodebrocha As Integer
      
  anchodebrocha = 50
  Paint.LineWidth = anchodebrocha
  
  For i = 0 To 250 Step anchodebrocha
    Paint.Rectangle(i, i, 500 - i * 2, 500 - i * 2)          
    Paint.Brush = Paint.Color(Color.RGB(Rnd * 255, Rnd * 255, Rnd * 255))    
    Paint.Stroke
  Next
  
End

Public Sub drw_Draw()
  
  Dibujar
  
End
 


Seguro que me vuelvo a confundir en lo mismo.  
No hay nada mejor que la depuración. Es una cosa tan simple y ya veis como se complica.

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Cuadrados Espaciados Concéntricos 
 
Pues si, es distinto.

Si en vez de Paint.Stroke usamos Paint.Fill cambia totalmente y el ancho del cuadrado es el adecuado.

Public Sub Dibujar() 'Posibilidad Una

  Dim i As Integer
  Dim anchodebrocha As Integer
      
  anchodebrocha = 50
  Paint.LineWidth = anchodebrocha
  
  For i = 0 To 250 Step anchodebrocha
    Print i
    Paint.Rectangle(i, i, 500 - i * 2, 500 - i * 2)          
    Paint.Brush = Paint.Color(Color.RGB(Rnd * 255, Rnd * 255, Rnd * 255))    
    Paint.Fill
  Next
  
End
 


Por eso, había dos posibilidades. O bien dibujas los bordes con Stroke y un ancho de pincel  o haces un cuadrado relleno, dentro de otro.

 rectangulos_ancho_correcto

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Algoritmo De Cuadrados Medios skhaliburg Aplicaciones/Fragmentos de Código 7 Domingo, 13 Marzo 2011, 03:41 Ver último mensaje
skhaliburg
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron