Estou renderizando sprites nas coordenadas exatas de pixels para evitar o efeito de desfoque causado pelo antialiasing (os sprites são pixel-art e ficariam horríveis se filtrados). No entanto, como o movimento dos objetos envolve velocidade variável, gravidade e interações físicas, a trajetória é calculada com precisão de subpixel.
Em velocidades de espaço na tela grandes o suficiente (vΔt maior que 2 ou 3 pixels), isso funciona muito bem. No entanto, quando a velocidade é pequena, um efeito notável da escada pode aparecer, especialmente ao longo das linhas diagonais. Isso não é mais um problema em velocidades de espaço de tela muito lentas (v << 1 pixel por segundo), portanto, estou apenas procurando uma solução para valores de velocidade intermediários.
À esquerda, encontra-se a trajetória plotada para uma grande velocidade, obtida pelo simples arredondamento das coordenadas do objeto. No meio, você pode ver o que acontece quando a velocidade diminui e o efeito da escada de que estou falando. À direita, o lugar da trajetória que eu gostaria de obter.
Estou interessado em idéias de algoritmos para filtrar a trajetória, a fim de minimizar o aliasing, mantendo o comportamento original em velocidades grandes e pequenas. Eu tenho acesso a Δt, posição instantânea e velocidade, além de um número arbitrário de valores anteriores, mas como é uma simulação em tempo real, não conheço valores futuros (embora, se necessário, uma estimativa possa ser extrapolada sob certas suposições) . Observe que, devido à simulação física, mudanças repentinas de direção também podem ocorrer.
velocity.y / velocity.x
por um fator de correção proporcional à velocidade.