Làm thế nào để các lập trình viên đồ họa đối phó với các đỉnh hiển thị không thay đổi hình ảnh?


10

Vì vậy, tiêu đề là một chút khó xử. Tôi sẽ đưa ra một số nền tảng, và sau đó đặt câu hỏi của tôi.

Bối cảnh : Tôi làm việc như một web GIS phát triển ứng dụng, nhưng trong thời gian rảnh rỗi của tôi, tôi đã chơi với vẽ bản đồ và cải thiện các định dạng trao đổi dữ liệu. Tôi chỉ làm việc trong không gian 2D.

Một vấn đề thú vị mà tôi gặp phải là khi bạn kết xuất một đa giác ở quy mô nhỏ (thu nhỏ lối ra), nhiều đỉnh là dư thừa. Một trường hợp cực đoan là bạn có một đa giác với 500.000 đỉnh chỉ chiếm một pixel. Nếu bạn đang gửi dữ liệu này tới trình duyệt, sẽ rất có ý nghĩa nếu bỏ qua ~ 499.999 trong số các đỉnh đó. Một cách chúng tôi đạt được đó là bằng cách hiển thị hình ảnh trên máy chủ và gửi nó dưới dạng PNG: voila, đó là một điểm. Tuy nhiên, đôi khi, chúng tôi muốn dữ liệu được gửi tới trình duyệt nơi nó có thể được hiển thị bằng SVG (hoặc canvas hoặc webgl) để có thể tương tác.

Vấn đề : Hóa ra, bằng cách sử dụng các bộ dữ liệu địa lý hiện đại, rất dễ làm quá tải khả năng kết xuất của SVG. Trong nỗ lực đối phó với những hạn chế đó, tôi đang cố gắng tìm ra cách giảm thiểu một cách trực quan một tập dữ liệu cho một tỷ lệ và phạm vi bản đồ nhất định (và, nếu cần, cho chiều rộng và chiều cao pixel bản đồ đã biết).

Tôi đã giảm đáng kể kích thước dữ liệu chỉ bằng thuật toán Douglas-Peucker và tôi tin rằng tôi có thể lấy nó để giữ cho đa giác đúng trong một pixel. Thật không may, Douglas-Peucker không bảo tồn cấu trúc liên kết, vì vậy nó đã thay đổi cách biên giới giữa các đa giác được hiển thị. Tôi không thể dễ dàng tìm thấy các thuật toán khác để thử và thích nghi với mục đích, nhưng tôi không có nhiều nền tảng thuật toán / CS và có thể không nhận ra chúng nếu tôi nhìn thấy chúng.


1
Google cho "Douglas-Peucker liên tục theo cấu trúc liên kết" và bạn sẽ tìm thấy một số liên kết đến tóm tắt của một số bài viết. Thật không may, bạn phải trả tiền cho các bài viết đầy đủ tôi nhìn thấy.
Doc Brown

@DocBrown Cảm ơn bạn! Questia thậm chí dường như có một thử nghiệm miễn phí.
canisrufus

Câu trả lời:


3

Những gì bạn đang tìm kiếm là 2d level of detail algorithms.

Có nhiều tài liệu về điều này trên google nếu bạn tìm kiếm những cụm từ được tô sáng.

Câu hỏi này trên stackoverflow có thông tin bạn đang tìm kiếm về kết xuất Chi tiết 2D.


+1 cho từ vựng rất thích hợp. Có vẻ như tôi thực sự đang sử dụng một cách tiếp cận chi tiết, nhưng cần một thuật toán đơn giản hóa đa giác phù hợp với nhu cầu của tôi. Tìm thấy một cái nhìn tổng quan gọn gàng cho những người 3d. Tôi tin rằng tôi đã thực sự vạch ra một chiến lược đơn giản hóa phù hợp, mặc dù tôi không có thời gian để viết mã.
canisrufus
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.