Sök…


Introduktion

Linjeteckning åstadkoms genom att beräkna mellanlägen längs linjen mellan två specificerade slutpunktspositioner. En utmatningsanordning riktas sedan för att fylla i dessa positioner mellan slutpunkterna.

Bresenham Line Ritningsalgoritm

Bakgrundsteori: Bresenham's Line Drawing Algoritm är en effektiv och exakt rasterlinjegenererande algoritm utvecklad av Bresenham. Det innefattar endast heltalskalkyl så att den är korrekt och snabb. Det kan också utökas för att visa cirklar ytterligare kurvor.

I Bresenham-ritningsalgoritm:

För sluttning | m | <1:
Endera värdet på x ökas
ELLER både x och y ökas med hjälp av beslutsparameter.

För sluttning | m |> 1:
Endera värdet på y ökas
ELLER både x och y ökas med hjälp av beslutsparameter.

Algoritm för sluttning | m | <1:

  1. Ange två slutpunkter (x1, y1) och (x2, y2) på linjen.

  2. Rita upp den första punkten (x1, y1).

  3. Beräkna
    Delx = | x2 - x1 |
    Dely = | y2 - y1 |

  4. Skaffa den initiala beslutsparametern som
    P = 2 * dely - delx

  5. För att I = 0 ska dela i steg 1

    Om p <0 då
    X1 = x1 + 1
    Kruka (x1, y1)
    P = p + 2 dely

    Annan
    X1 = x1 + 1
    Y1 = y1 + 1
    Plot (x1, y1)
    P = p + 2
    dely - 2 * delx

    Sluta om

    Slut för

  6. SLUTET

Källkod:

/* 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;
}

Algoritm för sluttning | m |> 1:

  1. Ange två slutpunkter (x1, y1) och (x2, y2) på linjen.
  2. Rita upp den första punkten (x1, y1).
  3. Beräkna
    Delx = | x2 - x1 |
    Dely = | y2 - y1 |
  4. Skaffa den initiala beslutsparametern som
    P = 2 * delx - dely
  5. För att I = 0 ska gå i steg 1

    Om p <0 då
    y1 = y1 + 1
    Kruka (x1, y1)
    P = p + 2 delx

    Annan
    X1 = x1 + 1
    Y1 = y1 + 1
    Plot (x1, y1)
    P = p + 2
    delx - 2 * dely

    Sluta om

    Slut för

  6. SLUTET

Källkod:

/* 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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow