Risanje črt

Če upoštevamo število izračunov, potrebnih za barvanje posameznega piksla, se zdi, da jih ni veliko, vendar ne smemo pozabiti, da računalnik na zapleteni sliki izračuna na stotine pikslov v tisoče vrsticah. Čeprav formuli delujeta, z njuno pomočjo prepočasi ustvarjamo zapleteno grafiko, potrebno za dobre animacije in igre. V nadaljevanju bomo raziskali metodo, ki zelo pospeši ustvarjanje oziroma risanje zapletene grafike.

Z uporabo Bresenhamovega algoritma za risanje črte lahko računalnik bistveno hitreje izračuna, katere piksle naj pobarva. Pri izračunu je potrebno upoštevati nekaj preprostih korakov (spodaj). Najprej moramo izračunati tri vrednosti: $$A = 2 \times (y_2 - y_1)$$ $$B = A - 2 \times (x_2 - x_1)$$ $$P = A - (x_2 - x_1)$$

Črto narišemo tako, da pobarvamo začetni piksel in nato za vsak položaj vzdolž osi $x$:

  • Če je $P < 0$, pobarvamo nov piksel v isti črti kot je prejšnji in prištejemo $A$ k $P$.
  • Če je $P \geq 0$, pobarvamo nov piksel eno vrstico višje od prejšnjega in prištejemo $B$ k $P$.
  • Ponavljamo, dokler ne pobarvamo končnega piksla.

Zgornji Bresenhamov algoritem deluje samo za črte z naklonom do 45 stopinj. Za bolj splošno različico, ki jo lahko uporabimo za risanje črt s poljubnim naklonom, moramo upoštevati dodatni oziroma posplošeni pravili:

  • Če je črta nagnjena navzdol namesto navzgor in $P \geq 0$, pobarvamo nov piksel eno vrstico nižje od zadnjega piksla in prištejemo $B$ k $P$.
  • Če je sprememba vrednosti $y$ večja od spremembe vrednosti $x$ (kar pomeni, da je naklon večji od 1), moramo spremeniti izračune za $A$, $B$ in začetno vrednost za $P$ tako, da zamenjamo vrednosti $x$-ov in $y$-ov. Pri risanju pikslov pa namesto vsakega položaja vzdolž osi $x$, barvamo piksle vzdolž osi $y$ in narišemo po en piksel v vsako vrstico.


19
18
17
16
15
14
13
12
11
10
9B
8
7
6
5
4A
3
2
1
0
012345678910111213141516171819


Za te izračune lahko napišeš program ali oblikuješ preglednico – to počnejo programerji, ki se ukvarjajo s programiranje računalniške grafike, računalniških iger itd.