algorithm
Line-Algorithmus
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:
Geben Sie zwei Endpunkte (x1, y1) und (x2, y2) der Linie ein.
Zeichne den ersten Punkt (x1, y1).
Berechnung
Delx = | x2 - x1 |
Dely = | y2 - y1 |Erhalten Sie den anfänglichen Entscheidungsparameter als
P = 2 * dely - delxFü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ürENDE
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:
- Geben Sie zwei Endpunkte (x1, y1) und (x2, y2) der Linie ein.
- Zeichne den ersten Punkt (x1, y1).
- Berechnung
Delx = | x2 - x1 |
Dely = | y2 - y1 | - Erhalten Sie den anfänglichen Entscheidungsparameter als
P = 2 * delx - 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 - 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;
}