2015-04-27 60 views
13

是否有一些方法可以獲得像Delaunay生成的Matlab那樣更有序的2D三角剖分?這裏是Matlab的二維Delaunay三角剖分的一個例子。用scipy創建常規Delaunay網格

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

顯然這兩個三角是「正確的」,因爲這兩種類型的對角線長度相同。你可能想看'dehuunay'的'qhull_options ='參數,它會傳遞給'qdelaunay'的一串選項。各種可能的選項總結在這裏(http://www.qhull.org/html/qh-optq.htm),儘管沒有任何明顯的突出。不幸的是,它不可能看到MATLAB的delaunay函數是如何工作的,因爲它是封閉的。 –

+0

是的,兩者都是正確的,但由於這是一個統一的域,所以matlab的三角測量允許在數學中進行一些簡化。感謝那個鏈接,我之前沒有找到那個鏈接。 –

+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