Một lấy mẫu Poisson-Đĩa phân phối sẽ cho phép bạn chọn điểm ngẫu nhiên khoảng cách tối thiểu ngoài & thuật toán Bridson của hiệu quả có thể giải quyết vấn đề trong thời gian O (n) - đủ nhanh cho thời gian thực cung cấp đếm sao bạn không nhận được quá lớn.
Thuật toán của Bridson chia vùng đầu ra thành một lưới các ô có kích thước tương ứng với khoảng cách tối thiểu cho phép, sao cho chỉ một điểm có thể xuất hiện trong mỗi ô. Sau đó, khi bạn xem xét thêm một điểm mới, bạn chỉ cần kiểm tra một bộ sưu tập các ô lân cận có hình dạng đĩa đối lập với toàn bộ danh sách các điểm. Ví dụ, hãy xem xét hình ảnh sau đây:
Khi kiểm tra xem dấu chấm màu xanh của ứng viên có quá gần với các chấm hiện có hay không, bạn không cần phải kiểm tra nó so với mọi dấu chấm hiện có. Thay vào đó, bạn có thể giới hạn tìm kiếm trong các dấu chấm trong các ô lân cận (mà bạn có thể tìm thấy nhanh chóng bằng bảng tra cứu). Mike Bostock có một hình ảnh động đẹp hiển thị thuật toán đang diễn ra.
Việc thực hiện tiêu chuẩn chỉ liên quan đến khoảng cách tối thiểu cố định giữa các điểm. Bài viết lấy mẫu Poisson Disk của Herman Tulleken (bao gồm mã nguồn) bao gồm một điều chỉnh cho việc thay đổi khoảng cách tối thiểu ở các phần khác nhau của hình ảnh; về cơ bản giống như một thuật toán hoà sắc . Sử dụng tiếng ồn perlin / tiếng ồn đơn giản như trong đám mây bài viết có thể cho bản đồ sao trông tự nhiên hơn. Ví dụ: tôi đã sử dụng hình ảnh bên trái để tạo bên phải:
Để làm điều này, khi xem xét một điểm ứng cử viên, trước tiên tôi kiểm tra giá trị của hình ảnh đầu vào, nó mang lại giá trị từ 0 đến 1. Sau đó, tôi chia tỷ lệ này đến khoảng cách tối thiểu & tối đa mong muốn giữa các điểm; trong trường hợp này tôi đã chọn 5 & 20 pixel. Vì vậy, khi đặt một điểm trong vùng tối, các ngôi sao của tôi có thể ở gần 5 pixel với nhau & khi đặt các ngôi sao ở vùng sáng, chúng có thể cách nhau tối đa 20 pixel.
Điều đáng chú ý là việc tăng tốc của Bridson không hoạt động chính xác với lấy mẫu khoảng cách thay đổi vì các điểm đầu ra không sử dụng khoảng cách tối thiểu thống nhất. Tuy nhiên, bạn vẫn có thể sử dụng lưới đầu ra để giảm tìm kiếm. Lưới nhỏ hơn dẫn đến việc tìm kiếm hàng xóm gần nhất nhanh hơn với chi phí tăng bộ nhớ cho bảng tra cứu lớn hơn.