2015-04-27 16 views
13

Có phương pháp nào để có được một tam giác trong 2D được đặt hàng nhiều hơn như Matlab Delaunay tạo ra không? Đây là một ví dụ về tam giác 2D Delaunay của Matlab.Tạo lưới Delaunay thông thường với scipy

matlab delaunay

Sử dụng mã này:

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") 

tôi nhận được tam giác dưới đây:

scipy delaunay

Chú ý cách cung đường chéo trong Matlab kết quả tất cả đều có độ dốc tương tự; nhưng những người trong kết quả scipy là khác nhau. Kể từ Matlab và Scipy cả hai sử dụng QHull nội bộ, tôi đoán có một số phương pháp để bắt chước kết quả Matlab.

+2

Rõ ràng cả hai triangulations là "đúng", vì cả hai loại đường chéo có cùng độ dài. Bạn có thể muốn xem tham số 'qhull_options =' tới 'Delaunay', nó nhận một chuỗi các tùy chọn được chuyển tới' qdelaunay'. Các tùy chọn khác nhau có thể được tóm tắt [ở đây] (http://www.qhull.org/html/qh-optq.htm), mặc dù không có gì rõ ràng dính ra. Thật không may là không thể thấy chức năng 'delaunay' của MATLAB hoạt động như thế nào vì nó đóng nguồn. –

+0

Có, cả hai đều chính xác, nhưng vì đây là một miền thống nhất, tam giác của MATLAB cho phép một số đơn giản hóa trong toán học được thực hiện. Cảm ơn vì liên kết đó, tôi đã không tìm thấy cái đó khi tìm kiếm trước đây. –

+0

Nó có hoạt động, cho vấn đề của bạn, để tự mình tạo ra hình tam giác? Điều này sẽ hợp lý cho một miền hình chữ nhật thống nhất. –

Trả lời

2

Bạn có thể thử tam giác thay vì Delaunay:

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

Các vấn đề liên quan