Digitaalne diferentsiaalgoritm (DDA) ja Bresenhami algoritm on digitaalsete joonte joonistamise algoritmid ja neid kasutatakse arvutigraafikas piltide joonistamiseks. Varem kasutasime pikslite arvutamiseks analüütilisi analüsaatoreid ja seeläbi tehti võimalikuks jooniste joonistamine. Kuid need analüütilised meetodid pole nii täpsed kui digitaalsed meetodid, et nende digitaalsete algoritmide kasutamisel nüüd ja nagu igas valdkonnas oleme leiutanud ka arvutigraafikas kvaliteetsemaid meetodeid. Nende algoritmide leiutamine on suurepärane näide. Enne jätkamist vaatame läbi nende algoritmide taga oleva kontseptsiooni. Ehkki see tundub meie arutelu ulatusest väljas, on oluline välja tuua peamised erinevused nende kahe vahel. Kui olete algoritmidega tõesti tuttav, võite liikuda selle lehe lõpus asuvate tegelike erinevuste juurde.
DDA-d kasutatakse enamasti arvutigraafikas joonte tõmbamiseks ja järgmiste piksliväärtuste ennustamisel kasutatakse tegelikke väärtusi. Eeldame, et piksli algväärtus on (X0, Y0) (X0, Y0) ja sihtpunkti piksel on kui (X1, Y1) (X1, Y1). Õpime, kuidas sihtpunkti piksli väärtusi teadaolevate pikslite väärtuste (X0, Y0) (X0, Y0) abil arvutada järgmiselt.
Samm 1: Siin on meil sisend (X0, Y0) (X0, Y0) ja peaksime tuvastama, kas joon kulgeb paralleelselt x-teljega või y-teljega. Selle leidmiseks arvutagem nüüd erinevus piksli alg- ja sihtväärtuse vahel.
dx = X1 - X0
dy = Y1 - Y0
2. samm: Nüüd oleme erinevuse tuvastanud ja peaksime tõmbama joone piki x-telge, kui 'dx' on null, vastasel juhul peaksime joone tõmbama paralleelselt y-teljega. Siin on tegelik arvutus arvutikeele osas.
if (absoluutne (dx)> absoluutne (dy))
Sammud = absoluutne (dx);
muud
Sammud = absoluutne (dy);
3. samm: Nüüd on aeg kindlaks teha tegelik x-koordinaat või y-koordinaatide piksliväärtused, et joon alla tõmmata.
X juurdekasv = dx / (ujuk) astmed;
Y juurdekasv = dy / (ujuk) sammud;
4. samm: Seda tuleb arvutada seni, kuni jõuame sihtpunkti pikslini. DDA algoritm ümardab piksli väärtuse arvutamisel lähima täisarvuni. Siin on koodinäide sellest, mida me nüüd arutasime.
Jaoks (int v = 0; v < Steps; v++)
x = x + X juurdekasv;
y = y + Y juurdekasv;
putpiksel (ümar (x), ümar (y));
Oleme DDA abil joone alla tõmmanud ja liigume nüüd edasi Bresenhami juurde!
See on ka digitaalse joone joonistamise algoritm ja selle leiutas Bresenham aastal 1962 ja sellepärast on see saanud sama nime. See algoritm on täpsem ja joone joonistamisel kasutati piksli väärtuse arvutamisel lahutamist ja lisamist. Bresenhami algoritmi täpsus on usaldusväärne ka kõverate ja ringide joonistamisel. Vaatame, kuidas see algoritm töötab.
Samm 1: Bresenhami algoritmid eeldavad piksli algkoordinaati järgmiselt: (xa + 1, ya).
2. samm: See arvutab järgmise piksli väärtuse automaatselt kui (xa + 1, ya + 1), Siin 'a' on inkrementaalne väärtus ja algoritm arvutab selle, moodustades selle moodustatud võrrandid või lahutades need.
See algoritm arvutab täpsed väärtused ümardamata ja tundub ka lihtsam!
Vaatleme nüüd punkte (0,0) ja (-8, -4) ja joonistagem Bresenhami algoritmi abil nende punktide vahele joon.
Andmete põhjal on (x1, y1) = (0, 0) ja (x2, y2) = (-8, -4).
Arvutagem nüüd diferentsiaalväärtused järgmiselt.
∆x = x2-x1 = -8-0 = 8
Seetõttu on x = ∆x / x2 = 8 / -8 = -1 inkrementaalväärtus.
∆y = y2-y1 = -4-0 = 4
Seetõttu lisandub väärtus y = ∆y / y2 = 4 / -4 = -1.
Otsuse muutuja = e = 2 * (∆y) - (∆x)
Seetõttu e = 2 * (4) - (8) = 8-8 = 0
Ülaltoodud arvutuse abil tabeldame saadud väärtused. Y-koordinaadi väärtusi korrigeeritakse otsustusmuutuja põhjal ja me lihtsalt eirame siin selle arvutamist.
Piksel | x | y | Otsuse muutuja |
(0,0) | 0 | 0 | 0 |
(-1,0) | -1 | 0 | Väärtus |
(-2, -1) | -2 | -1 | 0 |
(-3, -1) | -3 | -1 | Väärtus |
(-4, -2) | -4 | -2 | 0 |
(-5, -2) | -5 | -2 | Väärtus |
(-6, -3) | -6 | -3 | 0 |
(-7, -3) | -7 | -3 | Väärtus |
(-8, -4) | -8 | -4 | 0 |
DDA kasutab arvutustes tegelikke väärtusi koos ujukomade kasutamisega. Järgmised pikslite või punktide väärtused määratakse diferentsiaalvõrranditega
X juurdekasv = dx / (ujuk) sammud
Y juurdekasv = dy / (ujuk) sammud
Siin ei kasutata fikseeritud konstante, vaid Bresenhami algoritmis kasutatakse aritmeetilistes arvutustes fikseeritud punkte. Bresenhami algoritm kasutab erinevalt DDA-st täisarvu aritmeetikat.
DDA lahendab diferentsiaalvõrrandid korrutamise ja jagamise toimingutega. Sama võis märgata ka siin, X juurdekasv = dx / (ujuk). Bresenhami algoritm kasutab liitmis- ja lahutamistoiminguid ning siin saate seda märgata järgmise piksli väärtuse arvutusvõrrandis (xa + 1, ya + 1). Aritmeetika on Bresenhami puhul DDA-ga võrreldes lihtsam.
Nagu oleme varem arutanud, kasutab Bresenhami algoritm lihtsamat aritmeetikat kui DDA ja see annab tõhusaid tulemusi.
X juurdekasv = dx / (ujuk) sammud
Võiksite märgata nn hõljumist ja seetõttu ei ümarda see väärtusi, samas kui Bresenhami algoritm ümardab väärtused lähima täisarvuni. Seetõttu on Bresenhami algoritmis kasutatud väärtused lihtsamad.
DDA on võimeline joonistama ringid ja kõverad peale joonjoonte. Bresenhami algoritm on võimeline joonistama ka kõiki ülalnimetatut ja selle täpsus on tõesti suurem kui DDA-l. Samamoodi võiks Bresenhami algoritm tulla efektiivsete kõveratega, kui DDA loodud. Mõlemad algoritmid võivad joonistada ka kolmnurki ja hulknurki.
Kuna DDA hõlmab ka ümardamist, on see Bresenhami algoritmi kasutamine kallis.
Meie ülaltoodud arutelu põhjal on väga selge, et Bresenhami algoritm on operatsioonide kiiruse, maksumuse ja kasutamise osas optimeeritud..
Vaatame erinevusi tabelina.
S.Ei | Erinevused | Digitaalne diferentsiaal algoritm | Bresenhami algoritm |
1. | Miks just nimi? | Sellepärast, et see oli võrrandite digitaalne teostus, on see ka oma nime saanud. | Selle leiutas J. E. Bresenham aastal 1962 ja sellest ka nimi. |
2. | Arvutused | See hõlmab karmimaid arvutusi. | Kasutatavad arvutused on tõesti lihtsamad. |
3. | Kasutatavate toimingute liigid | See kasutas korrutamist ja jagamist. Siin kasutatud valimi diferentsiaalvõrrandid on Xincrement = dx / (ujuk), Yincrement = dy / (ujuk) astmed.
| See kasutab liitmist ja lahutamist. Valimi arvutamist võib siin tähistada näiteks (xa + 1, ya + 1). |
4. | Aritmeetilised arvutusväärtused | See kasutab ujukoma väärtusi. | See kasutab ainult täisarvu väärtusi. |
5. | Tõhusus | Keeruline aritmeetiline tulemus on väiksem. | Lihtsam aritmeetika tagab suurema tõhususe. |
6. | Kiirus | Korrutuste ja jagamistoimingute kasutamine võtab arvutusprotsesside jaoks palju aega. | Liitmis- ja lahutamistoimingute kasutamine võtab vähem aega kui DDA. |
7. | Täpsus | See on väiksema täpsusega. | See on täpsem. |
8. | Ümardamine | See kasutab tegelikke väärtusi ega ümarda kunagi väärtusi. | See ümardab väärtused lähima täisarvuni. |
9. | Joonistamisvõime | See on võimeline joonistama jooni, ringe ja kurve, kuid väiksema täpsusega. Selle algoritmiga saame joonistada isegi kolmnurki ja hulknurki. | See on võimeline suurema tõhususega jooni, ringe ja kõveraid joonistama. Selle algoritmiga on võimalik joonistada ka kolmnurki ja hulknurki. |
10. | Arvutuste maksumus | See on kallis, kuna hõlmab ka ümardamist. | Bresenhami algoritmi kasutamine on DDA-st odavam. |
11. | Optimeeritud algoritm | See ei ole optimeeritud algoritm | See on optimeeritud algoritm. |
Oleme käsitlenud kõiki võimalikke erinevusi DDA ja Bresenhami algoritmi vahel. Võib isegi tunduda, et see kordub, kuid nende punktide uuesti mainimiseks on mõjuv põhjus ja te saaksite teada, kui saate sellest täielikult aru. Kui teil on endiselt kahemõttelisust, jätke meile kommentaar. Õppigem koos, jagades vajalikke teadmisi!