{"id":64494,"date":"2025-04-15T21:15:50","date_gmt":"2025-04-16T02:15:50","guid":{"rendered":"https:\/\/niixer.com\/?p=64494"},"modified":"2025-04-17T12:55:37","modified_gmt":"2025-04-17T17:55:37","slug":"algoritmo-de-bresenham","status":"publish","type":"post","link":"https:\/\/niixer.com\/index.php\/2025\/04\/15\/algoritmo-de-bresenham\/","title":{"rendered":"ALGORITMO DE BRESENHAM"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\"><strong>INTRODUCCI\u00d3N<\/strong><\/h2>\n\n\n\n<p>El&nbsp;<strong>algoritmo de Bresenham<\/strong>, desarrollado por<a href=\"https:\/\/www.wikiwand.com\/es\/articles\/Jack_Elton_Bresenham\">&nbsp;<strong>Jack E. Bresenham<\/strong><\/a>&nbsp;en 1962, revolucion\u00f3 los gr\u00e1ficos por computadora al ofrecer una soluci\u00f3n eficiente para el trazado de l\u00edneas rectas en displays pixelados. A diferencia de m\u00e9todos basados en ecuaciones de recta que requieren c\u00e1lculos en punto flotante, este algoritmo utiliza&nbsp;<strong>solo operaciones con enteros y aritm\u00e9tica incremental<\/strong>, lo que lo hace extremadamente r\u00e1pido y apto para hardware con recursos limitados, como los sistemas embebidos o las primeras computadoras gr\u00e1ficas.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\u00bfQu\u00e9 es?<\/strong><\/h2>\n\n\n\n<p>Se basa en calcular de forma incremental el error entre la l\u00ednea ideal y la aproximaci\u00f3n pixelada, eligiendo en cada paso el p\u00edxel m\u00e1s cercano a la trayectoria te\u00f3rica. Su principal ventaja es que utiliza \u00fanicamente aritm\u00e9tica de enteros, lo que lo hace r\u00e1pido y adecuado para hardware de bajo nivel.<\/p>\n\n\n\n<p>Aunque originalmente fue dise\u00f1ado para l\u00edneas con pendiente entre 0 y 1, puede adaptarse f\u00e1cilmente a otras pendientes intercambiando o invirtiendo coordenadas. Adem\u00e1s, este algoritmo puede extenderse para rasterizar circunferencias y curvas. En t\u00e9rminos simples, funciona como si se dibujara una l\u00ednea sobre una hoja cuadriculada, decidiendo qu\u00e9 casillas pintar para lograr que la l\u00ednea parezca lo m\u00e1s recta posible, sin usar n\u00fameros decimales.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"519\" height=\"334\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/04\/25-3.png\" alt=\"\" class=\"wp-image-64500\" style=\"width:404px;height:auto\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/04\/25-3.png 519w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/04\/25-3-300x193.png 300w\" sizes=\"auto, (max-width: 519px) 100vw, 519px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>CARACTER\u00cdSTICAS<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Eficiencia computacional: <\/strong>Usa solo c\u00e1lculos enteros (no requiere punto flotante). Minimiza operaciones costosas (solo sumas y restas).<\/li>\n\n\n\n<li><strong>Precisi\u00f3n:<\/strong>Genera l\u00edneas sin aliasing (sin escalones visibles) en pendientes suaves. Selecciona el p\u00edxel m\u00e1s cercano al trazo te\u00f3rico de la l\u00ednea.<\/li>\n\n\n\n<li><strong>Versatilidad:<\/strong>Funciona para todas las pendientes (positivas, negativas, &gt;1 o &lt;1). Puede adaptarse para dibujar c\u00edrculos y otras curvas (versi\u00f3n extendida).<\/li>\n\n\n\n<li><strong>Algoritmo incremental: <\/strong>Decide el siguiente p\u00edxel bas\u00e1ndose en el error acumulado (variable de decisi\u00f3n).<\/li>\n\n\n\n<li><strong>Adaptabilidad:<\/strong> Puede extenderse para dibujar circunferencias y otras curvas.<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>APLICACIONES<\/strong><\/h2>\n\n\n\n<p>La principal aplicaci\u00f3n del algoritmo de l\u00ednea de Bresenham es el dibujo de l\u00edneas en una pantalla digital o lienzo . Su eficiencia lo hace ideal para la renderizaci\u00f3n en tiempo real en aplicaciones como dise\u00f1o asistido por computadora (CAD), videojuegos y simulaciones por computadora.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>&nbsp;Dibujo de l\u00edneas en pantallas y software gr\u00e1fico<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Se utiliza para trazar l\u00edneas en lienzos digitales, como en herramientas de dibujo (Paint, Photoshop) y sistemas operativos (Windows, Linux) al dibujar ventanas, \u00edconos o figuras. Su precisi\u00f3n y bajo consumo lo hacen ideal para estas tareas.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Videojuegos, Pixel Art y gr\u00e1ficos en tiempo real<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Ideal para motores gr\u00e1ficos 2D, especialmente en estilo pixel-art. Se usa para dibujar contornos, personajes y mapas. Gracias a su eficiencia, fue esencial en videojuegos cl\u00e1sicos y sigue siendo \u00fatil en dispositivos con recursos limitados.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Dise\u00f1o Asistido por Computador (CAD) e industria<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Permite representar l\u00edneas rectas de manera r\u00e1pida y precisa en planos t\u00e9cnicos y modelos industriales. Es especialmente \u00fatil en hardware con baja capacidad de procesamiento gr\u00e1fico.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Rasterizaci\u00f3n y procesamiento de im\u00e1genes<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Determina qu\u00e9 p\u00edxeles activar en una l\u00ednea, logrando visuales suaves. Tambi\u00e9n se aplica en algoritmos de rasterizaci\u00f3n para contornos, regiones de inter\u00e9s o rutas dentro de im\u00e1genes digitales.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Recorte de l\u00edneas (Clipping)<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Permite limitar las l\u00edneas al \u00e1rea visible de la pantalla, evitando c\u00e1lculos innecesarios y mejorando el rendimiento en gr\u00e1ficos en tiempo real o procesamiento de escenas complejas.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Rob\u00f3tica y navegaci\u00f3n<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Usado en sistemas como SLAM para trazar l\u00edneas de visi\u00f3n o caminos posibles entre dos puntos. Ayuda a los robots a planear rutas y entender su entorno a trav\u00e9s de mapas de ocupaci\u00f3n.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"301\" height=\"168\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/04\/image-428.png\" alt=\"\" class=\"wp-image-64521\" style=\"width:412px;height:auto\"\/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>FUNDAMENTO MATEM\u00c1TICO<\/strong><\/h2>\n\n\n\n<p>El\u00a0<strong>algoritmo de Bresenham<\/strong>\u00a0selecciona, empleando incrementos, el\u00a0<a href=\"https:\/\/www.glosarioit.com\/P%C3%ADxel\">p\u00edxel<\/a>\u00a0que m\u00e1s cerca se encuentre de la posici\u00f3n real del punto en la recta. Para esto se debe definir el punto de inicio y el final para poder aplicar las formulas que definen el comportamiento de los pixeles. Una vez que se tienen los puntos se requieren 3 diferentes variables, las cuales son \u00a0\u0394x, \u00a0\u0394y y P, que determinan la direcci\u00f3n que toma la linea.<\/p>\n\n\n\n<p><strong>\u0394x, \u00a0\u0394y <\/strong>Representaci\u00f3n entre diferencias de coordenadas. Determina la pendiente de la recta<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"128\" height=\"26\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/04\/image-435.png\" alt=\"\" class=\"wp-image-64549\"\/><\/figure>\n\n\n\n<p><strong>P = <\/strong>Es un par\u00e1metro que dermina la direcci\u00f3n de la linea.<\/p>\n\n\n\n<p>Para determinar la direcci\u00f3n de la recta, sea arriba, abajo, derecha o izquierda<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"541\" height=\"242\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/04\/image-436.png\" alt=\"\" class=\"wp-image-64550\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/04\/image-436.png 541w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/04\/image-436-300x134.png 300w\" sizes=\"auto, (max-width: 541px) 100vw, 541px\" \/><\/figure>\n\n\n\n<p>Una vez definida la direcci\u00f3n o que va tomar la recta, ahora se debe saber cual ser\u00e1 el pixel que deber\u00e1 iniciarse para poder trazar la linea. Para esto me define la variable de P y se tiene en cuenta los siguientes par\u00e1metros para cada iteraci\u00f3n de P.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"389\" height=\"77\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/04\/image-437.png\" alt=\"\" class=\"wp-image-64551\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/04\/image-437.png 389w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/04\/image-437-300x59.png 300w\" sizes=\"auto, (max-width: 389px) 100vw, 389px\" \/><\/figure>\n\n\n\n<p>Cuando se realiza una iteraci\u00f3n se actualiza el valor de P y se va definiendo pixel por pixel la linea. En la siguiente tabla se muestra un ejemplo de cada iteraci\u00f3n que realiza el algoritmo desde la coordenada (3,2) hasta la coordenada (15,5).<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"544\" height=\"231\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/04\/image-438.png\" alt=\"\" class=\"wp-image-64552\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/04\/image-438.png 544w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/04\/image-438-300x127.png 300w\" sizes=\"auto, (max-width: 544px) 100vw, 544px\" \/><\/figure>\n\n\n\n<p>En la tabla se realizan solo 6 iteraciones llegando hasta la coordenada (9,4), siguiendo la l\u00f3gica del algoritmo se llega hasta la coordenada deseada como se muestra en la siguiente grafica que plantea una linea recta con todos los pixeles que deben encenderse para trazar esta linea.<\/p>\n\n\n\n<p> <\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"549\" height=\"348\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/04\/image-439.png\" alt=\"\" class=\"wp-image-64553\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/04\/image-439.png 549w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/04\/image-439-300x190.png 300w\" sizes=\"auto, (max-width: 549px) 100vw, 549px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>C\u00f3digo Interactivo<\/strong><\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">import tkinter as tk<br>from tkinter import ttk<br>import time<br><br>class BresenhamVisualizer:<br>    def __init__(self, root):<br>        self.root = root<br>        self.root.title(\"Algoritmo de Bresenham - Visualizaci\u00f3n\")<br>        <br>        # Configuraci\u00f3n<br>        self.cell_size = 15<br>        self.grid_size = 20<br>        self.delay = 0.5  # segundos<br>        <br>        # Interfaz<br>        self.setup_ui()<br>        <br>        # Estado<br>        self.line_points = []<br>        self.is_running = False<br>        <br>    def setup_ui(self):<br>        # Canvas para dibujar<br>        self.canvas = tk.Canvas(self.root, <br>                               width=self.grid_size*self.cell_size, <br>                               height=self.grid_size*self.cell_size, <br>                               bg=\"white\")<br>        self.canvas.pack(pady=10)<br>        <br>        # Controles<br>        control_frame = tk.Frame(self.root)<br>        control_frame.pack(pady=10)<br>        <br>        self.speed_slider = ttk.Scale(control_frame, from_=0.1, to=2, value=self.delay,<br>                                    orient=\"horizontal\", <br>                                    command=lambda v: setattr(self, 'delay', float(v)))<br>        self.speed_slider.pack(side=\"left\", padx=5)<br>        <br>        ttk.Button(control_frame, text=\"Dibujar l\u00ednea\", command=self.start_drawing).pack(side=\"left\", padx=5)<br>        ttk.Button(control_frame, text=\"Reiniciar\", command=self.reset).pack(side=\"left\", padx=5)<br>        <br>        # Info<br>        self.info_label = tk.Label(self.root, text=\"Presiona 'Dibujar l\u00ednea' para comenzar\", fg=\"blue\")<br>        self.info_label.pack(pady=5)<br>        <br>        # Dibujar cuadr\u00edcula<br>        self.draw_grid()<br>        <br>        # Configurar eventos<br>        self.canvas.bind(\"&lt;Button-1&gt;\", self.set_point)<br>        <br>    def draw_grid(self):<br>        for x in range(0, self.grid_size*self.cell_size, self.cell_size):<br>            self.canvas.create_line(x, 0, x, self.grid_size*self.cell_size, fill=\"#eee\")<br>        for y in range(0, self.grid_size*self.cell_size, self.cell_size):<br>            self.canvas.create_line(0, y, self.grid_size*self.cell_size, y, fill=\"#eee\")<br>            <br>        # Etiquetas de ejes<br>        for i in range(self.grid_size):<br>            self.canvas.create_text(i*self.cell_size + self.cell_size\/\/2, <br>                                   self.grid_size*self.cell_size - 10, <br>                                   text=str(i), fill=\"gray\")<br>            self.canvas.create_text(10, i*self.cell_size + self.cell_size\/\/2, <br>                                   text=str(i), fill=\"gray\")<br>    <br>    def set_point(self, event):<br>        if len(self.line_points) &gt;= 2:<br>            self.reset()<br>            <br>        x = event.x \/\/ self.cell_size<br>        y = event.y \/\/ self.cell_size<br>        <br>        # Dibujar punto<br>        x1 = x * self.cell_size<br>        y1 = y * self.cell_size<br>        x2 = x1 + self.cell_size<br>        y2 = y1 + self.cell_size<br>        <br>        self.canvas.create_rectangle(x1, y1, x2, y2, fill=\"green\", outline=\"\")<br>        <br>        self.line_points.append((x, y))<br>        <br>        if len(self.line_points) == 1:<br>            self.info_label.config(text=f\"Punto inicial: ({x}, {y}). Selecciona el punto final.\")<br>        elif len(self.line_points) == 2:<br>            self.info_label.config(text=f\"Puntos: {self.line_points[0]} a {self.line_points[1]}. Presiona 'Dibujar l\u00ednea'\")<br>    <br>    def start_drawing(self):<br>        if len(self.line_points) == 2 and not self.is_running:<br>            self.is_running = True<br>            self.bresenham_line(*self.line_points[0], *self.line_points[1], self.draw_pixel)<br>    <br>    def step_by_step(self):<br>        if len(self.line_points) == 2 and not self.is_running:<br>            self.is_running = True<br>            self.bresenham_line(*self.line_points[0], *self.line_points[1], self.draw_pixel, step_by_step=True)<br>    <br>    def reset(self):<br>        self.is_running = False<br>        self.line_points = []<br>        self.canvas.delete(\"all\")<br>        self.draw_grid()<br>        self.info_label.config(text=\"Selecciona dos puntos para dibujar una l\u00ednea\")<br>    <br>    def draw_pixel(self, x, y, is_current=False):<br>        x1 = x * self.cell_size<br>        y1 = y * self.cell_size<br>        x2 = x1 + self.cell_size<br>        y2 = y1 + self.cell_size<br>        <br>        color = \"red\" if is_current else \"blue\"<br>        <br>        self.canvas.create_rectangle(x1, y1, x2, y2, fill=color, outline=\"\")<br>        self.canvas.create_text(x1 + self.cell_size\/\/2, y1 + self.cell_size\/\/2, <br>                               text=f\"({x},{y})\", fill=\"white\")<br>        <br>        self.root.update()<br>    <br>    def bresenham_line(self, x1, y1, x2, y2, draw_pixel, step_by_step=False):<br>        dx = abs(x2 - x1)<br>        dy = abs(y2 - y1)<br>        steep = dy &gt; dx<br><br>        if steep:<br>            x1, y1 = y1, x1<br>            x2, y2 = y2, x2<br><br>        if x1 &gt; x2:<br>            x1, x2 = x2, x1<br>            y1, y2 = y2, y1<br><br>        dx = abs(x2 - x1)<br>        dy = abs(y2 - y1)<br>        error = dx \/\/ 2<br>        ystep = 1 if y1 &lt; y2 else -1<br>        y = y1<br><br>        for x in range(x1, x2 + 1):<br>            coord = (y, x) if steep else (x, y)<br>            draw_pixel(*coord, is_current=True)<br>            <br>            # Mostrar informaci\u00f3n<br>            current_error = error<br>            self.info_label.config(<br>                text=f\"Punto actual: {coord}\\n\"<br>                     f\"Error: {current_error}\\n\"<br>                     f\"dx: {dx}, dy: {dy}\\n\"<br>                     f\"Incremento Y cuando error &lt; 0\"<br>            )<br>            <br>            if step_by_step:<br>                input(\"Presiona Enter para continuar...\")<br>            else:<br>                time.sleep(self.delay)<br>            <br>            # Quitar el resaltado<br>            draw_pixel(*coord, is_current=False)<br>            <br>            error -= dy<br>            if error &lt; 0:<br>                y += ystep<br>                error += dx<br>        <br>        self.is_running = False<br>        self.info_label.config(text=f\"L\u00ednea completada de {self.line_points[0]} a {self.line_points[1]}\")<br><br>if __name__ == \"__main__\":<br>    root = tk.Tk()<br>    app = BresenhamVisualizer(root)<br>    root.mainloop()<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>VISUALIZACI\u00d3N DEL C\u00d3DIGO<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"628\" height=\"682\" src=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/04\/26-3.png\" alt=\"\" class=\"wp-image-64504\" style=\"width:497px;height:auto\" srcset=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/04\/26-3.png 628w, https:\/\/niixer.com\/wp-content\/uploads\/2025\/04\/26-3-276x300.png 276w\" sizes=\"auto, (max-width: 628px) 100vw, 628px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>CONCLUSIONES<\/strong><\/h2>\n\n\n\n<p>El algoritmo de Bresenham marc\u00f3 un hito en los gr\u00e1ficos por computadora al permitir el trazado eficiente de l\u00edneas en pantallas pixeladas. Su principal fortaleza radica en que no utiliza operaciones en punto flotante, sino que trabaja \u00fanicamente con enteros, lo cual era ideal para los equipos con recursos limitados de la \u00e9poca y a\u00fan es \u00fatil en dispositivos de bajo rendimiento.<\/p>\n\n\n\n<p>Este algoritmo calcula cada punto de la l\u00ednea de forma incremental, bas\u00e1ndose en el anterior, lo que reduce significativamente los c\u00e1lculos necesarios. En lugar de aplicar la ecuaci\u00f3n de la l\u00ednea en cada paso, usa un valor de error acumulado que le indica cu\u00e1ndo cambiar de fila o columna, logrando as\u00ed l\u00edneas m\u00e1s suaves y precisas.<\/p>\n\n\n\n<p>Su velocidad lo hace indispensable en videojuegos retro, sistemas de navegaci\u00f3n embebidos y herramientas CAD, donde se prioriza el trazado r\u00e1pido de primitivas gr\u00e1ficas sin dependencia de aceleraci\u00f3n por hardware (como GPUs modernas).<\/p>\n\n\n\n<p>El algoritmo de Bresenham sent\u00f3 un precedente en la implementaci\u00f3n de funciones b\u00e1sicas de rasterizaci\u00f3n en bibliotecas gr\u00e1ficas tempranas (como OpenGL y DirectX). Su l\u00f3gica influy\u00f3 en la optimizaci\u00f3n de operaciones de dibujo primitivo, incluso en APIs modernas, donde t\u00e9cnicas derivadas de su enfoque se usan en etapas iniciales del pipeline gr\u00e1fico o en contextos de bajo nivel (ej: controladores de GPU o firmware de pantallas).<\/p>\n\n\n\n<p>Adem\u00e1s, ha sido adaptado para dibujar otras figuras como c\u00edrculos y elipses, conservando su eficiencia y calidad visual. A pesar del paso del tiempo, el algoritmo de Bresenham sigue vigente y se emplea en diversas \u00e1reas como videojuegos y software de dise\u00f1o, gracias a su equilibrio entre simplicidad, rapidez y buenos resultados visuales.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>CR\u00c9DITOS<\/strong><\/h2>\n\n\n\n<p><strong>Autores:<\/strong>&nbsp;<a href=\"https:\/\/niixer.com\/?s=Arlyn+Jessenia+Cort%C3%A9s+Garc%C3%ADa#google_vignette\">Arlyn Jessenia Cort\u00e9s Garc\u00eda<\/a>, <a href=\"https:\/\/niixer.com\/?s=Yerli+Tatiana+Urrea+Naranjo\">Yerli Tatiana Urrea Naranjo<\/a>, <a href=\"https:\/\/niixer.com\/?s=Nicolas+Araujo+Rodriguez\">Nicol\u00e1s Ara\u00fajo Rodr\u00edguez<\/a><\/p>\n\n\n\n<p><strong>Editor:<\/strong>&nbsp;<a href=\"https:\/\/niixer.com\/?s=Carlos+Ivan+Pinz%C3%B3n+Romero\">Carlos Iv\u00e1n Pinz\u00f3n Romero<\/a><\/p>\n\n\n\n<p><strong>C\u00f3digo:<\/strong>&nbsp;<a href=\"https:\/\/niixer.com\/?s=UCCGG1-9\" target=\"_blank\" rel=\"noreferrer noopener\">UCCGG1-9<\/a><\/p>\n\n\n\n<p><strong>Universidad Central:<\/strong>&nbsp;<a href=\"https:\/\/niixer.com\/?s=Universidad+Central\" target=\"_blank\" rel=\"noreferrer noopener\">Universidad Central<\/a><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>BIBLIOGRAF\u00cdAS<\/strong><\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">2.3.3 Algoritmo de punto medio - Bresenham. (s. f.). http:\/\/cidecame.uaeh.edu.mx\/lcc\/mapa\/PROYECTO\/libro23\/233_algoritmo_de_punto_medio__bresenham.html<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">Adlab. (2016, 16 febrero). Algoritmo de Bresenham. Grafica2016a. https:\/\/grafica2016a.wordpress.com\/2016\/02\/16\/algoritmo-de-bresenham\/<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">Branch, J. W., S\u00e1nchez, G., &amp; Atencio, P. (2012). Remuestreo estructurado de contornos de huecos en superficies 3D de objetos de forma libre utilizando Bresenham [PDF]. Universidad Nacional de Colombia. https:\/\/repositorio.unal.edu.co\/bitstream\/handle\/unal\/40612\/29595-106280-1-PB.pdf?sequence=2&amp;isAllowed=y<br><\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">Bresenham\u2019s Line Algorithm  in Computer Graphics. (s. f.). https:\/\/bcalabs.org\/subject\/bresenhams-line-algorithm-in-computer-graphics<br><\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">Bresenham Line Algorithm: A Powerful Tool for Efficient Line Drawing | Saturn Cloud Blog. (2023, 3 noviembre). https:\/\/saturncloud-io.translate.goog\/blog\/bresenham-line-algorithm-a-powerful-tool-for-efficient-line-drawing\/?_x_tr_sl=en&amp;_x_tr_tl=es&amp;_x_tr_hl=es&amp;_x_tr_pto=rq#:~:text=Applications%20of%20the%20Bresenham%20Line%20Algorithm&amp;text=The%20primary%20application%20of%20the,video%20games%2C%20and%20computer%20simulations.<br><\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">\u00bfC\u00f3mo se puede implementar el algoritmo de l\u00edneas de Bresenham para gr\u00e1ficos 2D? (2024, 21 febrero). www.linkedin.com. https:\/\/es.linkedin.com\/advice\/3\/how-can-you-implement-bresenham-line-algorithm-hfhyc?lang=es&amp;lang=es<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">Edwin Duque. (2019, 2 febrero). Algoritmo para trazado de linea por computador Bresenham [V\u00eddeo]. YouTube. https:\/\/www.youtube.com\/watch?v=2_BCYD_FwII<br><\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">Oguzhandelibas. (s. f.). GitHub - oguzhandelibas\/LineDrawing: Drawing Lines in Unity with the Bresenham Line Algorithm. GitHub. https:\/\/github.com\/oguzhandelibas\/LineDrawing<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">Segovia, J. L. C. (2021). Algoritmo de Bresenham. Unsaac. https:\/\/www.academia.edu\/50823751\/Algoritmo_de_Bresenham<\/pre>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>INTRODUCCI\u00d3N El&nbsp;algoritmo de Bresenham, desarrollado por&nbsp;Jack E. Bresenham&nbsp;en 1962, revolucion\u00f3 los gr\u00e1ficos por computadora al ofrecer una soluci\u00f3n eficiente para el trazado de l\u00edneas rectas en displays pixelados. A diferencia de m\u00e9todos basados en ecuaciones de recta que requieren c\u00e1lculos en punto flotante, este algoritmo utiliza&nbsp;solo operaciones con enteros ySeguir Leyendo<\/p>\n","protected":false},"author":1873,"featured_media":64518,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"colormag_page_container_layout":"default_layout","colormag_page_sidebar_layout":"default_layout","footnotes":""},"categories":[1309,30],"tags":[1307,1369,1757],"class_list":["post-64494","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-computacion-grafica","category-niixer","tag-algoritmo-de-bresenham","tag-algoritmo-de-rasterizacion","tag-computacion-grafica-2"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>algoritmo-de-bresenham<\/title>\n<meta name=\"description\" content=\"Explicaci\u00f3n sobre el Algoritmo de bresenham y sus aplicaci\u00f3n en el mundo de la computaci\u00f3n gr\u00e1fica\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/niixer.com\/index.php\/2025\/04\/15\/algoritmo-de-bresenham\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"algoritmo-de-bresenham\" \/>\n<meta property=\"og:description\" content=\"Explicaci\u00f3n sobre el Algoritmo de bresenham y sus aplicaci\u00f3n en el mundo de la computaci\u00f3n gr\u00e1fica\" \/>\n<meta property=\"og:url\" content=\"https:\/\/niixer.com\/index.php\/2025\/04\/15\/algoritmo-de-bresenham\/\" \/>\n<meta property=\"og:site_name\" content=\"Portal de noticias de tecnolog\u00eda, Realidad Virtual, Aumentada y Mixta, Videojuegos\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/niixer\/\" \/>\n<meta property=\"article:published_time\" content=\"2025-04-16T02:15:50+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-04-17T17:55:37+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/niixer.com\/wp-content\/uploads\/2025\/04\/27-3.png\" \/>\n\t<meta property=\"og:image:width\" content=\"531\" \/>\n\t<meta property=\"og:image:height\" content=\"246\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"acortesg8\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"acortesg8\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutos\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"algoritmo-de-bresenham","description":"Explicaci\u00f3n sobre el Algoritmo de bresenham y sus aplicaci\u00f3n en el mundo de la computaci\u00f3n gr\u00e1fica","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/niixer.com\/index.php\/2025\/04\/15\/algoritmo-de-bresenham\/","og_locale":"es_ES","og_type":"article","og_title":"algoritmo-de-bresenham","og_description":"Explicaci\u00f3n sobre el Algoritmo de bresenham y sus aplicaci\u00f3n en el mundo de la computaci\u00f3n gr\u00e1fica","og_url":"https:\/\/niixer.com\/index.php\/2025\/04\/15\/algoritmo-de-bresenham\/","og_site_name":"Portal de noticias de tecnolog\u00eda, Realidad Virtual, Aumentada y Mixta, Videojuegos","article_publisher":"https:\/\/www.facebook.com\/niixer\/","article_published_time":"2025-04-16T02:15:50+00:00","article_modified_time":"2025-04-17T17:55:37+00:00","og_image":[{"width":531,"height":246,"url":"https:\/\/niixer.com\/wp-content\/uploads\/2025\/04\/27-3.png","type":"image\/png"}],"author":"acortesg8","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"acortesg8","Tiempo de lectura":"7 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/niixer.com\/index.php\/2025\/04\/15\/algoritmo-de-bresenham\/#article","isPartOf":{"@id":"https:\/\/niixer.com\/index.php\/2025\/04\/15\/algoritmo-de-bresenham\/"},"author":{"name":"acortesg8","@id":"https:\/\/niixer.com\/#\/schema\/person\/f70574cd1fa014c02e1a70805f6c9613"},"headline":"ALGORITMO DE BRESENHAM","datePublished":"2025-04-16T02:15:50+00:00","dateModified":"2025-04-17T17:55:37+00:00","mainEntityOfPage":{"@id":"https:\/\/niixer.com\/index.php\/2025\/04\/15\/algoritmo-de-bresenham\/"},"wordCount":1229,"publisher":{"@id":"https:\/\/niixer.com\/#organization"},"image":{"@id":"https:\/\/niixer.com\/index.php\/2025\/04\/15\/algoritmo-de-bresenham\/#primaryimage"},"thumbnailUrl":"https:\/\/niixer.com\/wp-content\/uploads\/2025\/04\/27-3.png","keywords":["Algoritmo de Bresenham","Algoritmo de rasterizaci\u00f3n","Computacion Grafica"],"articleSection":["Computaci\u00f3n Gr\u00e1fica","Niixer"],"inLanguage":"es"},{"@type":"WebPage","@id":"https:\/\/niixer.com\/index.php\/2025\/04\/15\/algoritmo-de-bresenham\/","url":"https:\/\/niixer.com\/index.php\/2025\/04\/15\/algoritmo-de-bresenham\/","name":"algoritmo-de-bresenham","isPartOf":{"@id":"https:\/\/niixer.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/niixer.com\/index.php\/2025\/04\/15\/algoritmo-de-bresenham\/#primaryimage"},"image":{"@id":"https:\/\/niixer.com\/index.php\/2025\/04\/15\/algoritmo-de-bresenham\/#primaryimage"},"thumbnailUrl":"https:\/\/niixer.com\/wp-content\/uploads\/2025\/04\/27-3.png","datePublished":"2025-04-16T02:15:50+00:00","dateModified":"2025-04-17T17:55:37+00:00","description":"Explicaci\u00f3n sobre el Algoritmo de bresenham y sus aplicaci\u00f3n en el mundo de la computaci\u00f3n gr\u00e1fica","breadcrumb":{"@id":"https:\/\/niixer.com\/index.php\/2025\/04\/15\/algoritmo-de-bresenham\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/niixer.com\/index.php\/2025\/04\/15\/algoritmo-de-bresenham\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/niixer.com\/index.php\/2025\/04\/15\/algoritmo-de-bresenham\/#primaryimage","url":"https:\/\/niixer.com\/wp-content\/uploads\/2025\/04\/27-3.png","contentUrl":"https:\/\/niixer.com\/wp-content\/uploads\/2025\/04\/27-3.png","width":531,"height":246},{"@type":"BreadcrumbList","@id":"https:\/\/niixer.com\/index.php\/2025\/04\/15\/algoritmo-de-bresenham\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/niixer.com\/"},{"@type":"ListItem","position":2,"name":"ALGORITMO DE BRESENHAM"}]},{"@type":"WebSite","@id":"https:\/\/niixer.com\/#website","url":"https:\/\/niixer.com\/","name":"Portal de noticias de tecnolog\u00eda, ciencia, Android, iOS, Realidad Virtual, Aumentada y Mixta, Videojuegos, computadores, todo lo mas reciente en tecnolog\u00eda","description":"Portal de noticias de tecnolog\u00eda","publisher":{"@id":"https:\/\/niixer.com\/#organization"},"alternateName":"Niixer","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/niixer.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/niixer.com\/#organization","name":"Niixer","alternateName":"Niixer.com","url":"https:\/\/niixer.com\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/niixer.com\/#\/schema\/logo\/image\/","url":"https:\/\/niixer.com\/wp-content\/uploads\/2022\/08\/logo-niixer-sin-fondo-1.png","contentUrl":"https:\/\/niixer.com\/wp-content\/uploads\/2022\/08\/logo-niixer-sin-fondo-1.png","width":140,"height":140,"caption":"Niixer"},"image":{"@id":"https:\/\/niixer.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/niixer\/","https:\/\/www.instagram.com\/niixer.tecnologia\/"]},{"@type":"Person","@id":"https:\/\/niixer.com\/#\/schema\/person\/f70574cd1fa014c02e1a70805f6c9613","name":"acortesg8","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/8dce4716a3a0eda27dbd26b3be0693071a8981b78b6d6c249b8f426197af3b49?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/8dce4716a3a0eda27dbd26b3be0693071a8981b78b6d6c249b8f426197af3b49?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/8dce4716a3a0eda27dbd26b3be0693071a8981b78b6d6c249b8f426197af3b49?s=96&d=mm&r=g","caption":"acortesg8"},"url":"https:\/\/niixer.com\/index.php\/author\/acortesg8\/"}]}},"jetpack_featured_media_url":"https:\/\/niixer.com\/wp-content\/uploads\/2025\/04\/27-3.png","_links":{"self":[{"href":"https:\/\/niixer.com\/index.php\/wp-json\/wp\/v2\/posts\/64494","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/niixer.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/niixer.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/niixer.com\/index.php\/wp-json\/wp\/v2\/users\/1873"}],"replies":[{"embeddable":true,"href":"https:\/\/niixer.com\/index.php\/wp-json\/wp\/v2\/comments?post=64494"}],"version-history":[{"count":32,"href":"https:\/\/niixer.com\/index.php\/wp-json\/wp\/v2\/posts\/64494\/revisions"}],"predecessor-version":[{"id":64554,"href":"https:\/\/niixer.com\/index.php\/wp-json\/wp\/v2\/posts\/64494\/revisions\/64554"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/niixer.com\/index.php\/wp-json\/wp\/v2\/media\/64518"}],"wp:attachment":[{"href":"https:\/\/niixer.com\/index.php\/wp-json\/wp\/v2\/media?parent=64494"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/niixer.com\/index.php\/wp-json\/wp\/v2\/categories?post=64494"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/niixer.com\/index.php\/wp-json\/wp\/v2\/tags?post=64494"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}