Я хотел бы построить цилиндр с центром в (0,0,0), учитывая его высоту (h = 40) и радиус (r = 20). Я также хочу создать сетку на ее поверхности.
Моя проблема заключается в следующем: когда я пытаюсь построить верхнюю и нижнюю части моего цилиндра, они отображаются в виде квадратов на моей фигуре, а не в виде дисков. Кроме того, когда я устанавливаю сетку для боковой части, используя функцию каркаса из Axes3D (matplotlib), по какой-то причине сетка появляется в верхней части, а квадраты не имеют постоянного размера.
fig1 = plt.figure(figsize = (10,10)) #On nomme la figure
env = fig1.add_subplot(111, projection='3d') #On crée le volume 3D avec quadrillage et axes
# Parois latérales
no_values = 1000
phi_cyl = np.linspace(0, 2*np.pi, no_values)
x_walls = R * np.cos(phi_cyl) #Valeurs de X prises par le cylindre externe
z_walls = np.linspace(-h/2, h/2, no_values)
x2D_walls, z2D_walls = np.meshgrid(x_walls, z_walls)
y2D_walls = np.sqrt(R**2 - x2D_walls**2)
env.plot_surface(x2D_walls, y2D_walls, z2D_walls, color='k', alpha=0.03)
env.plot_surface(x2D_walls, -y2D_walls, z2D_walls, color='k', alpha=0.03,)
env.plot_wireframe(x2D_walls, y2D_walls, z2D_walls, rstride=2, cstride =2)
env.plot_wireframe(x2D_walls, -y2D_walls, z2D_walls, rstride=2, cstride =2)
#Plafond
phi_cyl = np.linspace(0, 2*np.pi, no_values)
x_ceiling = R * np.cos(phi_cyl)
y_ceiling = R * np.sin(phi_cyl)
x2D_ceiling, y2D_ceiling = np.meshgrid(x_ceiling, y_ceiling)
z2D_ceiling = np.ones((len(x_ceiling),len(y_ceiling)))* h/2
env.plot_surface(x2D_ceiling, y2D_ceiling, z2D_ceiling, color='k', alpha=0.03)
env.plot_wireframe(x2D_ceiling, y2D_ceiling, z2D_ceiling, rstride=2, cstride =2)
#Sol
phi_cyl = np.linspace(0, 2*np.pi, no_values)
x_floor = R * np.cos(phi_cyl)
y_floor = R * np.sin(phi_cyl)
x2D_floor, y2D_floor = np.meshgrid(x_floor, y_floor)
z2D_floor = - np.ones((len(x_floor),len(y_floor)))* h/2
env.plot_surface(x2D_floor, y2D_floor, z2D_floor, color='k', alpha=0.03)
env.plot_surface(x2D_floor, y2D_floor, z2D_floor, color='k', alpha=0.03, rstride=2, cstride=2)
plt.title('Détecteur T2K')
env.set_xlabel('Profondeur [m]')
env.set_ylabel('Largeur [m]')
env.set_zlabel('Hauteur [m]')
plt.show()
plt.savefig("Cuve")
Я хотел бы получить сетку с квадратами размером 0,5 * 0,5 и, наконец, закрыть свой цилиндр. Спасибо за вашу помощь