Tôi có một tập hợp các điểm 3D xác định đường bao 3D. Những gì tôi muốn làm là để có được đại diện bề mặt tối thiểu tương ứng với đường viền này (see Minimal Surfaces in Wikipedia). Về cơ bản, điều này đòi hỏi phải giải quyết một phương trình vi phân từng phần phi tuyến.Giải pháp bề mặt tối thiểu trong Python
Trong Matlab, điều này gần như đơn giản bằng cách sử dụng hàm pdenonlin
(see Matlab's documentation). Một ví dụ về cách sử dụng của nó để giải quyết một vấn đề bề mặt tối thiểu có thể được tìm thấy ở đây: Minimal Surface Problem on the Unit Disk.
Tôi cần thực hiện như vậy trong Python, nhưng tôi biết rằng tôi chưa tìm thấy bất kỳ tài nguyên web nào về cách thực hiện điều này.
Có ai có thể chỉ cho tôi bất kỳ tài nguyên/ví dụ nào về việc triển khai như vậy không?
Xin cảm ơn, Miguel.
CẬP NHẬT
Bề mặt 3D (lý tưởng một lưới đại diện hình tam giác) Tôi muốn tìm giáp này tập hợp các điểm 3D (như đã thấy trong hình này, các điểm nằm trong mặt phẳng tốt nhất điều chỉnh kích thước) :
Ok, làm như vậy một số nghiên cứu tôi thấy rằng vấn đề bề mặt tối thiểu này có liên quan với các giải pháp của các Biharmonic Equation, và tôi cũng phát hiện ra rằng Thin-plate spline sự là giải pháp cơ bản để phương trình này.
Vì vậy, tôi nghĩ rằng cách tiếp cận sẽ là cố gắng để phù hợp với đại diện thưa thớt của bề mặt (được đưa ra bởi các đường viền 3D của các điểm) bằng cách sử dụng splines tấm mỏng. Tôi tìm thấy this example in scipy.interpolate nơi dữ liệu phân tán (x, y, z định dạng) được nội suy bằng cách sử dụng splines tấm mỏng để có được tọa độ ZI trên lưới đồng nhất (XI, YI).
Hai câu hỏi phát sinh: (1) Nội suy spline mỏng có phải là phương pháp chính xác cho vấn đề tính toán bề mặt từ tập hợp các điểm đường viền 3D không? (2) Nếu vậy, làm thế nào để thực hiện nội suy tấm mỏng trên scipy với một mạng lưới không phải là UNIFORM?
Cảm ơn bạn lần nữa! Miguel
UPDATE: THỰC HIỆN TRÊN MATLAB (nhưng nó không làm việc trên scipy PYTHON)
Tôi đi theo this example sử dụng chức năng tpaps
Matlab và thu được bề mặt tối thiểu được trang bị cho đường viền của tôi trên một mạng lưới thống nhất. Đây là kết quả trong Matlab (trông tuyệt vời!):
Tuy nhiên tôi cần phải thực hiện điều này bằng Python, vì vậy tôi đang sử dụng gói scipy.interpolate.Rbf và thin-plate
chức năng.Dưới đây là mã trong python (XYZ
chứa tọa độ 3D của mỗi điểm trong đường viền):
GRID_POINTS = 25
x_min = XYZ[:,0].min()
x_max = XYZ[:,0].max()
y_min = XYZ[:,1].min()
y_max = XYZ[:,1].max()
xi = np.linspace(x_min, x_max, GRID_POINTS)
yi = np.linspace(y_min, y_max, GRID_POINTS)
XI, YI = np.meshgrid(xi, yi)
from scipy.interpolate import Rbf
rbf = Rbf(XYZ[:,0],XYZ[:,1],XYZ[:,2],function='thin-plate',smooth=0.0)
ZI = rbf(XI,YI)
Tuy nhiên đây là kết quả (khá khác nhau từ đó thu được trong Matlab):
Rõ ràng là kết quả của sciper không tương ứng với một bề mặt tối thiểu.
Là scipy.interpolate.Rbf + tấm mỏng hoạt động như mong đợi, tại sao nó khác với kết quả của Matlab?
Chính xác mối quan hệ giữa các điểm 3d của bạn và đầu ra mong muốn của bạn là gì? Bạn có điểm mà nằm khoảng trên bề mặt tối thiểu, và bạn đang tìm kiếm một mô tả đại số của bề mặt đó? Hoặc làm các điểm mô tả một số loại ranh giới, và bạn đang tìm kiếm bề mặt tối thiểu được xác định bởi ranh giới đó? Bạn nên tạo ra biểu mẫu nào? Nó có thể giúp xem toàn bộ mã MATLAB, để người ta có thể tìm cách để dịch mà thậm chí không hiểu sự giải nghĩa là bề mặt tối thiểu. Https://launchpad.net/cbcpdesys có hữu ích không? – MvG
@MvG: xem thêm chi tiết trong câu hỏi được cập nhật của tôi. (1) Các điểm nằm khoảng trên bề mặt tối thiểu; (2) Các điểm mô tả ranh giới của bề mặt chưa thu được, (3) Lý tưởng nhất là loại bề mặt mà tôi muốn thu được là một biểu diễn lưới tam giác. – CodificandoBits
Hãy thử hỏi trong http://scicomp.stackexchange.com. – lhf