Suche…


Einführung

Das Zeichnen von Linien wird durch Berechnen von Zwischenpositionen entlang des Linienpfads zwischen zwei angegebenen Endpunktpositionen ausgeführt. Ein Ausgabegerät wird dann angewiesen, diese Positionen zwischen den Endpunkten auszufüllen.

Bresenham-Zeichnungsalgorithmus

Hintergrundtheorie: Der Linienzeichnungsalgorithmus von Bresenham ist ein von Bresenham entwickelter effizienter und genauer Algorithmus zur Erzeugung von Rasterlinien. Es ist nur eine Ganzzahlberechnung, daher ist es genau und schnell. Es kann auch erweitert werden, um Kreise anderer Kurven anzuzeigen.

In Bresenham Linienzeichnungsalgorithmus:

Für Steigung | m | <1:
Jeder Wert von x wird erhöht
ODER x und y werden unter Verwendung des Entscheidungsparameters erhöht.

Für Steigung | m |> 1:
Jeder Wert von y wird erhöht
ODER x und y werden unter Verwendung des Entscheidungsparameters erhöht.

Algorithmus für die Steigung | m | <1:

  1. Geben Sie zwei Endpunkte (x1, y1) und (x2, y2) der Linie ein.

  2. Zeichne den ersten Punkt (x1, y1).

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

  4. Erhalten Sie den anfänglichen Entscheidungsparameter als
    P = 2 * dely - delx

  5. Für I = 0 bis Delx in Schritt 1

    Wenn p <0 ist
    X1 = x1 + 1
    Topf (x1, y1)
    P = p + 2 dely

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

    Ende wenn

    Ende für

  6. ENDE

Quellcode:

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

Algorithmus für Steigung | m |> 1:

  1. Geben Sie zwei Endpunkte (x1, y1) und (x2, y2) der Linie ein.
  2. Zeichne den ersten Punkt (x1, y1).
  3. Berechnung
    Delx = | x2 - x1 |
    Dely = | y2 - y1 |
  4. Erhalten Sie den anfänglichen Entscheidungsparameter als
    P = 2 * delx
  5. Für I = 0 bis 1 in Schritt 1

    Wenn p <0 ist
    y1 = y1 + 1
    Topf (x1, y1)
    P = p + 2 delx

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

    Ende wenn

    Ende für

  6. ENDE

Quellcode:

/* 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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow