Digitální diferenciální algoritmus (DDA) a Bresenhamův algoritmus jsou algoritmy pro kreslení digitálních čar a používají se v počítačové grafice k kreslení obrázků. Dříve jsme používali analytické analyzátory pro výpočet pixelů, a tím bylo umožněno kreslení čar. Tyto analytické metody však nejsou tak přesné jako digitální metody, které s využitím těchto digitálních algoritmů nyní a stejně jako v každém oboru vynalezeme i metody vyšší kvality v počítačové grafice. Vynález těchto algoritmů je dokonalým příkladem. Než budeme pokračovat, podívejme se na koncept těchto algoritmů. Ačkoli to vypadá mimo rozsah naší diskuse, je nezbytné poukázat na základní rozdíly mezi nimi. Pokud jste s algoritmy opravdu obeznámeni, můžete přejít na skutečné rozdíly umístěné na konci této stránky.
DDA se většinou používá k kreslení čar v počítačové grafice a používá skutečné hodnoty při předpovídání hodnot dalších pixelů. Předpokládejme počáteční hodnotu pixelu jako (X0, Y0) (X0, Y0) a cílový pixel jako (X1, Y1) (X1, Y1). Naučíme se, jak vypočítat hodnoty cílových pixelů ze známé hodnoty pixelů (X0, Y0) (X0, Y0), jak je uvedeno níže.
Krok 1: Zde máme vstup (X0, Y0) (X0, Y0) a měli bychom zjistit, zda čára běží paralelně s osou x nebo osou y. Abychom to našli, vypočtěte nyní rozdíl mezi počáteční a cílovou hodnotou pixelu.
dx = X1 - X0
dy = Y1 - Y0
Krok 2: Nyní jsme zjistili rozdíl a měli bychom nakreslit čáru podél osy x, pokud je „dx“ nula, jinak bychom měli nakreslit čáru rovnoběžnou s osou y. Zde je skutečný výpočet, pokud jde o počítačový jazyk.
if (absolutní (dx)> absolutní (dy))
Kroky = absolutní (dx);
jiný
Kroky = absolutní (dy);
Krok 3: Nyní je čas určit skutečnou „x“ souřadnici nebo „y“ souřadnice hodnot pixelů, abyste mohli nakreslit čáru.
X přírůstek = dx / (float) kroky;
Y přírůstek = dy / (float) kroky;
Krok 4: To se musí spočítat, dokud nedosáhneme cílového pixelu. Algoritmus DDA při výpočtu zaokrouhlí hodnotu pixelu na nejbližší celé číslo. Zde je ukázka kódu toho, o čem jsme diskutovali nyní.
Pro (int v = 0; v < Steps; v++)
x = x + přírůstek X;
y = y + Y přírůstek;
putpixel (Kolo (x), Kolo (y));
S DDA jsme nakreslili čáru a nyní se přesuneme k Bresenhamu!
Je to také algoritmus digitálního kreslení čar a byl vynalezen Bresenhamem v roce 1962, a proto má stejné jméno. Tento algoritmus je přesnější a při kreslení čáry použil odčítání a sčítání hodnoty pixelu. Přesnost Bresenhamova algoritmu je spolehlivá i při kreslení křivek a kruhů. Podívejme se, jak tento algoritmus funguje.
Krok 1: Bresenhamovy algoritmy předpokládají počáteční souřadnici pixelu jako (xa + 1, yA).
Krok 2: Automaticky vypočítá další hodnotu pixelu jako (xa + 1, ya + 1), 'A' je přírůstková hodnota a algoritmus ji vypočítá přidáním nebo odečtením rovnic, které vytvořil.
Tento algoritmus počítá přesné hodnoty bez zaokrouhlení a vypadá také snadněji!
Podívejme se nyní na body (0,0) a (-8, -4) a vytvořme mezi těmito body hranici pomocí Bresenhamova algoritmu.
Daná data, (x1, y1) = (0, 0) a (x2, y2) = (-8, -4).
Nyní vypočtěte diferenciální hodnoty, jak je uvedeno níže.
∆x = x2-x1 = -8-0 = 8
Proto přírůstková hodnota pro x = ∆x / x2 = 8 / -8 = -1.
∆y = y2-y1 = -4-0 = 4
Proto přírůstková hodnota pro y = ∆y / y2 = 4 / -4 = -1.
Proměnná rozhodnutí = e = 2 * (∆y) - (∆x)
Proto e = 2 * (4) - (8) = 8-8 = 0
Výše uvedeným výpočtem si vytvoříme výsledné hodnoty. Hodnoty souřadnic y se upravují na základě rozhodovací proměnné a zde její výpočet ignorujeme.
Pixel | X | y | Proměnná rozhodnutí |
(0,0) | 0 | 0 | 0 |
(-1,0) | -1 | 0 | Hodnota |
(-2, -1) | -2 | -1 | 0 |
(-3, -1) | -3 | -1 | Hodnota |
(-4, -2) | -4 | -2 | 0 |
(-5, -2) | -5 | -2 | Hodnota |
(-6, -3) | -6 | -3 | 0 |
(-7, -3) | -7 | -3 | Hodnota |
(-8, -4) | -8 | -4 | 0 |
DDA používá skutečné hodnoty ve svých výpočtech s využitím pohyblivých bodů. Další hodnoty pixelů nebo bodů jsou určeny diferenciálními rovnicemi
X přírůstek = dx / (float) kroků
Y přírůstek = dy / (float) kroky
Zde se nepoužívají žádné pevné konstanty, ale v Bresenhamově algoritmu se v aritmetických výpočtech používají pevné body. Bresenhamův algoritmus používá celé číslo aritmetické, na rozdíl od DDA.
DDA řeší diferenciální rovnice pomocí multiplikačních a dělicích operací. Tady si můžete všimnout totéž, X přírůstek = dx / (float) kroků. Algoritmus Bresenham používá operace sčítání a odčítání a totéž si můžete všimnout zde ve své další rovnici pro výpočet hodnoty pixelů (xa + 1, ya + 1). Aritmetika je v Bresenhamově jednodušší ve srovnání s DDA.
Jak jsme již diskutovali dříve, Bresenhamův algoritmus používá jednodušší aritmetiku než DDA a vede k efektivním výsledkům.
X přírůstek = dx / (float) kroků
Můžete si všimnout 'float', a proto nezaokrouhluje hodnoty, zatímco Bresenhamův algoritmus zaokrouhlí hodnoty na nejbližší celé číslo. Použité hodnoty jsou proto v Bresenhamově algoritmu jednodušší.
DDA je schopen kreslit kruhy a křivky odděleně od kreslení čar. Bresenhamův algoritmus je také schopen nakreslit všechny výše uvedené a jeho přesnost je skutečně vyšší než u DDA. Podobně by Bresenhamův algoritmus mohl přijít s účinnými křivkami, než které vytváří DDA. Oba algoritmy dokážou kreslit také trojúhelníky a polygony.
Protože DDA zahrnuje zaokrouhlování také, je to drahé než použití Bresenhamova algoritmu.
Z výše uvedené diskuse je zcela zřejmé, že Bresenhamův algoritmus je optimalizovaný z hlediska rychlosti, nákladů a využití operací..
Podívejme se na rozdíly v podobě tabulky.
S. Ne | Rozdíly v | Digitální diferenciální algoritmus | Bresenhamův algoritmus |
1. | Proč to jméno?? | Jenom proto, že se jednalo o digitální implementaci rovnic, dostala jméno. | Vynalezl jej J.E. Bresenham v roce 1962 a odtud název. |
2. | Výpočty | Zahrnuje tvrdší výpočty. | Použité výpočty jsou opravdu jednodušší. |
3. | Druhy použitých operací | Využívalo násobení a dělení. Vzorové diferenciální rovnice zde použité jsou kroky Xincrement = dx / (float), Yincrement = dy / (float) kroky.
| Používá sčítání a odčítání. Výpočty vzorků zde lze označit jako (xa + 1, ya + 1). |
4. | Aritmetické výpočtové hodnoty | Používá hodnoty s pohyblivou řádovou čárkou. | Používá pouze celočíselné hodnoty. |
5. | Účinnost | Složité aritmetické výsledky mají za následek nižší účinnost. | Jednodušší aritmetika vede k vyšší účinnosti. |
6. | Rychlost | Použití multiplikačních a dělicích operací zabere hodně času na výpočetní procesy. | Použití operací sčítání a odčítání zabere méně času než DDA. |
7. | Přesnost | Je to menší přesnost. | Je přesnější. |
8. | Zaokrouhlování | Používá skutečné hodnoty a nikdy zaokrouhlí hodnoty. | Zaokrouhlí hodnoty na nejbližší celé hodnoty. |
9. | Schopnost kreslení | Je schopen kreslit čáry, kruhy a křivky, ale s menší přesností. Můžeme dokonce kreslit trojúhelníky a polygony pomocí tohoto algoritmu. | Je schopen kreslit čáry, kruhy a křivky s větší účinností. Pomocí tohoto algoritmu lze také kreslit trojúhelníky a polygony. |
10. | Náklady na výpočty | Je to drahé, protože zahrnuje i zaokrouhlování. | Použití Bresenhamova algoritmu je levnější než DDA. |
11. | Optimalizovaný algoritmus | Nejedná se o optimalizovaný algoritmus | Je to optimalizovaný algoritmus. |
Zabývali jsme se každým možným rozdílem mezi DDA a Bresenhamovým algoritmem. Může to dokonce vypadat, že se opakuje, ale existuje nějaký oprávněný důvod k tomu, abych tyto body znovu zmínil, a ty bys to věděl, až tomu úplně porozumíš. Pokud máte stále pocit, že existuje nejasnost, zanechte nám prosím komentář. Učme se společně sdílením správných znalostí!