Den digitale differentielle algoritme (DDA) og Bresenhams's algoritme er de digitale linjer, der tegner algoritmer og bruges i computergrafik til at tegne billeder. Tidligere brugte vi analytiske analysatorer til at beregne pixels og derved blev linjetegninger muliggjort. Men disse analysemetoder er ikke så nøjagtige som de digitale metoder, at vi ved brug af disse digitale algoritmer nu og som med alle felter også har opfundet metoder af højere kvalitet i computergrafik. Opfindelsen af disse algoritmer er et perfekt eksempel. Før vi fortsætter, lad os se på konceptet bag disse algoritmer. Selvom det synes uden for rammerne af vores diskussion, er det vigtigt at påpege de grundlæggende forskelle mellem de to. Hvis du virkelig kender algoritmerne, kan du hoppe til de faktiske forskelle, der findes i slutningen af denne side.
En DDA bruges mest til at tegne linjer i computergrafik og bruger reelle værdier, mens de forudsiger de næste pixelværdier. Lad os antage den oprindelige pixelværdi som (X0, Y0) (X0, Y0) og destinationspixel som (X1, Y1) (X1, Y1). Vi lærer, hvordan man beregner destinationens pixelværdier ud fra den kendte pixelværdi (X0, Y0) (X0, Y0) som nedenfor.
Trin 1: Her har vi input (X0, Y0) (X0, Y0), og vi skal identificere, om linjen løber parallelt med x-aksen eller y-aksen. For at finde ud af det, lad os nu beregne forskellen mellem de oprindelige og destinationens pixelværdier.
dx = X1 - X0
dy = Y1 - Y0
Trin 2: Nu har vi identificeret forskellen, og vi skal tegne linjen langs x-aksen, hvis 'dx' er nul ellers skal vi tegne linjen parallelt med y-aksen. Her er den faktiske beregning med hensyn til computersproget.
hvis (absolut (dx)> absolut (dy))
Trin = absolut (dx);
andet
Trin = absolut (dy);
Trin 3: Nu er det tid til at identificere den faktiske 'x' koordinat eller 'y' koordinaterne pixelværdier for at tegne linjen.
X-trin = dx / (float) trin;
Y-stigning = dy / (flydende) trin;
Trin-4: Dette skal beregnes, indtil vi når destinationen pixel. DDA-algoritmen afrunder pixelværdien til den nærmeste heltalværdi, mens du udfører beregningen. Her er kodeeksemplet på det, vi har drøftet nu.
For (int v = 0; v < Steps; v++)
x = x + X forøgelse;
y = y + Y stigning;
putpixel (rund (x), rund (y));
Vi er færdige med at tegne linjen ved hjælp af DDA og lad os gå videre til Bresenhams nu!
Det er også en digital linietegningsalgoritme og blev opfundet af Bresenham i år 1962, og det er grunden til, at den har samme navn. Denne algoritme er mere nøjagtig, og den brugte subtraktion og tilføjelse til beregning af pixelværdien, mens linjen blev tegnet. Nøjagtigheden af Bresenhams algoritme er pålidelig, mens kurver og cirkler også tegnes. Lad os se, hvordan denne algoritme fungerer.
Trin 1: Bresenhams algoritmer antager den indledende pixelkoordinat som (xa + 1, y-en).
Trin 2: Det beregner automatisk den næste pixelværdi som (xa + 1, ya + 1), Her 'a' er den trinvise værdi, og algoritmen beregner den ved at tilføje eller trække de ligninger, den havde dannet.
Denne algoritme beregner nøjagtige værdier uden afrunding og ser også lettere ud!
Lad os nu overveje punkterne (0,0) og (-8, -4) og lad os tegne en linje mellem disse punkter ved hjælp af Bresenhams algoritme.
Givet data, (x1, y1) = (0, 0) og (x2, y2) = (-8, -4).
Lad os nu beregne de differentierede værdier som nedenfor.
Ax = x2-x1 = -8-0 = 8
Derfor er den trinvise værdi for x = ∆x / x2 = 8 / -8 = -1.
Ay = y2-y1 = -4-0 = 4
Derfor er den trinvise værdi for y = ∆y / y2 = 4 / -4 = -1.
Beslutningsvariabel = e = 2 * (∆y) - (∆x)
Derfor er e = 2 * (4) - (8) = 8-8 = 0
Lad os med ovenstående beregning tabulere de resulterende værdier. Værdierne for y-koordinat justeres baseret på en beslutningsvariabel, og vi ignorerer bare dens beregning her.
Pixel | x | y | Beslutningsvariabel |
(0,0) | 0 | 0 | 0 |
(-1,0) | -1 | 0 | En værdi |
(-2, -1) | -2 | -1 | 0 |
(-3, -1) | -3 | -1 | En værdi |
(-4, -2) | -4 | -2 | 0 |
(-5, -2) | -5 | -2 | En værdi |
(-6, -3) | -6 | -3 | 0 |
(-7, -3) | -7 | -3 | En værdi |
(-8, -4) | -8 | -4 | 0 |
DDA bruger reelle værdier i sine beregninger med brugen af flydende punkter. De næste pixel- eller punktværdier bestemmes med differentialligninger
X trin = dx / (float) trin
Y-stigning = dy / (flyd) trin
Her bruges ingen faste konstanter, men i Bresenhams algoritme bruges faste punkter i aritmetiske beregninger. Bresenhams algoritme bruger heltal-aritmetik i modsætning til DDA.
DDA løser differentialligningerne med multiplikations- og divisionsoperationer. Du kan bemærke det samme her, trin X = dx / (float). Bresenhams algoritme bruger additions- og subtraktionsoperationer, og du kan bemærke det samme her i dets næste pixelværdiberegningsligning (xa + 1, ya + 1). Aritmetikken er enklere i Bresenhams sammenlignet med DDA.
Som vi har diskuteret tidligere, bruger Bresenhams algoritme enklere aritmetik end DDA, og det resulterer i effektive resultater.
X trin = dx / (float) trin
Du kunne bemærke 'float', og derfor afrunder det ikke værdierne, mens Bresenhams algoritme afrunder værdierne til det nærmeste heltal. Derfor er de anvendte værdier enklere i Bresenhams algoritme.
DDA er i stand til at tegne cirkler og kurver bortset fra tegningslinjer. Bresenhams algoritme er også i stand til at tegne alle de nævnte ovenfor, og dens nøjagtighed er virkelig højere end DDA's. Tilsvarende kunne Bresenhams algoritme komme med effektive kurver end dem, der er produceret af DDA. Begge algoritmer kan også tegne trekanter og polygoner.
Da DDA også inkluderer afrunding, er det dyrt end brugen af Bresenhams algoritme.
Fra vores ovenstående diskussion er det meget tydeligt, at Bresenhams algoritme er optimeret med hensyn til hastighed, omkostning og brug af operationer.
Lad os se på forskellene i en tabelform.
S.No | Forskelle i | Digital differentiell algoritme | Bresenhams algoritme |
1. | Hvorfor navnet? | Bare fordi det var den digitale implementering af ligningerne, har den fået navnet. | Det blev opfundet af J.E. Bresenham i år 1962 og dermed navnet. |
2. | beregninger | Det involverer hårdere beregninger. | De anvendte beregninger er virkelig enklere. |
3. | Typer af anvendte operationer | Det brugte multiplikationer og opdelinger. De her anvendte prøvedifferentialligninger er Xincrement = dx / (float) trin, Yincrement = dy / (float) trin.
| Den bruger tilføjelser og subtraktioner. Eksempelberegningen her kan betegnes som (xa + 1, ya + 1). |
4. | Aritmetiske beregningsværdier | Den bruger flydende punktværdier. | Den bruger kun heltalværdierne. |
5. | Effektivitet | Kompleks aritmetik resulterer i mindre effektivitet. | Enklere aritmetik resulterer i mere effektivitet. |
6. | Hastighed | Brug af multiplikationer og divisionsoperationer tager meget tid for dens beregningsprocesser. | Brug af additions- og subtraktionsoperationer tager mindre tid end DDA. |
7. | Nøjagtighed | Det er mindre nøjagtigt. | Det er mere nøjagtigt. |
8. | Afrunding | Det bruger virkelige værdier og afrunder aldrig værdierne. | Det afrunder værdierne til de nærmeste heltalværdier. |
9. | Tegneevne | Det er i stand til at tegne linjer, cirkler og kurver, men med mindre nøjagtighed. Vi kan endda tegne trekanter og polygoner med denne algoritme. | Det er i stand til at tegne linjer, cirkler og kurver med større effektivitet. Det er også muligt at tegne trekanter og polygoner med denne algoritme. |
10. | Omkostninger ved beregninger | Det er dyrt, da det også involverer afrunding. | Brugen af Bresenhams algoritme er billigere end DDA. |
11. | Optimeret algoritme | Det er ikke en optimeret algoritme | Det er en optimeret algoritme. |
Vi har behandlet enhver mulig forskel mellem DDA og Bresenhams algoritme. Det kan endda synes at være gentagne, men der er en gyldig grund til at nævne disse punkter igen, og du vil lære at vide, når du forstår det fuldstændigt. Hvis du stadig føler, at der eksisterer en tvetydighed, så lad os en kommentar. Lad os lære sammen ved at dele den rette viden!