Ooh! Còn cái này thì sao!
(Trong một cách rất tay Xù, vì tôi không biết liệu ma trận của bạn là hình vuông hoặc bất cứ điều gì ... Tôi sẽ cho rằng đó là.)
Giả sử bạn có một mảng 1000x1000 mà bạn muốn để đặt 47 điểm vào (tôi chọn 47 để nó là một số bất thường mà sẽ không phù hợp "độc đáo").
Bạn lấy ceil (sqrt (47)) ... sẽ cho bạn giá trị (7). Vì vậy, chúng tôi tạo một hình vuông 7x7, điền vào nó với 47 pixel (một số là trống), và tưởng tượng đặt nó ở góc của mảng.
Bây giờ, dịch từng pixel đó sang vị trí mới, dựa vào vị trí của chúng trong mảng nhỏ (7x7) đến mảng lớn (1000x1000). Một phương trình đơn giản nên làm điều này cho bạn ... cho tọa độ X, ví dụ:
xBigArrayIndex = xSmallArrayIndex * 1000/7;
Sau đó, điểm ảnh của bạn sẽ siêu trải ra! Và nó đẹp và nhanh.
Nhược điểm duy nhất là điều này chỉ hoạt động hoàn hảo khi hình vuông của bạn là lý tưởng để bắt đầu ... nếu bạn điền nó ngây thơ (bắt đầu từ trên cùng bên trái, đi qua, vv), bạn sẽ kết thúc với một hơi phân tán lý tưởng một chút ... vì các pixel đã dịch sẽ không hoàn toàn đạt đến phần dưới cùng bên phải của mảng lớn. Nhưng có lẽ điều này là đủ tốt? Và nếu không, có lẽ đó là một tập con nhỏ hơn của vấn đề dễ giải quyết hơn?
Câu hỏi này rất thú vị ở chỗ nó khá đơn giản để khái niệm hóa vấn đề, và rất khó để đưa ra câu trả lời (sẽ kết thúc trong cuộc đời của chúng ta). – Beska
Như tôi đã nói, nó không phải là hoàn hảo. Tôi đang nghĩ đến việc sử dụng "các khối dựng sẵn dựng sẵn", các vùng n x n với các điểm được chọn trước theo p% và bao phủ mảng pixel bằng các giá trị này. – user20493
Yep ... Tôi đã nghĩ về điều đó ... nhưng nó xảy ra với tôi rằng bạn có thể kết thúc với một số hiện vật kỳ lạ vì điều đó. – Beska