algorithm
Algorytm linii
Szukaj…
Wprowadzenie
Rysowanie linii odbywa się poprzez obliczanie położeń pośrednich wzdłuż ścieżki między dwoma określonymi położeniami punktu końcowego. Urządzenie wyjściowe jest następnie kierowane w celu wypełnienia tych pozycji między punktami końcowymi.
Algorytm rysowania linii Bresenham
Teoria tła: Algorytm rysowania linii Bresenhama to wydajny i dokładny algorytm generowania linii rastrowej opracowany przez Bresenhama. Obejmuje tylko obliczanie liczb całkowitych, więc jest dokładne i szybkie. Można go również rozszerzyć, aby wyświetlał okręgi na innych krzywych.
W algorytmie rysowania linii Bresenham:
Dla nachylenia | m | <1:
Każda wartość x jest zwiększana
LUB zarówno xiy zwiększane są za pomocą parametru decyzyjnego.
Dla nachylenia | m |> 1:
Każda wartość y jest zwiększana
LUB zarówno xiy zwiększane są za pomocą parametru decyzyjnego.
Algorytm nachylenia | m | <1:
Wprowadź dwa punkty końcowe (x1, y1) i (x2, y2) linii.
Narysuj pierwszy punkt (x1, y1).
Oblicz
Delx = | x2 - x1 |
Dely = | y2 - y1 |Uzyskaj parametr początkowej decyzji jako
P = 2 * dely - delxDla I = 0, aby delxować w kroku 1
Jeśli p <0, to
X1 = x1 + 1
Pot (x1, y1)
P = p + 2 razy
Jeszcze
X1 = x1 + 1
Y1 = y1 + 1
Wykres (x1, y1)
P = p + 2 dely - 2 * delx
Zakończ jeśli
Koniec dlaKONIEC
Kod źródłowy:
/* 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;
}
Algorytm nachylenia | m |> 1:
- Wprowadź dwa punkty końcowe (x1, y1) i (x2, y2) linii.
- Narysuj pierwszy punkt (x1, y1).
- Oblicz
Delx = | x2 - x1 |
Dely = | y2 - y1 | - Uzyskaj parametr początkowej decyzji jako
P = 2 * delx - dely - Dla I = 0, aby dely w kroku 1
Jeśli p <0, to
y1 = y1 + 1
Pot (x1, y1)
P = p + 2 delx
Jeszcze
X1 = x1 + 1
Y1 = y1 + 1
Wykres (x1, y1)
P = p + 2 delx - 2 * dely
Zakończ jeśli
Koniec dla - KONIEC
Kod źródłowy:
/* 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;
}