Tôi đang viết một bóng đổ mà thỉnh thoảng làm cho một điểm lấp lánh trên bản đồ 2D. Tôi muốn các khối lấp lánh xuất hiện ngẫu nhiên và phân bố đồng đều trên mặt phẳng (vô hạn), nhưng tôi muốn sự lấp lánh được xác định dựa trên tọa độ X và Y. Tôi đã thử tạo hạt giống từ các tọa độ và tạo một Java Random
từ hạt giống đó, nhưng nỗ lực của tôi cho đến nay đã dẫn đến các mẫu có thể nhận ra. Chức năng này sẽ được gọi thường xuyên (nhiều triệu lần) để hiệu suất là rất quan trọng.Làm thế nào tôi có thể tạo ra một mẫu giả ngẫu nhiên từ X/Y phối hợp xác định?
Lần đầu tiên tôi cố gắng bắt chước triển khai hashCode()
, sử dụng hệ số số nguyên tố để tránh va chạm. Điều này dẫn đến một phát ban có thể nhìn thấy trên bản đồ, nơi một loạt các điểm chia sẻ cùng một hạt giống.
sau đó tôi đã cố gắng để tạo ra một hạt giống bằng cách kết hợp các tọa độ như sau:
long seed = ((long) x << 32) | (long) y;
Random rand = new Random(seed);
Điều này dường như dẫn đến dữ liệu khuôn mẫu là tốt, mặc dù mô hình không phải là rõ ràng. Các tọa độ được chọn xuất hiện trong các đường thẳng, không được phân bố đồng đều.
Tôi đã tránh sử dụng MD5 hoặc các thuật toán băm mật mã khác vì tôi sợ tác động hiệu suất.
nếu bạn đang tạo ra hàng triệu số ngẫu nhiên giả từ một lcm và vẽ trong hình vuông 2 chiều thì bạn có thể thấy 'mẫu' dễ nhận biết, trừ khi bạn sử dụng trình tạo mã hóa mạnh. Tìm k-planes. Bạn probbaly muốn sử dụng một máy phát số giả đồng đẳng phi tuyến. –