Estou trabalhando em um Roguelike e, para isso, criei um algoritmo de campo de visão (FOV) de rastreamento de raios / vazamento que consiste em plotar as linhas de Bresenham em todos os pontos de um círculo sólido. É livre de artefatos (e razoavelmente eficiente), mas está faltando um requisito importante meu: simetria (se você pode ver um monstro, ele também deve ser capaz de vê-lo).
Aqui está um exemplo do comportamento não simétrico do meu código. Na imagem da esquerda, estou em um canto (blocos vermelhos 'X' = parede). Consigo ver os ladrilhos do canto superior direito. No entanto, se eu mudar para um desses blocos (imagem à direita), não consigo mais ver o bloco de onde vim.
Acho que posso estar atrás de uma forma de campo de visão permissivo , mas apenas porque o artigo de Roguebasin sugeriu que ele permitia simetria. Existem meios alternativos para obter simetria?