Pergunta

Eu tenho um campo escalar implícito definido em 2D, para cada ponto em 2D que pode torná-lo calcular um valor escalar exata, mas é um cálculo um pouco complexo.
Eu gostaria de desenhar uma linha iso dessa superfície, dizem a linha do valor '0'. A função em si é contínua, mas o '0' linha iso pode ter várias instâncias contínuas e não é garantido que todos eles estão conectados.
Cálculo do valor para cada pixel não é uma opção porque isso levaria muito tempo -. Na ordem de alguns segundos e isso precisa ser tão tempo real quanto possível

O que eu estou usando atualmente é uma divisão recursiva de espaço que pode ser pensado como uma espécie de quad-tree. Eu tomo uma amostragem inicial, muito grosseira do espaço e se eu encontrar um quadrado que contém uma transição de positivo para valores negativos, eu recursivamente dividir a 4 quadrados menores e verifica novamente, parando no nível de pixel. A transição positiva-negativa é detectado pela amostragem de um Square nas suas 4 cantos. Este trabalho razoavelmente bem, exceto quando isso não acontece. As iso-linhas que são retirados, por vezes, obter corte porque a detecção de transição falhar por transições que ocorrem de uma pequena área de um bordo e que não atravessam um canto de um quadrado.

Existe uma maneira melhor para fazer iso-line desenho Neste configurações?

Foi útil?

Solução

Eu tive muito sucesso com os algoritmos descritos aqui http://web.archive.org/web/20140718130446/http://members.bellatlantic.net/~vze2vrva/thesis.html que discutir contorno adaptativa (semelhante ao que você descreve), e também alguns outros problemas com o contorno plotagem em geral.

Não há nenhuma maneira geral para garantir a encontrar todos os contornos de uma função, sem olhar para cada pixel. Poderia haver uma muito pequena contorno fechado, em que a região única sobre o tamanho de um pixel em que a função é positivo, numa região em que a função é geralmente negativa. A menos que você provar finamente o suficiente para que você coloque uma amostra dentro da região positiva, não há nenhuma maneira geral de saber que ele está lá.

Se a sua função é suficiente suave, você pode ser capaz de adivinhar onde esses pequenos contornos fechados mentir, porque o módulo da função fica pequeno em uma região em torno deles. A amostragem poderia então ser refinado nestas regiões somente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top