Я разрабатываю 2D-инструмент для конечных элементов плоскости. Одной из особенностей является возможность визуализации напряжений на конкретном объекте.
Этот инструмент создает четырехугольную сетку, используя следующие данные:
узлы : массив NumPy [[x1 y1], [x2 y2], etc]
-> x
и y
координаты каждого узла в сетке
elements : массив numpy [[1 2 3 4], [2 3 5 6]]
-> каждая строка массива соответствует 4 точкам одного конкретного элемента сетки.
Мне удалось реализовать метод построения сетки:
import matplotlib.pyplot as plt
import matplotlib.collections
import matplotlib.cm as cm
import numpy as np
def showMeshPlot(nodes, elements):
y = nodes[:,0]
z = nodes[:,1]
#https://stackoverflow.com/questions/49640311/matplotlib-unstructered-quadrilaterals-instead-of-triangles
def quatplot(y,z, quatrangles, ax=None, **kwargs):
if not ax: ax=plt.gca()
yz = np.c_[y,z]
verts= yz[quatrangles]
pc = matplotlib.collections.PolyCollection(verts, **kwargs)
ax.add_collection(pc)
ax.autoscale()
plt.figure()
plt.gca().set_aspect('equal')
quatplot(y,z, np.asarray(elements), ax=None, color="crimson", facecolor="None")
if nodes:
plt.plot(y,z, marker="o", ls="", color="crimson")
plt.title('This is the plot for: quad')
plt.xlabel('Y Axis')
plt.ylabel('Z Axis')
plt.show()
nodes = np.array([[0,0], [0,0.5],[0,1],[0.5,0], [0.5,0.5], [0.5,1], [1,0],
[1,0.5],[1,1]])
elements = np.array([[0,3,4,1],[1,4,5,2],[3,6,7,4],[4,7,8,5]])
stresses = np.array([1,2,3,4])
showMeshPlot(nodes, elements)
Который производит сюжет, подобный этому:
Теперь у меня есть одномерный массив с напряжениями на объекте, такой же длины, что и массив элементов.
Мой вопрос: как я могу визуализировать эти напряжения (с помощью скалярного стержня), используя matplotlib? Я посмотрел в pcolormesh, но я не мог понять, как он может работать с моими данными. Вот пример того, чего я хочу достичь (кредиты для robbievanleeuwen):
Примечание: я не смог повторить приведенный выше пример, потому что он использует треугольную сетку вместо четырехугольников.
Заранее спасибо!