Como os programadores gráficos lidam com vértices de renderização que não alteram a imagem?


10

Então, o título é um pouco estranho. Vou dar uma base e depois fazer minha pergunta.

Antecedentes : trabalho como desenvolvedor de aplicativos GIS na Web , mas, nas horas vagas, brinco com a renderização de mapas e a melhoria dos formatos de intercâmbio de dados. Eu trabalho apenas no espaço 2D.

Uma questão interessante que encontrei é que, quando você renderiza um polígono em pequena escala (muito zoom), muitos dos vértices são redundantes. Um caso extremo seria o fato de você ter um polígono com 500.000 vértices que ocupa apenas um único pixel. Se você estiver enviando esses dados para o navegador, faria sentido omitir ~ 499.999 desses vértices. Uma maneira de conseguir isso é renderizando uma imagem em um servidor e enviando-a como PNG: voila, é um ponto. Às vezes, porém, queremos que os dados sejam enviados ao navegador para que possam ser renderizados com SVG (ou canvas ou webgl) para que possam ser interativos.

O problema : acontece que, usando conjuntos de dados geográficos modernos, é muito fácil sobrecarregar as habilidades de renderização do SVG. Em um esforço para lidar com essas limitações, estou tentando descobrir como reduzir visualmente sem perda um conjunto de dados para uma determinada escala e extensão do mapa (e, se necessário, para uma largura e altura conhecidas do pixel do mapa).

Consegui uma grande redução no tamanho dos dados usando o algoritmo Douglas-Peucker e acredito que consegui manter os polígonos fiéis a um pixel. Infelizmente, Douglas-Peucker não preserva a topologia, por isso mudou a forma como as bordas entre polígonos são renderizadas. Não consegui encontrar facilmente outros algoritmos para tentar me adaptar ao objetivo, mas não tenho muitos conhecimentos de CS / algoritmo e talvez não os reconheça se os vi.


11
Pesquise no Google por "Douglas-Peucker Topologicamente Consistente" e você encontrará alguns links para resumos de alguns artigos. Infelizmente, você tem que pagar pelos artigos completos que vi.
Doc Brown

@DocBrown Thank you! Questia até parece ter um teste gratuito.
Canisrufus

Respostas:


3

O que você está procurando é 2d level of detail algorithms.

Há muito documentado sobre isso no google, se você pesquisar esses termos destacados.

Esta pergunta no stackoverflow possui as informações que você está procurando na renderização de nível de detalhe 2D.


+1 para o vocabulário muito pertinente. Parece que estou realmente usando uma abordagem de nível de detalhe, mas preciso de um algoritmo de simplificação de polígono que atenda às minhas necessidades. Encontrei uma visão geral elegante para os 3D. Acredito que realmente elaborei uma estratégia de simplificação adequada, embora ainda não tenha tido tempo de codificá-la.
Canisrufus
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.