13 - Primitivas Geométricas¶
Para essa atividade vamos usar o Numpy e Matplotlib. Assim vamos carregar as bibliotecas.
In [ ]:
Copied!
import numpy as np
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.pyplot as plt
Vamos definir algumas funções auxiliares que vão nos ajudar a interpretar os resultados nos gráficos.
In [ ]:
Copied!
# Faz o setup para desenhar gráficos em 2D
def graph():
fig = plt.figure()
ax = plt.axes()
plt.grid()
ax.set_xlim(-4, 4)
ax.set_ylim(-4, 4)
ax.axhline(0, color='black') # deixa o X do eixo 0 em destaque
ax.axvline(0, color='black') # deixa o Y do eixo 0 em destaque
ax.set_aspect('equal')
ax.set(xlabel='x', ylabel='y')
return ax
# Faz o setup para desenhar gráficos em 3D
def graph3d(c = 1.0):
fig = plt.figure()
ax = plt.axes(projection='3d')
ax.set(xlabel='x', ylabel='y', zlabel='z')
ax.set_xlim3d(-4, 4) # faixa de visualização de X
ax.set_ylim3d(-3, 3) # faixa de visualização de Y
ax.set_zlim3d(-4, 4) # faixa de visualização de Z
#ax.set_aspect('equal') # Não suportado em todas as plataformas
ax.quiver([-c/2,0,0],[0,-c/2,0],[0,0,-c/2],
[c,0,0],[0,c,0],[0,0,c],
arrow_length_ratio=0.2, color="grey")
fig.tight_layout()
ax.view_init(elev=20.0, azim=30.0, vertical_axis='y')
return ax
# Faz o setup para desenhar gráficos em 2D
def graph():
fig = plt.figure()
ax = plt.axes()
plt.grid()
ax.set_xlim(-4, 4)
ax.set_ylim(-4, 4)
ax.axhline(0, color='black') # deixa o X do eixo 0 em destaque
ax.axvline(0, color='black') # deixa o Y do eixo 0 em destaque
ax.set_aspect('equal')
ax.set(xlabel='x', ylabel='y')
return ax
# Faz o setup para desenhar gráficos em 3D
def graph3d(c = 1.0):
fig = plt.figure()
ax = plt.axes(projection='3d')
ax.set(xlabel='x', ylabel='y', zlabel='z')
ax.set_xlim3d(-4, 4) # faixa de visualização de X
ax.set_ylim3d(-3, 3) # faixa de visualização de Y
ax.set_zlim3d(-4, 4) # faixa de visualização de Z
#ax.set_aspect('equal') # Não suportado em todas as plataformas
ax.quiver([-c/2,0,0],[0,-c/2,0],[0,0,-c/2],
[c,0,0],[0,c,0],[0,0,c],
arrow_length_ratio=0.2, color="grey")
fig.tight_layout()
ax.view_init(elev=20.0, azim=30.0, vertical_axis='y')
return ax
Desenhando um Círculo¶
Antes de desenhar uma esfera vamos desenhar um círculo. Assim crei uma função para desenhar alguns pontos em torno do centro do gráfico, para isso você deve passar um raio e quantidade de pontos. Conforme for maior a quantidade de pontos, mais parecido com um círculo sua imagem deverá parecer.
In [ ]:
Copied!
#%matplotlib widget
ax = graph() # configura o espaço para desenhar um gráfico 2D
# Rotina para desenhar um círculo
def circulo(raio, qtd_pontos):
# AJUSTE E TERMINE AQUI SUA IMPLEMENTAÇÃO
# O CÓDIGO ABAIXO É SÓ UM EXEMPLO COM 4 PONTOS
pontos = np.array([[ 0.5, 0.0, -0.5, 0.0],
[ 0.0, 0.5, 0.0, -0.5]])
ax.scatter(pontos[0], pontos[1], s=10)
circulo(2.5, 80)
plt.show()
#%matplotlib widget
ax = graph() # configura o espaço para desenhar um gráfico 2D
# Rotina para desenhar um círculo
def circulo(raio, qtd_pontos):
# AJUSTE E TERMINE AQUI SUA IMPLEMENTAÇÃO
# O CÓDIGO ABAIXO É SÓ UM EXEMPLO COM 4 PONTOS
pontos = np.array([[ 0.5, 0.0, -0.5, 0.0],
[ 0.0, 0.5, 0.0, -0.5]])
ax.scatter(pontos[0], pontos[1], s=10)
circulo(2.5, 80)
plt.show()
Desenhando uma Esfera¶
Agora desenha uma esfera. Da mesma forma que o círculo, use um ráio para definir o tamanho da esfera e depois indique o número de divisões na longitude e latitude (u e v).
In [ ]:
Copied!
#%matplotlib widget
ax = graph3d(0.1) # configura o espaço para desenhar um gráfico 3D
# Rotina para desenhar uma esfera
def esfera(raio, div_lon, div_lat):
# AJUSTE E TERMINE AQUI SUA IMPLEMENTAÇÃO
# O CÓDIGO ABAIXO É SÓ UM EXEMPLO COM 4 PONTOS
pontos = np.array([[ 0.0, 0.5, 0.0, -0.5, 0.0, 0.0],
[ 0.5, 0.0, 0.0, 0.0, 0.0, -0.5],
[ 0.0, 0.0, 0.5, 0.0, -0.5, 0.0]])
ax.scatter(pontos[0], pontos[1], pontos[2], s=10)
esfera(2.5, 60, 40)
plt.show()
#%matplotlib widget
ax = graph3d(0.1) # configura o espaço para desenhar um gráfico 3D
# Rotina para desenhar uma esfera
def esfera(raio, div_lon, div_lat):
# AJUSTE E TERMINE AQUI SUA IMPLEMENTAÇÃO
# O CÓDIGO ABAIXO É SÓ UM EXEMPLO COM 4 PONTOS
pontos = np.array([[ 0.0, 0.5, 0.0, -0.5, 0.0, 0.0],
[ 0.5, 0.0, 0.0, 0.0, 0.0, -0.5],
[ 0.0, 0.0, 0.5, 0.0, -0.5, 0.0]])
ax.scatter(pontos[0], pontos[1], pontos[2], s=10)
esfera(2.5, 60, 40)
plt.show()
In [ ]:
Copied!