
En gráficos por computadora , un algoritmo de trazado de líneas es un algoritmo para aproximar un segmento de línea en medios gráficos discretos , como pantallas e impresoras basadas en píxeles . En dichos medios, el trazado de líneas requiere una aproximación (en casos no triviales). Los algoritmos básicos rasterizan las líneas en un solo color. Una mejor representación con múltiples gradaciones de color requiere un proceso avanzado: el suavizado espacial .
En medios continuos, en cambio, no se necesita ningún algoritmo para dibujar una línea. Por ejemplo, los osciloscopios de rayos catódicos utilizan electrónica analógica para dibujar líneas y curvas. Antes de la llegada de las CPU rápidas , estos monitores se utilizaban en aplicaciones avanzadas de CAD/CAM , como el diseño de automóviles, mediante dibujos alámbricos. Estos sistemas solo necesitaban una pequeña lista de vectores (x,y) del ordenador para dibujar inmediatamente una imagen lineal. Para la visualización en una pantalla que solo acepta intensidades de píxeles , era necesario inventar un algoritmo digital.
Algoritmos de dibujo de líneas de un solo color

Los algoritmos de dibujo de líneas de un solo color consisten en dibujar líneas de un único color de primer plano sobre un fondo. Son muy adecuados para su uso con pantallas monocromáticas.
El punto de inicio y el punto final de la línea deseada suelen especificarse mediante coordenadas enteras, de modo que coinciden directamente con los puntos considerados por el algoritmo. Por este motivo, la mayoría de los algoritmos se formulan únicamente para este tipo de puntos de inicio y final.
Métodos sencillos
El método más sencillo para dibujar una línea consiste en calcular directamente las posiciones de los píxeles a partir de una ecuación de línea. Dado un punto de partiday un punto finalLos puntos en la línea cumplen la ecuación., consiendo la pendiente de la recta. La recta se puede dibujar evaluando esta ecuación mediante un bucle simple, como se muestra en el siguiente pseudocódigo :
dx = x2 − x1 dy = y2 − y1 m = dy/dx para x desde x1 hasta x2 hacer y = m × (x − x1) + y1 trazar(x, y)
Aquí, los puntos ya han sido ordenados de manera que.
Este algoritmo es innecesariamente lento porque el bucle implica una multiplicación, que es significativamente más lenta que la suma o la resta en la mayoría de los dispositivos. Se puede lograr un método más rápido observando la diferencia entre dos pasos consecutivos:
Por lo tanto, basta con empezar simplemente en el puntoy luego aumentarporuna vez en cada iteración del bucle. Este algoritmo se conoce como analizador diferencial digital .
Porque redondeoredondear al número entero más cercano es equivalente a redondearPara evitar el redondeo, se puede utilizar una variable de control adicional que se inicializa con el valor 0,5.se agrega a esta variable en cada iteración. Luego, si esta variable supera 1.0,se incrementa en 1 y la variable de control se decrementa en 1. Esto permite que el algoritmo evite el redondeo y solo utilice operaciones con enteros. Sin embargo, para líneas cortas, este bucle más rápido no compensa la costosa división., lo cual sigue siendo necesario al principio.
Este algoritmo funciona perfectamente cuando(es decir, la pendiente es menor o igual a 1), pero si(es decir, pendiente mayor que 1), la línea se vuelve bastante dispersa con muchos huecos, y en el caso límite deSe producirá una excepción de división por cero .
Asuntos
En determinadas situaciones, los algoritmos de dibujo de líneas de un solo color presentan problemas:
Brillo inconsistente
Al dibujar líneas de la misma longitud con diferentes pendientes, se dibuja un número distinto de píxeles. Esto provoca que las líneas más inclinadas tengan menos píxeles que las líneas más planas de la misma longitud, lo que hace que la línea más inclinada parezca más brillante que la plana. Este problema es inevitable en dispositivos monocromáticos.
Recorte
El recorte es una operación que limita la rasterización a un área reducida, generalmente rectangular. Esto se logra desplazando los puntos inicial y final de la línea dada hacia los límites de esta área si se encuentran fuera de ella. Por lo general, esto provoca que las coordenadas de estos puntos dejen de ser números enteros. Si estas coordenadas se redondean, la línea resultante tendrá una pendiente diferente a la prevista. Para evitar este problema, es necesario realizar pruebas adicionales después del recorte.
Suavizado de bordes
El principal problema de los algoritmos de dibujo de líneas monocromáticas es que generan líneas con una apariencia irregular y dentada . En dispositivos capaces de mostrar varios niveles de brillo, este problema se puede evitar mediante el suavizado de bordes (antialiasing) . Para ello, las líneas se suelen visualizar en dos dimensiones, generalmente como un rectángulo con el grosor deseado. Para dibujar estas líneas, es necesario considerar los puntos cercanos a dicho rectángulo.
Algoritmo de Gupta y Sproull
El algoritmo Gupta-Sproull se basa en el algoritmo de líneas de Bresenham , pero añade suavizado de bordes (antialiasing) .
Una variante optimizada del algoritmo de Gupta-Sproull se puede escribir en pseudocódigo de la siguiente manera:
DibujarLínea(x1, x2, y1, y2) { x = x1; y = y1; dx = x2 − x1; dy = y2 − y1; d = 2 * dy − dx; // discriminador // Distancia euclidiana del punto (x,y) a la línea (con signo) D = 0; // Distancia euclidiana entre los puntos (x1, y1) y (x2, y2) longitud = sqrt(dx * dx + dy * dy); seno = dy / longitud; cos = dx / longitud; mientras (x <= x2) { IntensificarPíxeles(x, y − 1, D + cos); IntensificarPíxeles(x, y, D); IntensificarPíxeles(x, y + 1, D − cos); x = x + 1 si (d <= 0) { D = D + sen; d = d + 2 * dy; } demás { D = D + sen − cos; d = d + 2 * (dy − dx); y = y + 1; } } }La función IntensifyPixels(x,y,r) toma una transformación de línea radial y establece la intensidad del píxel (x,y) con el valor de un polinomio cúbico que depende de la distancia r del píxel a la línea.
Optimizaciones
Los algoritmos de trazado de líneas pueden optimizarse mediante métodos aproximados, implementaciones directas en hardware y paralelización . Estas optimizaciones son necesarias al renderizar un gran número de líneas en tiempo real .
Métodos aproximados
Boyer y Bourdin introdujeron un algoritmo de aproximación que colorea los píxeles situados directamente debajo de la línea ideal. [ 1 ] Una línea renderizada de esta manera presenta algunas propiedades especiales que pueden aprovecharse. Por ejemplo, en casos como este, ciertas secciones de la línea son periódicas. Esto da como resultado un algoritmo significativamente más rápido que las variantes precisas, especialmente para líneas largas. El deterioro de la calidad solo es visible en líneas con una pendiente muy baja.
Paralelización
Una forma sencilla de paralelizar la rasterización de líneas monocromáticas consiste en permitir que varios algoritmos de dibujo de líneas dibujen píxeles desplazados a cierta distancia entre sí. [ 2 ] Otro método consiste en dividir la línea en varias secciones de longitud aproximadamente igual, que luego se asignan a diferentes procesadores para su rasterización. El principal problema reside en encontrar los puntos de inicio y fin correctos de estas secciones.
También existen algoritmos para arquitecturas de procesadores masivamente paralelos con miles de procesadores. En estos, cada píxel de una cuadrícula de píxeles se asigna a un único procesador, que luego decide si el píxel dado debe colorearse o no. [ 3 ]
Se han desarrollado jerarquías de memoria especiales para acelerar el acceso a la memoria durante la rasterización. Estas pueden, por ejemplo, dividir la memoria en múltiples celdas, cada una de las cuales renderiza una sección de la línea de forma independiente. [ 4 ] La rasterización con suavizado de bordes también puede ser compatible con hardware dedicado. [ 5 ]
Problemas relacionados
Las líneas no solo pueden ser de 8 conexiones, sino también de 4 conexiones, lo que significa que solo se permiten pasos horizontales y verticales, mientras que los pasos diagonales están prohibidos. Dado un mapa de píxeles cuadrados, esto implica que cada cuadrado que contiene una parte de la línea se colorea. Una generalización de los métodos de dibujo de líneas de 4 conexiones a tres dimensiones se utiliza al trabajar con cuadrículas de vóxeles , por ejemplo, en el trazado de rayos optimizado , donde permite determinar los vóxeles que atraviesa un rayo dado.
Los algoritmos de trazado de líneas distribuyen los pasos diagonales de forma aproximadamente uniforme. Por lo tanto, también pueden utilizarse para distribuir uniformemente puntos con coordenadas enteras en un intervalo dado. [ 6 ] Entre las posibles aplicaciones de este método se incluyen la interpolación lineal o el submuestreo en el procesamiento de señales . Existen también paralelismos con el algoritmo euclidiano , así como con las secuencias de Farey y diversas construcciones matemáticas relacionadas. [ 7 ]
Véase también
Referencias
- ↑ Vincent Boyer, Jean-Jacques Bourdin: Líneas rápidas: un método de tramo a tramo. Computer Graphics Forum 18, 3 (1999): 377–384 ( Archivado el 23 de abril de 2024 en ai.univ-paris8.fr (Error: URL de archivo desconocida) )
- ↑ Robert F. Sproull: Uso de transformaciones de programas para derivar algoritmos de dibujo de líneas. ACM Transactions on Graphics 1, 4 (octubre de 1982): 259–273, ISSN 0730-0301
- ↑ Alex T. Pang: Algoritmos de trazado de líneas para máquinas paralelas. IEEE Computer Graphics and Applications 10, 5 (septiembre de 1990): 54–59
- ↑ Véase, por ejemplo, Pere Marès Martí, Antonio B. Martínez Velasco: Arquitectura de memoria para el trazado de líneas en paralelo basada en un algoritmo no incremental. En: Actas de Euromicro 2000: Vol. 1, 266–273. IEEE Computer Society Press, Los Alamitos 2000, ISBN 0-7695-0780-8
- ↑ Véase, por ejemplo, Robert McNamara ua: Prefiltered Antialiased Lines Using Half-Plane Distance Functions. En HWWS 2000 Proceedings: 77–85. ACM Press, Nueva York 2000, ISBN 1-58113-257-3
- ↑ Chengfu Yao, Jon G. Rokne: Un enfoque de interpolación lineal integral para el diseño de algoritmos incrementales de líneas. Journal of Computational and Applied Mathematics 102, 1 (febrero de 1999): 3–19, ISSN 0377-0427
- ↑ Mitchell A. Harris, Edward M. Reingold: Dibujo lineal, años bisiestos y Euclides. ACM Computing Surveys 36, 1 (marzo de 2004): 68–80, ISSN 0360-0300 ( Archivado el 16 de diciembre de 2006 en emr.cs.iit.edu (Error: URL de archivo desconocida) )
- Fundamentos de gráficos por computadora, 2.ª edición, AK Peters por Peter Shirley
- Algoritmos de gráficos por computadora