Sự khác biệt giữa các đường cong lấp đầy không gian khác nhau là gì?


14

Các đường cong lấp đầy không gian rất quan trọng trong nhiều ứng dụng đồ họa bởi vì chúng giúp phơi bày địa phương không gian. Chúng ta thường nghe về các thuật toán khác nhau bằng cách sử dụng các đường cong Z, mã Morton, đường cong Hilbert, v.v ... Sự khác biệt giữa một số các đường cong khác nhau này và cách chúng áp dụng cho các ứng dụng khác nhau là gì?



Xem thêm phần 2.1.1.2 của Cơ sở dữ liệu cấu trúc dữ liệu đa chiều và số liệu của Samet .
lhf

Câu trả lời:


13

Sự khác biệt là việc ánh xạ bảo tồn địa phương tốt như thế nào và dễ dàng mã hóa / giải mã các khóa. Bài viết "Phân cụm tuyến tính của các đối tượng có nhiều thuộc tính" của HV Jagadish nói: "Thông qua phân tích đại số và thông qua mô phỏng máy tính, chúng tôi đã chỉ ra rằng trong hầu hết các trường hợp, ánh xạ Hilbert thực hiện tốt hơn hoặc tốt hơn so với ánh xạ thay thế tốt nhất được đề xuất trong văn học ". Mặt khác, z-order đơn giản hơn một chút để sử dụng, ví dụ, so sánh các phương thức khác nhau được liệt kê trong Bit Twiddling Hacks cho z-order và Wikipedia cho Hilbert-order.

Đối với các ứng dụng, tôi nghĩ lợi thế chính trong việc sử dụng các đường cong lấp đầy không gian là chúng ánh xạ các điểm từ không gian chiều cao hơn sang không gian có chiều thấp hơn. Ví dụ, họ có thể truy vấn cửa sổ cho các điểm bằng chỉ mục cơ sở dữ liệu B-cây truyền thống. Mặt khác, một mặt khác, nhược điểm là người ta cần biết trước các giới hạn của đầu vào vì khó có thể "thay đổi kích thước" ánh xạ sau này.

PS: "Đường cong Z" giống như "Mã Morton".

PPS: Ánh xạ bổ sung bao gồm đường cong Peano và đối với các ứng dụng xem thêm Geohash .


9

Những đường cong lấp đầy không gian cho phép giữ địa phương theo nhiều chiều khi bạn "đi bộ" tuyến tính dọc theo đường cong.

Từ những gì tôi đã thấy, Z-Order (còn được gọi là mã Morton) được sử dụng nhiều nhất vì chi phí tính toán không đổi (và rẻ) để truy cập trực tiếp vào bất kỳ điểm nào của đường cong. (Và dễ dàng thực hiện trong phần cứng với hình phạt 0 chu kỳ, vì nó tương ứng với "chỉ chuyển đổi" dây địa chỉ).

Một ví dụ cụ thể về đường cong Z-Order là sự thay đổi kết cấu: về cơ bản là tăng tỷ lệ nhấn bộ nhớ cache cho kết cấu đọc trên GPU. (Xem hình ảnh trong bài viết về Z-Curve https://en.wikipedia.org/wiki/Z-order_curve )

Nếu kết cấu chỉ được lưu trữ tuyến tính, bạn sẽ nhận được lần truy cập bộ đệm tối đa nếu bạn chỉ hiển thị kết cấu dưới dạng hình ảnh 2D, nhưng nếu bạn xoay nó 90 độ trên màn hình, bạn sẽ rơi vào trường hợp xấu nhất (lỗi bộ nhớ cache cho mỗi lần đọc kết cấu) .

Kết quả là, tốt hơn là đánh đổi một chút và hạ thấp kịch bản trường hợp tốt nhất của bạn và có bộ nhớ cache tốt hơn cho hầu hết các mẫu.

Như một lưu ý cá nhân, từ những gì tôi đã thấy, các đường cong khác có thể yêu cầu bước đệ quy cho tính toán của chúng và dẫn đến chi phí lớn hơn Z-Curve với mức tăng tối thiểu về sự gắn kết cục bộ. Vì vậy, tôi chưa từng nghe về những đường cong được sử dụng với mục đích thực tế, ngoại trừ như một chủ đề nghiên cứu về kết xuất toán học hoặc sáng tạo / hài hước.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.