2015-07-25 15 views
7

Tôi đang tạo ra một danh sách các tọa độ trên một hình vuông bằng<random> uniform_real_distribution với khoảng cách tối thiểu giữa các điểm

#include <random> 
using namespace std; 

int main(){ 

random_device rd; 
long int seed = rd(); 
default_random_engine gen(seed); 

double max=10.0, min=-10.0; 
uniform_real_distribution<double> uni_real(min,max); 

double random_x = uni_real(gen); 
double random_y = uni_real(gen); 

return 0; 
} 

tôi muốn đảm bảo rằng có một khoảng cách tối thiểu giữa hai điểm bất kỳ. Đối với việc sử dụng của tôi, điều này phải giữ khi áp dụng các điều kiện biên định kỳ.

  • Giải pháp ưu tiên sẽ được xây dựng trong phương pháp trong thư viện <random>. Có cái gì không?
  • Tốt nhất thứ hai, bất kỳ gói nào khác có chứa cách nhanh để thực hiện kiểm tra (miễn là dễ sử dụng).
  • Trường hợp xấu nhất, tôi có thể viết tập lệnh cơ bản của riêng mình sẽ là O(n^2) vì tôi không quá quan tâm đến hiệu quả ngay bây giờ. Trừ khi, có một số thuật toán dễ thực hiện có thể thực hiện điều này.

Các câu hỏi khác xung quanh nơi giao dịch với điểm thứ ba hoặc với môi trường khác từ <random>.

+0

Bạn có thể đặt điểm vào thùng chứa. Đối với điểm thứ n, kiểm tra khoảng cách giữa các điểm hiện có và nó, và nếu yêu cầu khoảng cách được chọn, hãy thêm nó vào danh sách. Nó không được tối ưu hóa nhưng đó là điểm khởi đầu. – Jepessen

+0

bạn cần tạo bao nhiêu điểm? –

+0

Ngay bây giờ tôi ổn với khoảng 5000 điểm nhiều nhất. Trong khoảnh khắc thứ hai, tôi có lẽ sẽ thích nhiều hơn, theo thứ tự của một triệu. –

Trả lời

2

Khi lấy mẫu như vậy (tương đương với thế hệ vòng tròn không chồng chéo) được thảo luận trên math.stackexchange, xem https://mathematica.stackexchange.com/questions/2594/efficient-way-to-generate-random-points-with-a-predefined-lower-bound-on-their-phttps://mathematica.stackexchange.com/questions/69649/generate-nonoverlapping-random-circles, tôi muốn chỉ ra một giải pháp tiềm năng khác có liên quan đến số ngẫu nhiên. Đối với chuỗi Sobol bán ngẫu nhiên, có một tuyên bố cho biết rằng có khoảng cách dương tối thiểu giữa các điểm có giá trị là 0.5*sqrt(d)/N, trong đó d là thứ nguyên của vấn đề và N là số điểm được lấy mẫu trong hypercube. Giấy từ người đàn ông mình http://www.sciencedirect.com/science/article/pii/S0378475406002382

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