# Построить трехмерное изображение каркасной модели фигуры # Куб с ребром 10 и центром в начале координат, главная диагональ лежит на оси OZ def rotate_z(vertices, q): Q = np.radians(q) R_z = np.array([ [np.cos(Q), -np.sin(Q), 0, 0], [np.sin(Q), np.cos(Q), 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) # Преобразование с использованием гомогенных координат vertices_hom = np.hstack((vertices, np.ones((vertices.shape[0], 1)))) rotated_vertices = np.dot (vertices_hom, R_z) return rotated_vertices[:, :3]
# Куб с ребром 10 и центром в начале координат, главная диагональ лежит на оси OZ
def rotate_z(vertices, q):
Q = np.radians(q)
R_z = np.array([
[np.cos(Q), -np.sin(Q), 0, 0],
[np.sin(Q), np.cos(Q), 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 1]])
# Преобразование с использованием гомогенных координат
vertices_hom = np.hstack((vertices, np.ones((vertices.shape[0], 1))))
rotated_vertices = np.dot (vertices_hom, R_z)
return rotated_vertices[:, :3]
def transl_tochka(point, smechenie):
point_hom = np.array([point[0], point[1], point[2], 1])
T = np.array([[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, 0],
[smechenie[0], smechenie[1], smechenie[2], 1]])
new_point_hom = np.dot (point_hom, T)
return new_point_hom[:3]
def cube_vertices(tochka, length_reb):
vertices = []
# Создаем 8 вершин куба
for dx in [0, length_reb]:
for dy in [0, length_reb]:
for dz in [0, length_reb]:
new_vertex = transl_tochka(tochka, [dx - length_reb / 2, dy - length_reb / 2, dz - length_reb / 2])
vertices.append(new_vertex)
return np.array(vertices)
def plot_cube(vertices):
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
edges = []
# Соединяем рёбра нижней и верхней грани
for i in range(4):
edges.append((vertices[i], vertices[(i + 1) % 4])) # Нижние рёбра
edges.append((vertices[i + 4], vertices[(i + 1) % 4 + 4])) # Верхние рёбра
edges.append((vertices[i], vertices[i + 4])) # Вертикальные рёбра
# Рисуем рёбра
for edge in edges:
ax.plot3D(*zip(*edge), color='b')
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.set_title('Куб с длиной ребра 10')
plt.show() Не полностью строится куб, нельзя использовать готовые списки с гранями и ребрами