Я столкнулся с подобной ситуацией и решил реализовать виртуализацию следующим образом: данные, которые я обрабатывал (точки полилиний), были в реальных координатах и имели гораздо больше деталей, чем можно было отобразить на дисплее.Пользователь также должен иметь возможность увеличивать и видеть больше деталей.
- Определите расстояние между двумя (или тремя) пикселями на дисплее в мировых координатах.это позволяет мне решить, могу ли я удалить точку полилинии, потому что она окажется в том же месте пикселя, что и соседняя точка.
Прокрутка точек:
а.если текущая точка будет в том же месте на дисплее, что и предыдущая точка: пропустите ее.
b.если текущая точка и две предыдущие точки расположены на прямой линии, предыдущая точка не нужна: удалите предыдущую точку, добавьте текущую (и добавьте следующую точку (D), чтобы предотвратить округление медленно изгибающейся кривой впрямая линия).
Используйте собранные точки для рисования ломаной линии
В зависимости от данных это помогло мне уменьшить исходный набор обратнопримерно до 30%, но это полностью зависит от данных.Там нет никаких гарантий;)
Когда пользователь увеличил масштаб, я просто пересчитал, начиная с шага 1.
Я добавил много параметров в алгоритм, чтобы я мог настроить и настроить его, чтобы найти сладкоеместо между производительностью и качеством изображения.Например, я добавил эпсилон, который позволил мне указать, какое расстояние между линией, проходящей через A и C, и точкой B было разрешено, чтобы точка B все еще находилась на линии.
Дайте мне знать, если это поможет.