Tín dụng cho Sở thích của Calvin để thúc đẩy ý tưởng thách thức của tôi đi đúng hướng.
Hãy xem xét một tập hợp các điểm trong mặt phẳng mà chúng ta sẽ gọi các trang web và liên kết một màu với mỗi trang web. Bây giờ bạn có thể vẽ toàn bộ mặt phẳng bằng cách tô màu từng điểm bằng màu của trang web gần nhất. Đây được gọi là bản đồ Voronoi (hoặc sơ đồ Voronoi ). Về nguyên tắc, bản đồ Voronoi có thể được xác định cho bất kỳ số liệu khoảng cách nào, nhưng chúng ta chỉ cần sử dụng khoảng cách Euclide thông thường r = √(x² + y²)
. ( Lưu ý: Bạn không nhất thiết phải biết cách tính toán và kết xuất một trong số này để cạnh tranh trong thử thách này.)
Dưới đây là một ví dụ với 100 trang web:
Nếu bạn nhìn vào bất kỳ ô nào, thì tất cả các điểm trong ô đó sẽ gần với trang tương ứng hơn bất kỳ trang nào khác.
Nhiệm vụ của bạn là ước tính một hình ảnh nhất định với bản đồ Voronoi như vậy. Bạn đang đưa ra những hình ảnh trong bất kỳ định dạng đồ họa raster thuận tiện, cũng như một số nguyên N . Sau đó, bạn nên tạo tối đa N trang web và màu sắc cho mỗi trang web, sao cho bản đồ Voronoi dựa trên các trang web này giống với hình ảnh đầu vào càng sát càng tốt.
Bạn có thể sử dụng Stack Snippet ở cuối thử thách này để hiển thị bản đồ Voronoi từ đầu ra của bạn hoặc bạn có thể tự kết xuất nó nếu muốn.
Bạn có thể sử dụng các hàm tích hợp hoặc của bên thứ ba để tính toán bản đồ Voronoi từ một tập hợp các trang web (nếu bạn cần).
Đây là một cuộc thi phổ biến, vì vậy câu trả lời có nhiều lượt bình chọn nhất sẽ thắng. Cử tri được khuyến khích đánh giá câu trả lời bằng cách
- hình ảnh gốc và màu sắc của chúng gần đúng như thế nào.
- thuật toán hoạt động tốt như thế nào trên các loại hình ảnh khác nhau.
- thuật toán hoạt động tốt như thế nào đối với N nhỏ .
- thuật toán có thích ứng cụm điểm trong các khu vực của hình ảnh đòi hỏi chi tiết hơn không.
Hình ảnh thử nghiệm
Dưới đây là một vài hình ảnh để kiểm tra thuật toán của bạn (một số nghi phạm thông thường của chúng tôi, một số hình ảnh mới). Nhấp vào hình ảnh cho các phiên bản lớn hơn.
Bãi biển ở hàng đầu tiên được vẽ bởi Olivia Bell , và có sự cho phép của cô.
Nếu bạn muốn có thêm một thử thách, hãy thử Yoshi với nền trắng và có được đường bụng của anh ấy ngay.
Bạn có thể tìm thấy tất cả những hình ảnh thử nghiệm này trong bộ sưu tập imgur này , nơi bạn có thể tải xuống tất cả chúng dưới dạng tệp zip. Album cũng chứa một sơ đồ Voronoi ngẫu nhiên như một thử nghiệm khác. Để tham khảo, đây là dữ liệu tạo ra nó .
Vui lòng bao gồm các sơ đồ ví dụ cho nhiều hình ảnh khác nhau và N , ví dụ 100, 300, 1000, 3000 (cũng như các pastebins cho một số thông số kỹ thuật của ô tương ứng). Bạn có thể sử dụng hoặc bỏ qua các cạnh màu đen giữa các ô khi bạn thấy phù hợp (điều này có thể trông tốt hơn trên một số hình ảnh so với các hình ảnh khác). Không bao gồm các trang mặc dù (ngoại trừ trong một ví dụ riêng biệt có thể nếu bạn muốn giải thích cách vị trí trang web của bạn hoạt động, tất nhiên).
Nếu bạn muốn hiển thị một số lượng lớn kết quả, bạn có thể tạo một bộ sưu tập trên imgur.com , để giữ cho kích thước của các câu trả lời hợp lý. Hoặc, đặt hình thu nhỏ trong bài đăng của bạn và làm cho chúng liên kết đến hình ảnh lớn hơn, như tôi đã làm trong câu trả lời tham khảo của mình . Bạn có thể nhận được các hình thu nhỏ bằng cách thêm s
vào tên tệp trong liên kết imgur.com (ví dụ: I3XrT.png
> I3XrTs.png
). Ngoài ra, hãy thoải mái sử dụng các hình ảnh thử nghiệm khác, nếu bạn tìm thấy một cái gì đó tốt đẹp.
Trình kết xuất
Dán đầu ra của bạn vào Stack Snippet sau để hiển thị kết quả của bạn. Định dạng danh sách chính xác là không liên quan, miễn là mỗi ô được chỉ định bởi 5 số dấu phẩy động theo thứ tự x y r g b
, trong đó x
và y
là tọa độ của trang web của ô và r g b
là các kênh màu đỏ, lục và lam trong phạm vi 0 ≤ r, g, b ≤ 1
.
Đoạn mã cung cấp các tùy chọn để chỉ định độ rộng dòng của các cạnh của ô và liệu các trang web di động có được hiển thị hay không (phần sau chủ yếu cho mục đích gỡ lỗi). Nhưng lưu ý rằng đầu ra chỉ được kết xuất lại khi thông số kỹ thuật của ô thay đổi - vì vậy nếu bạn sửa đổi một số tùy chọn khác, hãy thêm khoảng trắng vào các ô hoặc thứ gì đó.
Các khoản tín dụng lớn cho Raymond Hill để viết thư viện JS Voronoi thực sự tốt đẹp này .