Có một thuật toán để di chuyển các đỉnh dọc theo một lưới phẳng để tạo ra một diện tích nhiều đỉnh hơn mà không phá hủy hình dạng quá nhiều không?


7

Hiện tại, tôi đang chơi xung quanh với một kỹ thuật địa hình có tên là địa hình Vector-Field như được tạo và sử dụng cho trò chơi Halo Wars. Tôi đã tái tạo thành công kỹ thuật. Tuy nhiên, tôi gặp khó khăn khi cố gắng tìm ra cách điều chỉnh mật độ đỉnh cho phần nhô ra trên địa hình.

Địa ngục Vector vẫn gặp vấn đề tương tự như địa hình bản đồ chiều cao. Bất cứ lúc nào có một đỉnh với một vô hướng thẳng đứng quá khác so với hàng xóm của nó sẽ có sự kéo dài tia cực tím.

Cách mà các địa hình Vector-Field loại bỏ điều này, là bạn có thể kéo các đỉnh xung quanh để tạo cho khu vực có độ phân giải cao hơn bằng cách cho nó mật độ cao hơn mà không thay đổi cấu trúc liên kết.

Đối với cuộc sống của tôi, tôi không thể nghĩ ra cách nào để làm điều này theo cách không phá hoại và theo cách tự động. Tôi muốn có thể giữ hình dạng cuối cùng càng gần với nguồn. Và chỉ kéo theo nhiều đỉnh nếu cần để sửa lỗi này.

Có ai biết bất kỳ thuật toán để giải quyết vấn đề này?


1
Liệu 'liên tục huých tất cả các đỉnh về phía trung tâm của các đỉnh liền kề' sẽ phá hủy hình dạng của bạn quá nhiều? Có lẽ không với một sự mong muốn tổng thể đủ cao?
Tàu

Câu trả lời:


1

Một số loại thuật toán tối ưu hóa nên làm thủ thuật.

Tôi cho rằng đây không phải là một nhiệm vụ quan trọng về thời gian, được thực hiện trong quá trình phát triển hoặc khởi tạo, không phải trong khi chơi trò chơi. Hơn nữa, bạn có biết nếu một phân bố đỉnh nhất định giữ hình dạng cuối cùng gần với nguồn.

Lý tưởng nhất, bạn sẽ có một hàm gán một số cho mỗi cấu hình các đỉnh và ước tính mức độ gần với hình dạng cuối cùng với nguồn. Chúng ta hãy gọi hàm này là bằng khen (FOM). Bạn muốn tối ưu hóa FOM với điều kiện phụ là số lượng đỉnh không đổi.

Tôi có thể tưởng tượng hai phương pháp, một cách tiếp cận dựa trên độ dốc và hướng tiếp cận ngẫu nhiên, Monte-Carlo.

  1. Phương pháp tiếp cận dựa trên độ dốc

Các tọa độ vị trí của từng đỉnh của địa hình Vector-Field là các tham số. Cố gắng tính các đạo hàm của FOM đối với các tham số này. Người ta có thể tính gần đúng đạo hàm bằng số chỉ bằng cách thay đổi vị trí một chút và tính toán các khác biệt tương ứng trong FOM (khác biệt hữu hạn).

Sau đó di chuyển một chút dọc theo hướng gradient này (tức là áp dụng độ dốc lần một bước phù hợp để cập nhật các vị trí). Chọn kích thước bước sao cho FOM là tốt nhất. Một số đỉnh có thể rất gần nhau, có nghĩa là chúng có thể được thay thế bằng số lượng đỉnh ít hơn.

Lặp lại tính toán của gradient tại các vị trí mới và lặp lại chuyển động dọc theo hướng gradient mới. (Xem thêm độ dốc giảm dần .)

Điều này phù hợp với bạn đã gần với giải pháp mong muốn và muốn tinh chỉnh nó. Sự di chuyển của các đỉnh từ / đến các khu vực gần nhau đến các khu vực lân cận cần chúng nên được đưa vào đây.

  1. Phương pháp ngẫu nhiên, Monte-Carlo

Phương pháp 1 chỉ thực hiện tối ưu hóa cục bộ. Tuy nhiên, đối với tối ưu hóa toàn cầu, các thay đổi ngẫu nhiên trong các đỉnh có thể phù hợp hơn. Đối với mỗi lần lặp, tạo ra những thay đổi mạnh mẽ hơn, ngẫu nhiên hơn. Ví dụ, người ta hoàn toàn có thể phân phối lại 10% các đỉnh cho các vị trí ngẫu nhiên khác.

Bí quyết là: chỉ chấp nhận những thay đổi này nếu chúng cải thiện FOM, chỉ chấp nhận chúng với xác suất rất nhỏ nếu chúng làm cho FOM tồi tệ hơn. (Thông thường, người ta sử dụng hàm mũ (-Constant * FOM-thay đổi) làm xác suất chấp nhận (ở đây nên giảm thiểu FOM)).

Sau đó lặp lại điều này trong một thời gian dài theo dõi kết quả trung gian tốt nhất (cấu hình với FOM tốt nhất). Cuối cùng, chọn nó. (Xem thêm phương pháp Monte Carlo .)

Nếu bạn muốn bạn có thể kết hợp cả hai, ví dụ áp dụng phương pháp 1 vào kết quả của phương pháp 2.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.