Buscar..


Introducción

El dibujo lineal se realiza calculando posiciones intermedias a lo largo de la trayectoria de línea entre dos posiciones de punto final especificadas. Luego se dirige un dispositivo de salida para completar estas posiciones entre los puntos finales.

Algoritmo de dibujo lineal de Bresenham

Antecedentes de la teoría: el algoritmo de dibujo de líneas de Bresenham es un algoritmo de generación de líneas de trama eficiente y preciso desarrollado por Bresenham. Implica solo el cálculo de enteros para que sea preciso y rápido. También se puede ampliar para mostrar círculos de otras curvas.

En el algoritmo de dibujo de líneas de Bresenham:

Para Pendiente | m | <1:
Cualquiera de los valores de x aumenta
O tanto x como y se incrementan usando el parámetro de decisión.

Para Pendiente | m |> 1:
Cualquiera de los valores de y se incrementa
O tanto x como y se incrementan usando el parámetro de decisión.

Algoritmo para pendiente | m | <1:

  1. Introduzca dos puntos finales (x1, y1) y (x2, y2) de la línea.

  2. Grafica el primer punto (x1, y1).

  3. Calcular
    Delx = | x2 - x1 |
    Dely = | y2 - y1 |

  4. Obtener el parámetro de decisión inicial como
    P = 2 * dely - delx

  5. Para I = 0 para delx en el paso de 1

    Si p <0 entonces
    X1 = x1 + 1
    Olla (x1, y1)
    P = p + 2 dely

    Más
    X1 = x1 + 1
    Y1 = y1 + 1
    Parcela (x1, y1)
    P = p + 2
    dely - 2 * delx

    Terminara si

    Fin de

  6. FIN

Código fuente:

/* A C program to implement Bresenham line drawing algorithm for |m|<1 */
#include<stdio.h>
#include<conio.h>
#include<graphics.h>
#include<math.h>

int main()
{    
 int gdriver=DETECT,gmode;
 int x1,y1,x2,y2,delx,dely,p,i;
 initgraph(&gdriver,&gmode,"c:\\TC\\BGI");

printf("Enter the intial points: ");
scanf("%d",&x1);
scanf("%d",&y1);
printf("Enter the end points: ");
scanf("%d",&x2);
scanf("%d",&y2);

putpixel(x1,y1,RED);

delx=fabs(x2-x1);
dely=fabs(y2-y1);
p=(2*dely)-delx;
for(i=0;i<delx;i++){
if(p<0)
{
 x1=x1+1;
 putpixel(x1,y1,RED);
 p=p+(2*dely);
}
else
{
 x1=x1+1;
 y1=y1+1;
 putpixel(x1,y1,RED);
 p=p+(2*dely)-(2*delx);
}
}
 getch();
 closegraph();
 return 0;
}

Algoritmo para pendiente | m |> 1:

  1. Introduzca dos puntos finales (x1, y1) y (x2, y2) de la línea.
  2. Grafica el primer punto (x1, y1).
  3. Calcular
    Delx = | x2 - x1 |
    Dely = | y2 - y1 |
  4. Obtener el parámetro de decisión inicial como
    P = 2 * delx - dely
  5. Para I = 0 para dely en el paso de 1

    Si p <0 entonces
    y1 = y1 + 1
    Olla (x1, y1)
    P = p + 2 delx

    Más
    X1 = x1 + 1
    Y1 = y1 + 1
    Parcela (x1, y1)
    P = p + 2
    delx - 2 * dely

    Terminara si

    Fin de

  6. FIN

Código fuente:

/* A C program to implement Bresenham line drawing algorithm for |m|>1 */
#include<stdio.h>
#include<conio.h>
#include<graphics.h>
#include<math.h>
int main()
{
int gdriver=DETECT,gmode;
int x1,y1,x2,y2,delx,dely,p,i;
initgraph(&gdriver,&gmode,"c:\\TC\\BGI");
printf("Enter the intial points: ");
scanf("%d",&x1);
scanf("%d",&y1);
printf("Enter the end points: ");
scanf("%d",&x2);
scanf("%d",&y2);
putpixel(x1,y1,RED);
delx=fabs(x2-x1);
dely=fabs(y2-y1);
p=(2*delx)-dely;
for(i=0;i<delx;i++){
if(p<0)
{
y1=y1+1;
putpixel(x1,y1,RED);
p=p+(2*delx);
}
else
{
x1=x1+1;
y1=y1+1;
putpixel(x1,y1,RED);
p=p+(2*delx)-(2*dely);
}
}
getch();
closegraph();
 return 0;
}


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow