Zoeken…


Invoering

Lijntekening wordt bereikt door het berekenen van tussenliggende posities langs het lijnpad tussen twee gespecificeerde eindpuntposities. Een uitvoerapparaat wordt vervolgens gestuurd om deze posities tussen de eindpunten in te vullen.

Bresenham Algoritme voor lijntekening

Achtergrondtheorie: Bresenham's Line Drawing Algorithm is een efficiënt en nauwkeurig rasterlijn genererend algoritme ontwikkeld door Bresenham. Het gaat alleen om gehele getallen, dus het is nauwkeurig en snel. Het kan ook worden uitgebreid om cirkels nog andere curven weer te geven.

In Bresenham lijntekening algoritme:

Voor helling | m | <1:
De waarde van x is verhoogd
OF zowel x als y worden verhoogd met de beslissingsparameter.

Voor helling | m |> 1:
De waarde van y is verhoogd
OF zowel x als y worden verhoogd met de beslissingsparameter.

Algoritme voor helling | m | <1:

  1. Voer twee eindpunten (x1, y1) en (x2, y2) van de lijn in.

  2. Plot het eerste punt (x1, y1).

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

  4. Verkrijg de initiële beslissingsparameter als
    P = 2 * dely - delx

  5. Voor I = 0 tot delx in stap van 1

    Als p <0 dan
    X1 = x1 + 1
    Pot (x1, y1)
    P = p + 2 dely

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

    Stop als

    Einde voor

  6. EINDE

Broncode:

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

Algoritme voor helling | m |> 1:

  1. Voer twee eindpunten (x1, y1) en (x2, y2) van de lijn in.
  2. Plot het eerste punt (x1, y1).
  3. Berekenen
    Delx = | x2 - x1 |
    Dely = | y2 - y1 |
  4. Verkrijg de initiële beslissingsparameter als
    P = 2 * delx - dely
  5. Voor I = 0 tot stap 1

    Als p <0 dan
    y1 = y1 + 1
    Pot (x1, y1)
    P = p + 2 delx

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

    Stop als

    Einde voor

  6. EINDE

Broncode:

/* 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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow