Digitaalinen differentiaalialgoritmi (DDA) ja Bresenhamsin algoritmi ovat digitaalisten viivojen piirtämisalgoritmeja, ja niitä käytetään tietokonegrafiikassa kuvien piirtämiseen. Aikaisemmin olimme käyttäneet analyyttisiä analysaattoreita pikselien laskemiseen, ja siten viivapiirrokset tehtiin mahdolliseksi. Mutta nämä analyyttiset menetelmät eivät ole yhtä tarkkoja kuin digitaaliset menetelmät, että näiden digitaalisten algoritmien käytön kanssa nyt ja kuten kaikilla aloilla, olemme keksineet korkeamman laadun menetelmiä myös tietokonegrafiikassa. Näiden algoritmien keksintö on täydellinen esimerkki. Ennen kuin jatkamme, katsotaanpa näiden algoritmien takana olevaa konseptia. Vaikka se näyttääkin keskustelun ulkopuolella, on välttämätöntä tuoda esiin näiden kahden väliset peruserot. Jos tunnet algoritmit todella, voit siirtyä todellisiin eroihin, jotka sijaitsevat tämän sivun lopussa.
DDA: ta käytetään enimmäkseen viivojen piirtämiseen tietokonegrafiikassa ja se käyttää todellisia arvoja ennustaessaan seuraavia pikseliarvoja. Oletetaan, että pikselin alkuarvo on (X0, Y0) (X0, Y0) ja kohdepikseli (X1, Y1) (X1, Y1). Opimme kuinka laskemaan kohdepikseliarvot tunnetusta pikseliarvosta (X0, Y0) (X0, Y0) kuten alla.
Vaihe 1: Tässä on tulo (X0, Y0) (X0, Y0) ja meidän pitäisi tunnistaa, kulkeeko linja x-akselin tai y-akselin suuntaisesti. Laskekaamme sen selvittämiseksi nyt alkuperäisen ja kohdepikselin arvojen välinen ero.
dx = X1 - X0
dy = Y1 - Y0
Vaihe-2: Nyt olemme löytäneet eron ja meidän pitäisi piirtää viiva x-akselia pitkin, jos 'dx' on nolla, muuten meidän pitäisi piirtää viiva y-akselin suuntaisesti. Tässä on todellinen laskenta tietokonekielen suhteen.
if (absoluuttinen (dx)> absoluuttinen (dy))
Vaiheet = absoluuttinen (dx);
muu
Vaiheet = absoluuttinen (dy);
Vaihe-3: Nyt on aika tunnistaa todelliset x-koordinaatit tai y-koordinaatit pikseliarvot viivan vetämiseksi.
X-lisäys = dx / (kelluva) vaiheet;
Y lisäys = dy / (kelluva) askel;
Vaihe-4: Tämä on laskettava, kunnes olemme saavuttaneet kohdepikselin. DDA-algoritmi pyöristää pikseliarvon lähimpään kokonaislukuun laskennan aikana. Tässä on koodinäyte siitä, mistä olemme keskustelleet nyt.
Jolle (int v = 0; v < Steps; v++)
x = x + X-lisäys;
y = y + Y-lisäys;
pikselipiste (pyöreä (x), pyöreä (y));
Olemme valmiita piirtämään viivan DDA: lla ja siirrymme nyt Bresenhamin tautiin!
Se on myös digitaalinen viivojen piirtämisalgoritmi, jonka Bresenham keksi vuonna 1962, ja siksi se on saanut saman nimen. Tämä algoritmi on tarkempi ja siinä käytettiin vähentämistä ja lisäystä pikseliarvon laskemiseen linjaa piirtäessä. Bresenhamin algoritmin tarkkuus on luotettava, kun piirrät myös käyriä ja ympyröitä. Katsokaamme kuinka tämä algoritmi toimii.
Vaihe 1: Bresenhamin algoritmit olettavat pikselin alkukoordinaatin muodossa (xa + 1, y).
Vaihe-2: Se laskee seuraavan pikselin arvon automaattisesti muodossa (xa + 1, ya + 1), Tässä 'a' on inkrementaalinen arvo ja algoritmi laskee sen lisäämällä tai vähentämällä muodostetut yhtälöt.
Tämä algoritmi laskee tarkat arvot pyöristämättä ja näyttää myös helpommalta!
Tarkastellaan nyt pisteitä (0,0) ja (-8, -4) ja piirretään raja näiden pisteiden välillä Bresenhamin algoritmin avulla.
Annetut tiedot, (x1, y1) = (0, 0) ja (x2, y2) = (-8, -4).
Lasketaan nyt erotusarvot alla esitetyllä tavalla.
Ax = x2-x1 = -8-0 = 8
Siksi x = ∆x / x2 = 8 / -8 = -1 inkrementaaliarvo.
Ay = y2-y1 = -4-0 = 4
Siksi y = ∆y / y2 = 4 / -4 = -1 inkrementaaliarvo.
Päätöksen muuttuja = e = 2 * (∆y) - (∆x)
Siksi e = 2 * (4) - (8) = 8-8 = 0
Edellä esitetyn laskennan avulla lasketaan tulokseksi saadut arvot. Y-koordinaatin arvot säädetään päätöksen muuttujan perusteella ja emme vain huomioi sen laskentaa tässä.
Pixel | x | y | Päätöksen muuttuja |
(0,0) | 0 | 0 | 0 |
(-1,0) | -1 | 0 | Arvo |
(-2, -1) | -2 | -1 | 0 |
(-3, -1) | -3 | -1 | Arvo |
(-4, -2) | -4 | -2 | 0 |
(-5, -2) | -5 | -2 | Arvo |
(-6, -3) | -6 | -3 | 0 |
(-7, -3) | -7 | -3 | Arvo |
(-8, -4) | -8 | -4 | 0 |
DDA käyttää laskelmissaan todellisia arvoja liukulukujen kanssa. Seuraavat pikselin tai pisteen arvot määritetään differentiaaliyhtälöillä
X-lisäys = dx / (kelluva) vaiheet
Y lisäys = dy / (kelluva) askel
Tässä ei käytetä kiinteitä vakioita, mutta Bresenhamin algoritmissa kiinteitä pisteitä käytetään aritmeettisiin laskutoimituksiin. Bresenhamin algoritmi käyttää integer-aritmeettista, toisin kuin DDA.
DDA ratkaisee differentiaaliyhtälöt kerto- ja jakamisoperaatioilla. Voit huomata saman täällä, X-lisäys = dx / (kelluva) vaiheet. Bresenhamin algoritmi käyttää summaus- ja vähennysoperaatioita, ja voit huomata saman täällä seuraavassa pikseliarvon laskentayhtälössä (xa + 1, ya + 1). Bresenhamin aritmeettiset tiedot ovat yksinkertaisempia kuin DDA.
Kuten aiemmin olemme keskustelleet, Bresenhamin algoritmi käyttää yksinkertaisempaa aritmeetiaa kuin DDA ja se johtaa tehokkaisiin tuloksiin.
X-lisäys = dx / (kelluva) vaiheet
Voit huomata 'kelluvan', joten se ei pyöristä arvoja, kun taas Bresenhamin algoritmi pyöristää arvot lähimpään kokonaislukuun. Siksi käytetyt arvot ovat yksinkertaisempia Bresenhamin algoritmissa.
DDA pystyy piirtämään ympyröitä ja käyrät linjojen lisäksi. Bresenhamin algoritmi pystyy myös piirtämään kaikki edellä mainitut ja sen tarkkuus on todella suurempi kuin DDA: n. Samoin Bresenhamin algoritmi voisi tuottaa tehokkaita käyriä kuin DDA: n tuottama. Molemmat algoritmit voivat piirtää myös kolmioita ja monikulmioita.
Koska DDA sisältää myös pyöristämisen, se on kallista kuin Bresenhamin algoritmin käyttö.
Yllä olevasta keskustelumme perusteella on erittäin selvää, että Bresenhamin algoritmi on optimoitu toimintonopeuden, kustannusten ja käytön suhteen.
Katsokaamme eroja taulukkomuodossa.
S.No | Erot | Digitaalinen differentiaalialgoritmi | Bresenhamin algoritmi |
1. | Miksi nimi? | Koska se oli yhtälöiden digitaalinen toteutus, se on saanut nimen. | Sen keksi J.E. Bresenham vuonna 1962 ja tästä myös nimi. |
2. | laskelmat | Siihen sisältyy tiukempia laskelmia. | Käytetyt laskelmat ovat todella yksinkertaisempia. |
3. | Käytetyt operaatiot | Se käytti kertolaskuja ja jakoa. Tässä käytetyt näytteen erotusyhtälöt ovat Xincrement = dx / (kelluva) askelmat, Yincrement = dy / (kelluva) portaat.
| Se käyttää lisäyksiä ja vähennyksiä. Näytteen laskenta voidaan tässä merkitä (xa + 1, ya + 1). |
4. | Aritmeettinen laskenta-arvo | Se käyttää liukulukuarvoja. | Se käyttää vain kokonaislukuja. |
5. | tehokkuus | Monimutkainen aritmeettinen tulos vähentää tehokkuutta. | Yksinkertaisempi aritmeettinen tulos lisää tehokkuutta. |
6. | Nopeus | Kertolaskujen ja jakamistoimintojen käyttö vie paljon aikaa sen laskentaprosesseihin. | Lisäys- ja vähennystoimenpiteiden käyttö vie vähemmän aikaa kuin DDA. |
7. | tarkkuus | Se on vähemmän tarkkoja. | Se on tarkempi. |
8. | Pyöristäminen | Se käyttää todellisia arvoja eikä koskaan pyöristä arvoja. | Se pyöristää arvot lähimpään kokonaislukuarvoon. |
9. | Piirustuskyky | Se pystyy piirtämään viivoja, ympyröitä ja käyriä, mutta vähemmän tarkkuudella. Voimme jopa piirtää kolmioita ja monikulmioita tällä algoritmilla. | Se pystyy piirtämään viivoja, ympyröitä ja käyriä tehokkaammin. Kolmioita ja monikulmioita on myös mahdollista piirtää tällä algoritmilla. |
10. | Laskelmien kustannukset | Se on kallista, koska siihen liittyy myös pyöristäminen. | Bresenhamin algoritmin käyttö on halvempaa kuin DDA. |
11. | Optimoitu algoritmi | Se ei ole optimoitu algoritmi | Se on optimoitu algoritmi. |
Olemme käsitelleet kaikki mahdolliset erot DDA: n ja Bresenhamin algoritmin välillä. Se saattaa jopa näyttää toistuvalta, mutta on olemassa syy mainita nämä kohdat uudelleen, ja saatat tietää, kun ymmärrät sen kokonaan. Jos epäilet edelleen epäselvyyttä, jätä meille kommentti. Oppikaamme yhdessä jakamalla oikea tieto!