A digitális differenciál algoritmus (DDA) és a Bresenhams algoritmus a digitális vonalrajzolási algoritmusok, és a számítógépes grafikában használják képeket. Korábban elemző elemzőket használtunk a pixelek kiszámításához, és ezáltal lehetővé tettük a vonalrajzokat. De ezek az analitikai módszerek nem annyira pontosak, mint a digitális módszerek, hogy ezeknek a digitális algoritmusoknak a felhasználásával most, és mint minden területen, a számítógépes grafikában is magasabb szintű módszereket találtunk ki. Ezen algoritmusok feltalálása tökéletes példa. Mielőtt folytatnánk, vizsgáljuk meg ezen algoritmusok mögött meghúzódó koncepciót. Noha úgy tűnik, hogy a vita nem tartozik, elengedhetetlen rámutatni a kettő közötti alapvető különbségekre. Ha igazán ismeri az algoritmusokat, ugorhat az oldal végén található tényleges különbségekre.
A DDA-t főként vonalak vonására használják a számítógépes grafikában, és valós értékeket használ a következő pixelértékek előrejelzésekor. Tegyük fel a kezdeti pixel értékét (X0, Y0) (X0, Y0) és a célpont pixelt mint (X1, Y1) (X1, Y1). Megtanuljuk, hogyan lehet kiszámítani a rendeltetési képpontok értékeit az ismert pixelértékből (X0, Y0) (X0, Y0), az alábbiak szerint.
1. lépés: Itt van a bemenet (X0, Y0) (X0, Y0), és meg kell határoznunk, hogy a vonal párhuzamosan fut-e az x tengelygel vagy az y tengelygel. Ennek megállapításához számítsuk ki a kezdeti és a célpont pixelértékek közötti különbséget.
dx = X1 - X0
dy = Y1 - Y0
2. lépés: Most már azonosítottuk a különbséget, és húzzuk a vonalat az x tengely mentén, ha 'dx' nulla, egyébként húzzuk a vonalat az y tengelyre párhuzamosan. Itt van a tényleges számítás a számítógépes nyelv szempontjából.
if (abszolút (dx)> abszolút (dy))
Lépések = abszolút (dx);
más
Lépések = abszolút (dy);
Lépés-3: Itt az ideje, hogy meghatározzuk a tényleges 'x' koordinátát vagy az 'y' koordináták pixelértékeit a vonal húzásához.
X növekedés = dx / (úszó) lépések;
Y növekedés = dy / (úszó) lépések;
Lépés-4: Ezt addig kell kiszámítani, amíg el nem éri a célpontot. A DDA algoritmus a pixel értékét a legközelebbi egész értékre kerekíti a számítás elvégzése közben. Itt található a kódminta annak, amit most megvitattunk.
Mert (int v = 0; v < Steps; v++)
x = x + X növekedés;
y = y + Y növekedés;
put pixel (kerek (x), kerek (y));
Befejeztük a vonal húzását a DDA segítségével, és térjünk tovább a Bresenhamhez!
Ez egy digitális vonalhúzó algoritmus is, amelyet Bresenham talált fel 1962-ben, ezért kapta ugyanazt a nevét. Ez az algoritmus pontosabb, és a vonal húzásakor kivonást és kiegészítést alkalmazott a pixelérték kiszámításához. A Bresenham algoritmusának pontossága görbék és körök rajzolásakor is megbízható. Nézzük meg, hogyan működik ez az algoritmus.
1. lépés: A Bresenham algoritmusai a pixel kezdeti koordinátáját (xA + 1, yegy).
2. lépés: Automatikusan kiszámítja a következő pixel értéket (xA + 1, yA + 1), Itt 'a' a növekményes érték, és az algoritmus kiszámítja azt a létrehozott egyenletek összeadásával vagy kivonásával.
Ez az algoritmus pontos értékeket számol le kerekítés nélkül, és könnyebben néz ki!
Most nézzük meg a (0,0) és (-8, -4) pontokat, és húzzunk egy vonalat e pontok között a Bresenham algoritmusával.
Adott adatok, (x1, y1) = (0, 0) és (x2, y2) = (-8, -4).
Most számítsuk ki a differenciálértékeket az alábbiak szerint.
Ax = x2-x1 = -8-0 = 8
Ezért az x = ∆x / x2 = 8 / -8 = -1 növekményes értéke.
Δy = y2-y1 = -4-0 = 4
Ezért az y = ∆y / y2 = 4 / -4 = -1 növekményes értéke.
Döntési változó = e = 2 * (∆y) - (∆x)
Ezért e = 2 * (4) - (8) = 8-8 = 0
A fenti számítás segítségével tabuláljuk az eredményül kapott értékeket. Az y-koordináta értékeit egy döntési változó alapján állítják be, és itt csak figyelmen kívül hagyjuk annak kiszámítását.
Pixel | x | y | Döntési változó |
(0,0) | 0 | 0 | 0 |
(-1,0) | -1 | 0 | Egy érték |
(-2, -1) | -2 | -1 | 0 |
(-3, -1) | -3 | -1 | Egy érték |
(-4, -2) | -4 | -2 | 0 |
(-5, -2) | -5 | -2 | Egy érték |
(-6, -3) | -6 | -3 | 0 |
(-7, -3) | -7 | -3 | Egy érték |
(-8, -4) | -8 | -4 | 0 |
A DDA a valós értékeket használja számításaiban a lebegőpontok használatával. A következő pixel- vagy pontértékeket differenciálegyenletekkel határozzuk meg
X növekedés = dx / (úszó) lépések
Y növekedés = dy / (úszó) lépések
Itt nem használunk állandó állandót, de Bresenham algoritmusában a rögzített pontokat használjuk aritmetikai számításokban. A Bresenham algoritmusa Integer számtani értéket használ, ellentétben a DDA-val.
A DDA a differenciálegyenleteket szorzás és osztás műveletekkel oldja meg. Ugyanezt észlelheti itt is, X növekmény = dx / (úszó) lépés. A Bresenham algoritmusa összeadási és kivonási műveleteket használ, és ezt itt észreveheti a következő pixelérték-számítási egyenletben (xA + 1, yA + 1). A számtani képlet egyszerűbb a Bresenham-féle DDA-hoz képest.
Amint azt korábban már tárgyaltuk, Bresenham algoritmusa egyszerűbb számtani módszert használ, mint a DDA, és eredményes eredményeket eredményez.
X növekedés = dx / (úszó) lépések
Figyelembe veheti a „lebegést”, ezért nem kerekíti az értékeket, míg a Bresenham algoritmusa az értékeket a legközelebbi egészre kerekíti. Ezért az alkalmazott értékek egyszerűbbek Bresenham algoritmusában.
A DDA képes köröket és görbéket rajzolni a vonalvonalon kívül. A Bresenham algoritmusa képes a fentiek mindegyikének rajzolására, és pontossága valóban magasabb, mint a DDA-nál. Hasonlóképpen, a Bresenham algoritmusa hatékony görbékkel is felmerülhet, mint amelyeket a DDA előállított. Mindkét algoritmus rajzolhat háromszöget és sokszöget is.
Mivel a DDA magában foglalja a kerekítést is, ez drága, mint a Bresenham algoritmusának használata.
A fenti megbeszélésből kitűnik, hogy a Bresenham algoritmusa optimalizált algoritmus a sebesség, a költség és a műveletek felhasználása szempontjából..
Nézzük meg a különbségeket táblázatos formában.
S.No | Különbségek | Digitális differenciál algoritmus | Bresenham algoritmusa |
1. | Miért a név?? | Csak azért, mert az egyenletek digitális megvalósítása volt, megkapta a nevét. | Bresenham J. E. találta fel 1962-ben, és ez a név is. |
2. | számítások | Szigorúbb számításokat tartalmaz. | Az alkalmazott számítások valóban egyszerűbbek. |
3. | Az alkalmazott műveletek típusai | Szorzásokat és osztásokat használt. Az itt alkalmazott minta differenciálegyenletek Xincrement = dx / (úszó) lépések, Yincrement = dy / (úszó) lépések.
| Összeadásokat és kivonásokat használ. A mintaszámítást itt meg lehet jelölni (xA + 1, yA + 1). |
4. | Számtani számítási értékek | Lebegőpontos értékeket használ. | Csak egész értékeket használ. |
5. | Hatékonyság | A komplex aritmetika kisebb hatékonyságot eredményez. | Az egyszerűbb aritmetika nagyobb hatékonyságot eredményez. |
6. | Sebesség | A szorzás és az osztás műveletek használata sok időt vesz igénybe a számítási folyamatainál. | Az összeadási és kivonási műveletek felhasználása kevesebb időt vesz igénybe, mint a DDA. |
7. | Pontosság | Ez kevésbé pontos. | Pontosabb. |
8. | Lekerekítés | Valós értékeket használ, és soha nem kerekíti az értékeket. | Az értékeket a legközelebbi egész értékre kerekíti. |
9. | Rajzolási képesség | Képesek vonalak, körök és görbék rajzolására, de kevésbé pontosan. Ezzel az algoritmussal még háromszögeket és sokszögeket is rajzolhatunk. | Nagyobb hatékonysággal képes vonal, kör és görbe rajzolására. Háromszögek és sokszögek szintén rajzolhatók ezzel az algoritmussal. |
10. | A számítások költségei | Ez drága, mivel magában foglalja a lekerekítést is. | A Bresenham algoritmusa olcsóbb, mint a DDA. |
11. | Optimalizált algoritmus | Ez nem egy optimalizált algoritmus | Ez egy optimalizált algoritmus. |
Minden lehetséges különbséget megvizsgáltunk a DDA és a Bresenham algoritmusa között. Lehet, hogy ismétlődőnek tűnik, de van megfelelő ok arra, hogy ezeket a pontokat újra megemlítsük, és akkor tudhatnánk, ha teljesen megértjük. Ha továbbra is úgy érzi, hogy kétértelműség van, kérjük, írjon nekünk egy megjegyzést. Tanuljunk együtt a megfelelő tudás megosztásával!