Я хотел бы создать 3D-график призмы (или быть менее специфическим: многогранном) с матплотлибом. Я создаю вершины призмы с точкой и некоторыми векторами, чтобы я мог контролировать создание призмы (например: базовая область должна быть треугольником (или прямоугольником или параллелограммой) или базовой площадью должна быть параллельно с осью X- и Y и т. Д.). 'sympy.vector.point.point' и хранятся в словаре (так что я могу раздавать точки с помощью заданного имени точки). < /p>
Я получил ошибку, когда я даже пытаюсь рассеять вершины. В других примерах они использовали Numpy, но это не сработало в моем примере эфира. Помимо этого Matplotlib должен иметь возможность обрабатывать координаты симпи, не так ли? < /P>
Заранее спасибо за помощь!from sympy.vector import CoordSys3D
class Prism():
def __init__(self):
self.punkte = {}
self.ks = CoordSys3D("N")
# here happens some magic to create the vertices as I wish
# (mostly random, but with some given options)
# to make the code example much shorter, I just create a given cuboid
AB = 5*self.ks.i
AD = 10*self.ks.j
AE = 3*self.ks.k
self.add_point(self.ks.origin, AB.zero) # point A
self.add_point(self.punkte.get("A"), AB) # point B
self.add_point(self.punkte.get("B"), AD) # point C
self.add_point(self.punkte.get("A"), AD) # point D etc.
self.add_point(self.punkte.get("A"), AE)
self.add_point(self.punkte.get("B"), AE)
self.add_point(self.punkte.get("C"), AE)
self.add_point(self.punkte.get("D"), AE)
def add_point(self, ausgangspunkt, vektor):
alphabet = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]
name = alphabet[len(self.punkte)]
neuer_punkt = ausgangspunkt.locate_new(name, vektor)
self.punkte.update({name: neuer_punkt})
def plot(self):
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d.art3d import Poly3DCollection, Line3DCollection
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x, y, z = [], [], []
for punkt in self.punkte.values():
x.append(punkt.express_coordinates(self.ks)[0])
y.append(punkt.express_coordinates(self.ks)[1])
z.append(punkt.express_coordinates(self.ks)[2])
ax.scatter3D(x, y, z)
plt.show()
testprism = Prism()
testprism.plot()
Подробнее здесь: https://stackoverflow.com/questions/625 ... oint-class
Построить призму в matplotlib (python) с помощью "sympy.vector.point.point" -class ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение