Một vài cách tiếp cận khác nhau
Tôi sẽ xem xét một vài biến thể trong yêu cầu cụ thể của bạn, vì bạn đề cập đến hiệu quả và tôi nghi ngờ yêu cầu cụ thể của bạn có thể kém hiệu quả nhất. Tôi cũng sẽ đề xuất các cách cải thiện hiệu quả mà không thay đổi so với phương pháp dự định của bạn, để bạn có thể cân nhắc các phương án.
Làm mờ âm lượng thay vì bề mặt
Nếu bạn muốn số liệu khoảng cách là khoảng cách Euclide 3D thay vì khoảng cách 2D Euclide trong bề mặt, thì bạn có thể thực hiện làm mờ trên lưới 3D thông thường mà hàm vô hướng bạn đã áp dụng. Sau đó, bạn có thể sử dụng kết quả cuối cùng của Sự khác biệt của Gaussian để tính các giá trị vô hướng ở các đỉnh của lưới không đều của bạn. Điều này tránh phải tính đến hình dạng lưới cho phần lớn phép tính.
Lưới 3D có thể có số lượng đỉnh lớn hơn nhiều so với lưới 2D, nhưng tất cả chúng sẽ có khoảng cách đều nhau và độ mờ hạt nhân lớn có thể đạt được bằng cách áp dụng lặp lại độ mờ hạt nhân nhỏ chỉ tính đến 6 lân cận gần nhất, mà sẽ luôn ở một khoảng cách không đổi. Cách tiếp cận này liên quan đến khả năng tính toán nhiều hơn, nhưng việc dễ dàng tăng tốc lưới thông thường có thể thu hút GPU.
Điều này sẽ cho kết quả khác với việc thực hiện làm mờ trên các đỉnh của lưới bằng khoảng cách 3D Euclide. Ví dụ: cách tiếp cận lưới 3D sẽ bị ảnh hưởng bởi các vùng đặc biệt của hàm vô hướng 3D ở gần nhưng không nằm trên lưới. Điều này có thể được mong muốn hoặc không tùy thuộc vào mục đích cụ thể của bạn.
Sử dụng khoảng cách 2D thay vì khoảng cách 3D
Nếu bạn thấy rằng bạn cần số liệu khoảng cách là 2D Euclide trong bề mặt, thì bạn có thể có được xấp xỉ tốt với độ mờ Gaussian hạt nhân lớn hơn bằng cách áp dụng độ mờ Gaussian hạt nhân nhỏ hơn. Nếu không có quá nhiều sự thay đổi về độ dài cạnh trong lưới của bạn, bạn có thể chọn kích thước hạt nhân chỉ cho phép bao gồm các đỉnh một cạnh ở mỗi lần lặp. Điều này cho phép chỉ sử dụng độ dài cạnh đơn để tính kích thước đóng góp của một đỉnh, thay vì tính khoảng cách đa cạnh 2D.
Khoảng cách 3D sử dụng bề mặt không có âm lượng
Nếu bạn cần tính toán chính xác như được mô tả trong câu hỏi của bạn, được tính trong lưới thay vì trong khối lượng xung quanh, nhưng cũng sử dụng khoảng cách Euclide 3D, thì sử dụng hàng xóm gần nhất và một số lần lặp sẽ không hoạt động. Trừ khi lưới gần phẳng, ứng dụng lặp lại của độ mờ lân cận gần nhất sẽ dẫn đến xấp xỉ với trường hợp khoảng cách 2D Euclide, vì các giá trị sẽ chỉ có thể chảy từ đỉnh này sang đỉnh khác, không trực tiếp dọc theo con đường ngắn nhất vì chúng sẽ trong một lần duy nhất. Điều này sẽ cho mức độ lây lan ít hơn mức có thể đạt được bằng một lần vượt qua tính toán khoảng cách 3D đến đỉnh 10 cạnh. (Tôi đã sử dụng 10 cạnh kể từ khi bạn đề cập đến 10 hop trong nhận xét của bạn về câu hỏi.)
Việc thực hiện độ mờ trong một lần chạy sẽ có nghĩa là tính toán khoảng cách Euclide 3D giữa mọi đỉnh và mọi đỉnh khác trong bán kính 10 cạnh. Điều này sẽ tốn kém, nhưng hoàn toàn có thể. Vì bạn đề cập đến hiệu quả, hãy xem xét rằng có một số dự phòng bạn có thể loại bỏ miễn là bạn có đủ bộ nhớ khả dụng.
Hai độ mờ mà bạn tạo ra trước khi lấy Sự khác biệt của Gaussian sẽ sử dụng cùng một khoảng cách 3D cho đến bán kính cạnh của độ mờ hạt nhân nhỏ hơn. Nếu bạn có thể lưu chúng thì bạn chỉ cần tính toán chúng một lần, thay vì một lần cho mỗi lần mờ.
Ngoài ra, mỗi khoảng cách sẽ được sử dụng hai lần mỗi lần làm mờ - một lần theo mỗi hướng vì độ dài từ đỉnh A đến đỉnh B giống như độ dài từ B đến A. Lưu vào bộ nhớ / ghi nhớ những khoảng cách này sẽ tránh tính toán chúng hai lần.
Hiệu ứng từ nhiều góc cạnh tùy ý
Nếu các đường cong bề mặt sao cho một số đỉnh cách xa nhiều cạnh vẫn đủ gần để ảnh hưởng đến nhau trong khoảng cách 3D, thì thay vì xem xét các đỉnh trong một số cạnh nhất định, bạn có thể cần xem xét tất cả các đỉnh trong bán kính 3D nhất định , bất kể bao lâu con đường qua các cạnh. Trong trường hợp này, bạn có thể xem xét ít đỉnh hơn bằng cách sử dụng phân vùng không gian, chọn một phương pháp cụ thể phù hợp với lưới.
Nếu bạn không muốn các phần của bề mặt tiếp cận nhau ảnh hưởng lẫn nhau, thì có lẽ bạn muốn có một thước đo khoảng cách 2D thay vì 3D.
Nếu bạn có một phạm vi rộng có độ dài cạnh khác nhau thì bạn có thể thấy cùng một vấn đề là không thể xác định số lượng cạnh được đặt để di chuyển ngang, ngay cả khi lưới khá phẳng. Một lần nữa, bạn có thể cần xác định khoảng cách 3D thay vì một số cạnh và xem xét tất cả các đỉnh nằm trong bán kính đó.