2015-04-27 3 views
13

Есть ли какой-нибудь метод получения триангуляции в 2D, который более упорядочен, как Matlab Delaunay? Вот пример триангуляции 2D Delaunay от Matlab.Создание регулярной сетки Delaunay в scipy

matlab delaunay

Используя этот код:

xPoints = np.arange(0,11,1) 
yPoints = np.arange(0,11,1) 
gridPoints = np.array([[x,y] for y in yPoints for x in xPoints]) 
tri = Delaunay(gridPoints) 
plt.triplot(gridPoints[:,0],gridPoints[:,1],tri.simplices.copy()) 
plt.plot(gridPoints[:,0],gridPoints[:,1],'bo') 
plt.title("Triangulation Visualization") 

Я получаю триангуляции ниже:

scipy delaunay

Обратите внимание, как диагональные дуги в Matlab результате все имеют одинаковый наклон; но те, кто в scipy результате, меняются. Поскольку Matlab и Scipy используют QHull внутренне, я предполагаю, что есть некоторый метод для имитации результата Matlab.

+2

Очевидно оба триангуляции являются «правильными», поскольку оба вида диагонали имеют одинаковую длину. Возможно, вы захотите посмотреть на параметр 'qhull_options =' на 'Delaunay', который берет строку параметров, которые передаются' qdelaunay'. Различные возможные варианты суммируются [здесь] (http://www.qhull.org/html/qh-optq.htm), хотя ничего очевидного не видно. К сожалению, невозможно увидеть, как работает функция «delaunay» MATLAB с закрытого источника. –

+0

Да, оба правильны, но поскольку это однородный домен, триангуляция Матлаба допускает некоторые упрощения в математике. Спасибо за эту ссылку, я не нашел этого при поиске раньше. –

+0

Будет ли работать, для вашей проблемы, явно генерировать триангуляцию самостоятельно? Это должно быть разумным для однородной прямоугольной области. –

ответ

2

Вы можете попробовать триангуляции вместо Делоне:

import matplotlib.tri as tri 

xlen = 10 
ylen = 16 
xPoints = np.arange(0,xlen+1,1) 
yPoints = np.arange(0,ylen+1,1) 

gridPoints = np.array([[[x,y] for y in yPoints] for x in xPoints]) 
a = [[i+j*(ylen+1),(i+1)+j*(ylen+1),i+(j+1)*(ylen+1)] for i in range(ylen) for j in range(xlen)] 
triang = tri.Triangulation(gridPoints[:,:,0].flatten(), gridPoints[:,:,1].flatten(),a) 

plt.triplot(triang) 
plt.plot(gridPoints[:,:,0],gridPoints[:,:,1],'bo') 
plt.title("Triangulation Visualization") 

enter image description here

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