02 - Codificando Linha pelo Bresenham¶
Na atividade a seguir você deverá desenhar uma linha preenchendo os pixels entre dois pontos. Para essa atividade vamos usar o Numpy e Matplotlib. Assim vamos carregar as bibliotecas e vamos definir valores de resolução (altura e largura) da nossa janela.
In [ ]:
Copied!
import numpy as np
import matplotlib.pyplot as plt
height = 8
width = 8
import numpy as np
import matplotlib.pyplot as plt
height = 8
width = 8
Agora vamos desenhar uma tela vazia. Verifique que criamos uma variável frame_buffer que irá armazenar os valores dos pixels.
In [ ]:
Copied!
# Cria o espaço para a figura
fig, axes = plt.subplots()
# Cria um buffer de imagem inicialmente completamente preto (limpo)
frame_buffer = np.zeros((height, width))
# Define o tamanho da imagem e que a origem é no canto superior esquerdo
extent = (0, width, height, 0)
# Cria a figura
axes.imshow(frame_buffer, interpolation='nearest', extent=extent, cmap='gray')
axes.grid()
# Cria o espaço para a figura
fig, axes = plt.subplots()
# Cria um buffer de imagem inicialmente completamente preto (limpo)
frame_buffer = np.zeros((height, width))
# Define o tamanho da imagem e que a origem é no canto superior esquerdo
extent = (0, width, height, 0)
# Cria a figura
axes.imshow(frame_buffer, interpolation='nearest', extent=extent, cmap='gray')
axes.grid()
Como exemplo vamos desenhar só dois pixels para entender o funcionamento do sistema.
In [ ]:
Copied!
# Cria o espaço para a figura e desenha um grid
fig, axes = plt.subplots()
# Cria um buffer de imagem inicialmente completamente preto (limpo)
frame_buffer = np.zeros((height, width))
# Define o tamanho da imagem e que a origem é no canto superior esquerdo
extent = (0, width, height, 0)
# Define um pixel branco na posição (0, 0)
frame_buffer[0][0] = 1
# Define um pixel branco na posição (1, 2)
frame_buffer[1][3] = 1
# Perceba que você está plotando Y e X, e não X e Y
# Cria a figura
axes.imshow(frame_buffer, interpolation='nearest', extent=extent, cmap='gray')
axes.grid()
# Cria o espaço para a figura e desenha um grid
fig, axes = plt.subplots()
# Cria um buffer de imagem inicialmente completamente preto (limpo)
frame_buffer = np.zeros((height, width))
# Define o tamanho da imagem e que a origem é no canto superior esquerdo
extent = (0, width, height, 0)
# Define um pixel branco na posição (0, 0)
frame_buffer[0][0] = 1
# Define um pixel branco na posição (1, 2)
frame_buffer[1][3] = 1
# Perceba que você está plotando Y e X, e não X e Y
# Cria a figura
axes.imshow(frame_buffer, interpolation='nearest', extent=extent, cmap='gray')
axes.grid()
Desenhando Linhas¶
Crie uma rotina que seja capaz de preencher os pixels entre os pontos A(2,1) e B(6,5).
In [ ]:
Copied!
# Cria o espaço para a figura e desenha um grid
fig, axes = plt.subplots()
# Cria um buffer de imagem inicialmente completamente preto (limpo)
frame_buffer = np.zeros((height, width))
# Define o tamanho da imagem e que a origem é no canto superior esquerdo
extent = (0, width, height, 0)
# FAÇA AQUI SUA IMPLEMENTAÇÃO
# Ponto A = (2,1)
# Ponto B = (6,5)
# Cria a figura
axes.imshow(frame_buffer, interpolation='nearest', extent=extent, cmap='gray')
axes.grid()
# Cria o espaço para a figura e desenha um grid
fig, axes = plt.subplots()
# Cria um buffer de imagem inicialmente completamente preto (limpo)
frame_buffer = np.zeros((height, width))
# Define o tamanho da imagem e que a origem é no canto superior esquerdo
extent = (0, width, height, 0)
# FAÇA AQUI SUA IMPLEMENTAÇÃO
# Ponto A = (2,1)
# Ponto B = (6,5)
# Cria a figura
axes.imshow(frame_buffer, interpolation='nearest', extent=extent, cmap='gray')
axes.grid()
Crie agora uma rotina que desenha linhas em todas as direções.
In [ ]:
Copied!
# Cria o espaço para a figura e desenha um grid
fig, axes = plt.subplots()
# Cria um buffer de imagem inicialmente completamente preto (limpo)
frame_buffer = np.zeros((height, width))
# Define o tamanho da imagem e que a origem é no canto superior esquerdo
extent = (0, width, height, 0)
# FAÇA AQUI SUA IMPLEMENTAÇÃO
def desenha_linha(p0, p1):
pass
desenha_linha((0, 3), (2, 1))
desenha_linha((5, 1), (7, 3))
desenha_linha((5, 1), (2, 1))
desenha_linha((1, 2), (1, 6))
desenha_linha((6, 2), (6, 6))
desenha_linha((1, 6), (6, 6))
desenha_linha((4, 4), (4, 5))
# Cria a figura
axes.imshow(frame_buffer, interpolation='nearest', extent=extent, cmap='gray')
axes.grid()
# Cria o espaço para a figura e desenha um grid
fig, axes = plt.subplots()
# Cria um buffer de imagem inicialmente completamente preto (limpo)
frame_buffer = np.zeros((height, width))
# Define o tamanho da imagem e que a origem é no canto superior esquerdo
extent = (0, width, height, 0)
# FAÇA AQUI SUA IMPLEMENTAÇÃO
def desenha_linha(p0, p1):
pass
desenha_linha((0, 3), (2, 1))
desenha_linha((5, 1), (7, 3))
desenha_linha((5, 1), (2, 1))
desenha_linha((1, 2), (1, 6))
desenha_linha((6, 2), (6, 6))
desenha_linha((1, 6), (6, 6))
desenha_linha((4, 4), (4, 5))
# Cria a figura
axes.imshow(frame_buffer, interpolation='nearest', extent=extent, cmap='gray')
axes.grid()