Скрипт Python завершается с ошибкой после 2 итерацийPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Скрипт Python завершается с ошибкой после 2 итераций

Сообщение Anonymous »


Я написал скрипт, который берет указанный октаэдр и уточняет его. Для контекста у меня есть изображения вывода с итерациями, установленными в 0, 1 и 2.
Изображение

[img]https://i.stack.imgur .com/pvSFO.png[/img]

Изображение


Однако, когда я устанавливаю iterations=3, я получаю следующую ошибку:

Traceback (самый последний вызов — последний): Файл «/Users/amaurydeburgos/Documents/WinterBreak2023.py», строка 78, в ax.add_collection3d(Poly3DCollection([ [ Vertices for i in f] for f in Faces],edgecolors='k',facecolors='w')) Файл "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/mpl_toolkits/mplot3d/art3d.py", строка 701, в __init__ super().__init__(verts, *args, **kwargs) Файл "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/matplotlib/_api/deprecation.py", строка 454, в оболочке return func(*args, **kwargs) Файл "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/matplotlib/collections.py", строка 1176, в __init__ self.set_verts(верты, закрыто) Файл "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/mpl_toolkits/mplot3d/art3d.py", строка 745, в set_verts self.get_vector(верты) Файл «/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/mpl_toolkits/mplot3d/art3d.py», строка 734, в get_vector xs, ys, zs = np.row_stack(segments3d).T Файл «», строка 200, в vstack Файл "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/numpy/core/shape_base.py", строка 296, в vstack return _nx.concatenate(arrs, 0, dtype=dtype, casting=casting) Файл "", строка 200, в объединении ValueError: все измерения входного массива, за исключением оси конкатенации, должны точно совпадать, но по измерению 1 массив с индексом 0 имеет размер 3, а массив с индексом 689 имеет размер 0. Я не знаю, что происходит не так. Любая помощь очень ценится. Сценарий, который я написал, приведен ниже:
импортировать pylab как plt импортировать numpy как np из массива импорта numpy из нормы импорта numpy.linalg из оператора импорта добавить из комбинаций импорта itertools из mpl_toolkits.mplot3d.art3d импорт Poly3DCollection # Начальный октаэдр Вершины = [ (0,0,1), (1,0,0), (0,1,0), (-1,0,0), (0,-1,0), (0,0, -1) ] Края = { замороженный набор({0,1}), замороженный набор({0,2}), замороженный набор({0,3}), замороженный набор({0,4}), замороженный набор({1,2}), замороженный набор({2,3}), замороженный набор({3,4}), замороженный набор({1,4}), замороженный набор({1,5}), замороженный набор({2,5}), замороженный набор({3,5}), замороженный набор({4,5}) } Faces = { замороженный набор({0,1,2}), замороженный набор({0,2,3}), замороженный набор({0,3,4}), замороженный набор({0,1,4}), замороженный набор({1,2,5}), замороженный набор({2,3,5}), замороженный набор({3,4,5}), замороженный набор({1,4,5}) } итерации = 3 для меня в диапазоне (итерации): # Инициализация набора новых вершин, новых ребер и новых граней счетчик = len(Вершины)-1 новыеВертицес = [] новые края = установить () новыеЛица = установить() # Добавление элементов newVertices и тривиальных элементов newEdges для края в Edges: счетчик = счетчик+1 newVertex = np.array([0,0,0]) для вершины в ребре: newVertex = np.add(newVertex,np.array(Vertices[vertex])) newEdge = замороженный набор({вершина,счетчик}) newEdges.add(newEdge) newVertex = np.divide(newVertex,norm(newVertex,2)) newVertices.append(кортеж(newVertex)) # Добавление нетривиальных элементов newEdges и элементов newFaces для лица в Faces: middleFace = установить () SpecialEdges=установить() парыOfSpecialEdges={(a,b) для a,b в комбинациях({ребро для края в newEdges if len(edge.intersection(face))==1},2) if (a & b) и len((a- face).intersection(b-face))==1} для пары в PairsOfSpecialEdges: для края в паре: SpecialEdges.add(край) для вершины на грани: IncidentEdges={ребро для ребра в SpecialEdges, если вершина в ребре} newEdge=установить() для края в инциденте: для v в ребре: если v==вершина: продолжать еще: newEdge.add(в) middleFace.add(v) newEdges.add(frozenset(newEdge)) newEdge.add(вершина) newFaces.add(frozenset(newEdge)) newFaces.add(frozenset(middleFace)) Вершины = Вершины+новыеВершины Края.очистить() Edges.update(newEdges) Лица.clear() Faces.update(newFaces) ### График ### рис = plt.figure() топор = plt.axes(проекция='3d') ax.set(xlim=(-1,1), ylim=(-1,1), zlim=(-1,1)) ax.add_collection3d(Poly3DCollection([ [ Vertices for i in f] for f in Faces],edgecolors='k',facecolors='w')) plt.axis('выкл') plt.show()
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»