Za crtanje linije koristi se
Bresenham-ov postupak. Algoritam je slijedeći :
- Učitati x i y koordinate početne i završne točke, (x1,y1)
(x2, y2).
- Izračunati udaljenost (razliku) x i y koordinata, tj. x0 = |x2-x1|,
te y0 = |y2-y1|.
- Odrediti u kojem kvadrantu se nalazi završna točka i prema
tome odrediti za x i y faktor povećanja
- I. kvadrant: za x 1, y 1
- II. kvadrant: za x -1, y 1
- III. kvadrant: za x -1, y -1
- IV. kvadrant: za x 1, y -1
- Odabrati koordinate čija je udaljenost veća (u daljnjem
tekstu prva koordinata).
- Izračunati omjer k
=veća razlika/manja razlika, te postaviti D na vrijednost k.
- Postaviti vrijednost prva
na početnu vrijednost prve koordinate, druga
na početnu vrijednost druge koordinate
- Za i=0, dok je i manji od udaljenosti prve
koordinate raditi slijedeće :
- Osvijetli točku sa korespodentnim točkama x i y koordinata (prva/druga)
- Provjeriti da li je D>0.5.
Ako je povećati druga ovisno o
tome koju koordinatu predstavlja i ovisno o koraku 3, te smanjiti D za 1.
- Povečati prva ovisno
o tome koju koordinatu predstavlja i ovisno o koraku 3
- Povečati i za 1, te D za k
Ostvarenje gore opisanog algoritama je slijedeće:
POSTAVI X UDALJENOST prva0 NA EndX - StartX + 1
POSTAVI Y UDALJENOST druga0 NA EndY - StartY + 1
AKO prva0 < 0 ONDA
POSTAVI prva_plus = -1
INAČE
POSTAVI prva_plus = 1
AKO druga0 < 0 ONDA
POSTAVI druga_plus = -1;
INAČE
POSTAVI druga_plus = 1;
POSTAVI prva0 = |prva0|, druga0 = |druga0|
AKO prva0 >= druga0 ONDA
POSTAVI KOEFICIJENT SMJERA : D,k = 1 * druga0 / prva0
POSTAVI prva = StartX, druga = StartY
POSTAVI prva_kraj = prva0
KRAJ
INAČE
POSTAVI KOEFICIJENT SMJERA : D,k =
1 * prva0 / druga0
POSTAVI prva = StartY, druga = StartX
POSTAVI prva_kraj = druga0
ZAMIJENI
prva_plus ZA
druga_plus POŠTO JE
Y KOORDINATA VEĆA OD X KOORDINATE
KRAJ
AKO prva0 >= druga0 ONDA
ZA i=0, prva_kraj RADI
OSVIJETLI TOČKU (StartX, StartY)
AKO D > 0.5 ONDA
UVEČAJ druga ZA druga_plus
UMANJI D ZA 1
KRAJ
UVEČAJ
prva ZA prva_plus I D ZA k
KRAJ
KRAJ
INAČE
ZA i=0, prva_kraj
OSVIJETLI TOČKU (StartX, StartY)
AKO D > 0.5 ONDA
UVEČAJ druga ZA druga_plus
UMANJI D ZA 1
KRAJ
UVEČAJ
prva ZA prva_plus I D ZA k
KRAJ
KRAJ
Gore opisani algoritam može se
modificirati tako da se koriste samo cjelobrojne vrijednosti na
sljedeći način (imena varijabli se NE poklapaju sa gornjim primjerom):
AKO StartX < EndX ONDA
POSTAVI plusX= 1;
INAČE
POSTAVI plusX=-1;
AKO StartY < EndY ONDA
POSTAVI plusY= 1;
INAČE
POSTAVI plusY=-1;
POSTAVI x0 = |EndX-StartX+1|, y0 = |EndY-StartY+1|
AKO JE "KUT" IZMEĐU 315 i 45 ili 135 i 255 STUPNJEVA (TJ. x0 > y0 ) ONDA
ZA i,j=0 DOK JE i < x0 RADI
OSVIJETLI TOČKU (StartX, StartY)
UVEČAJ j ZA y0
AKO "KUT" PREĐE 45 STUPNJEVA (TJ. j >= x0 ) ONDA
UMANJI j ZA x0
UVEČAJ StartY ZA plusY
KRAJ
UVEČAJ
StartX za plusX
KRAJ PETLJE
KRAJ
INAČE, "KUT" JE IZMEĐU 45 i 135 ili 225 i 315 STUPNJEVA
ZA i,j=0 DOK JE i < y0
OSVIJETLI TOČKU (StartX, StartY)
UVEČAJ j ZA x0
AKO "KUT" PREĐE 45 STUPNJEVA (TJ. j >= y0 ) ONDA
UMANJI j ZA y0
UVEČAJ StartX ZA plusX
KRAJ
UVEČAJ
StartY ZA plusY
KRAJ
KRAJ
Gore navedeni algoritmi su
implementirani u programskom jeziku JAVA i mogu se testirati pomoću
slijedećeg appleta.
Klikom bilo gdje na površini appleta odabire se početna točka linije.
Pomakom miša i trenutnom lokacijom odabire se završna točka linije za
iscrtavanje te se ona iscrtava nanovo pri svakom pomaku miša. Zelena
linija predstavlja liniju koja spaja malo prije opisane točke spojene
inicijalnim Bresenham-ovim algoritmom, dok crvena predstavlja liniju
crtanu modificiranim algoritmom (koji koristi samo cjelobrojne
vrijednosti) pomaknutu za -20 pixel-a u y smjeru u odnosu na zelenu
liniju. Plava linija se iscrtava pomoću metode ugrađene u programski
jezik JAVA i pomaknuta je za +20 pixela u y smjeru u odnosu na zelenu
liniju.