Estoy tratando de implementar un algoritmo de línea de visión en una cuadrícula bidimensional. Sé cómo debe funcionar conceptualmente, pero no puedo pensar cómo implementarlo como un algoritmo.¿Cómo encontrar todos los cuadrados de la cuadrícula en una línea?
La idea básica es bastante simple. En pseudocódigo:
function LineOfSight(point1, point2): boolean
squares = GetListOfSquaresOnLine(point1, point2)
for each square in squares
if square.IsOpaque then return false
return true
GetListOfSquaresOnLine
sería (conceptualmente) dibujar una línea recta desde el centro de la cuadrícula en point1 al centro del cuadrado de la cuadrícula en punto2, y devolver una lista de todos los cuadrados que esta línea pasa a través de . Pero esa es la parte que no tengo idea de cómo implementarla. Alguien sabe cómo hacer esto? Delphi o C ejemplos preferidos, pero no requeridos.
Gracias! La línea de supercover es un mejor ajuste que la línea básica de Bresenham. Cambiando esto a la respuesta aceptada. –
Esta imagen tiene cuadrados que _ están_ en la línea, pero no están resaltados. ¿Por qué es esto? --- Editar: ahora entiendo. Aquí hay un enlace que modifica el algoritmo para obtener la supercubierta http://eugen.dedu.free.fr/projects/bresenham/. – byxor