Algoritmo preciso de desenho de linha de subpixel (algoritmo de rasterização)

Eu preciso de um algoritmo que possa ser (um pouco) mais lento que oAlgoritmo de desenho de linha de Bresenham mas tem que ser muito mais exato. Com 'exato', quero dizer: todo pixel tocado deve ser impresso. Não mais, mas também não menos! O que significa que usar uma linha mais grossa ou similar não é uma opção, pois há muitos pixels envolvidos. Também não preciso de uma estrutura gráfica ou similar como eraPerguntou antes, Eu preciso do algoritmo! O aplicativo não está realmente em 'gráficos', está noárea geográfica onde pixels são 'ladrilhos'.

O principal problema para mim é que preciso da precisão do subpixel, o que significa que uma linha pode começar em 0,75 / 0,33 e não apenas em 0/0, como é o caso de valores inteiros. Tentei criar uma solução de trabalho nas últimas horas, mas não consigo fazê-lo funcionar - há muitos casos extremos.

Primeiro, pensei em uma versão anti-alias, como o algoritmo deWu deve fazê-lo, mas imprime muitos pixels (especialmente para pontos de início e fim) e, em certos casos, ainda falta alguns pixels, por exemplo. para linhas muito curtas.

Então tentei fazer Bresenham trabalhar onde substitui o segundo 'se' por 'outro se', como indicadoaqui, e está mais perto, mas ainda não está lá. Então tentei mover o Bresenham da precisão inteira para a flutuada, o que resultou em um loop infinito (quando os valores x, y saltaram sobre a condição de acabamentoif (y1 == y2 && x1 == x2))

Eu poderia usar odesenho de linha ingênuo solução, mas quedelta devo usar? Por exemplo. se eu usar 0,1, ainda perderei alguns pixels e, usando valores menores, provavelmente levará muito tempo (e ainda perderei pixels).

Uma solução funcional em C / Java / ... seria apreciada. Pelo menos, deve funcionar para o primeiro dia, mas uma solução completa seria ainda melhor.

Atualizar: Eu tive a seguinte idéia: usando a rasterização de linha ingênua e você pode calcular 4 candidatos a pixel para cada ponto. Em seguida, verifique esses 4 pixels se a linha realmente os cruzar. Mas não tenho certeza se a interseção de linha / caixa pode ser rápida o suficiente.

questionAnswers(2)

yourAnswerToTheQuestion