2017-01-28 5 views
1

Я хотел бы сделать несколько графиков, чтобы помочь некоторым ученикам исчисления, которые я наставляю, лучше визуализировать твердые тела, которые они находят в объеме. Например, одна проблема заключается в том, чтобы найти объем треугольной пирамиды.Сделать каркасный многоугольник

Ниже приведен какой-то рабочий код, который генерирует стороны пирамиды, но вы не можете сказать, где заканчивается одна сторона, а другая начинается. Как я могу превратить это в каркас, чтобы сделать его более узнаваемым? Или, альтернативно, как я могу покрасить поверхности разных цветов, чтобы сделать фигуру более заметной?

В частности, я не понимаю, как я мог бы сделать треугольную сетку сетки. В качестве альтернативы, я думаю, что создание линий, которые соединяются с каждой точкой, было бы достаточно.

import numpy as np 
import matplotlib.pyplot as plot 
from mpl_toolkits.mplot3d import Axes3D 
from mpl_toolkits.mplot3d.art3d import Poly3DCollection 

fig = plot.figure() 
ax = Axes3D(fig) 

A=[0,0,0] 
B=[1,1,0] 
C=[0,1,1] 
D=[0,1,0] 

verts=[[A,B,C], 
     [A,B,D], 
     [A,D,C], 
     [B,C,D]] 

ax.add_collection3d(Poly3DCollection(verts)) 
ax.view_init(azim=-45) 
ax.set_xlabel('x') 
ax.set_ylabel('y') 
ax.set_zlabel('z') 
plot.show() 

Полученная цифра:

triangular pyramid visualization

ответ

1

Если вы хотите, чтобы показать края вашей фигуры, вы можете указать line width при создании Poly3DCollection

Poly3DCollection(verts, lw=2) 

enter image description here

Кроме того, указав некоторые face transparency может помочь с визуализацией

Poly3DCollection(verts, facecolor=(0,0,1,0.2), linewidth=2, edgecolor=(0,0,0)) 

enter image description here

Вы также можете использовать facecolors свойство, чтобы указать другой цвет для каждого лица

Poly3DCollection(verts, lw=2, facecolors=['r', 'g', 'b', 'k']) 

enter image description here

+0

г. Второго картина у вас есть именно то, что я хочу. Когда я добавляю 'lw = 2' и' alpha = .5' в свой код, график не изменяется. Вы знаете, почему это может произойти? –

+0

@ K.Shores А вы просто добавляете его к созданию 'Poly3DCollection'? – Suever

+0

Да. Я изменил строку из этого 'ax.add_collection3d (Poly3DCollection (verts))' to 'ax.add_collection3d (Poly3DCollection (verts, lw = 2, alpha = .5))'. –

Смежные вопросы