Как я могу избежать тетраэдров, лежащих в плоскости, используя scipy.Delaunay? - PullRequest
0 голосов
/ 16 октября 2019

Я пытаюсь создать тетраэдрическую сетку в Python 3.7.3. Но некоторые тетраэдры являются плоскими, то есть их вершины находятся на плоской поверхности.

import numpy as np
from scipy.spatial import Delaunay

# Coordinates of 3x3x3 equally distant points of a cube
x = np.linspace(0, 1, 3)
X1, X2, X3 = np.meshgrid(x,x,x)
vertices = np.hstack([X1.reshape(-1,1),X2.reshape(-1,1),X3.reshape(-1,1)])

# Using Delaunay
tri = Delaunay(vertices).simplices

# tetrahedra
simplices = vertices[tri,:]

Как вы можете видеть ниже, ужес третьим тетраэдром все координаты y равны 0,5. Позже это приводит к единственной матрице.

print(simplices[0:3])
[[[1.  0.5 1. ]
  [0.5 1.  0.5]
  [1.  0.5 0.5]
  [0.5 0.5 0.5]]

 [[1.  0.5 1. ]
  [1.  1.  0.5]
  [0.5 1.  0.5]
  [1.  0.5 0.5]]

 [[1.  0.5 1. ]
  [0.5 0.5 1. ]
  [1.  0.5 0.5]
  [0.5 0.5 0.5]]]

Знаете ли вы, как я могу обойти эту проблему? Большое спасибо.

1 Ответ

0 голосов
/ 23 октября 2019

В отличие от 2D, для 3D не существует известного алгоритма, который определенно генерирует триангуляцию Делоне для данной области. Однако есть несколько пакетов генерации сетки, которые производят довольно хорошие тетраэдрические сетки. Например,

(Отказ от ответственности: я автор pygmsh и pygalmesh.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...