Skillnad mellan DDA och Bresenhams algoritm Skillnaden mellan
Digital Differential Algorithm (DDA) och Bresenhams algoritm är de digitala linjerna ritningsalgoritmerna och används i datorgrafik för att rita bilder. Tidigare använde vi analytiska analysatorer för att beräkna bildpunkterna och därigenom blev linjeteckningar möjliga. Men dessa analysmetoder är inte lika exakta som de digitala metoderna som med användningen av dessa digitala algoritmer nu och som med alla fält har vi också uppfinnat högre kvalitetsmetoder i datorgrafik. Uppfinningen av dessa algoritmer är ett perfekt exempel. Innan vi fortsätter, låt oss titta på konceptet bakom dessa algoritmer. Även om det verkar som om vi inte diskuterar det är det viktigt att påpeka de grundläggande skillnaderna mellan de två. Om du är riktigt bekant med algoritmerna kan du hoppa till de faktiska skillnaderna som finns i slutet av den här sidan.
Vad är digital differentialalgoritm (DDA)?
En DDA används mest för att dra rader i datorgrafik och använder reella värden medan man förutser nästa pixelvärde. Låt oss anta det ursprungliga pixelvärdet som (X0, Y0) (X0, Y0) och destinationspunkten som (X1, Y1) (X1, Y1). Vi kommer att lära oss att beräkna destinationens pixelvärden från det kända pixelvärdet (X0, Y0) (X0, Y0) som nedan.
- Hur beräknar du referensvärdet med DDA?
Steg 1: Här har vi ingången (X0, Y0) (X0, Y0) och vi bör identifiera om linjen går parallellt med x-axeln eller y-axeln. För att hitta det, låt oss nu beräkna skillnaden mellan initialvärdena och destinationens pixelvärden.
dx = X1 - X0
dy = Y1 - Y0
Steg 2: Nu har vi identifierat skillnaden och vi borde dra linjen längs x-axeln om 'dx' är noll annars borde vi rita linjen parallellt med y-axeln. Här är den faktiska beräkningen vad gäller datorspråket.
om (absolut (dx)> absolut (dy))
Steg = absolut (dx);
annat
Steg = absolut (dy);
Steg 3: Nu är det dags att identifiera den faktiska "x" -koordinaten eller "y" -koordinaterna pixelvärdena för att rita linjen.
X inkrement = dx / (float) steg;
Y steg = dy / (float) steg;
Steg 4: Detta måste beräknas tills vi når destinationens pixel. DDA-algoritmen avrundar pixelvärdet till det närmaste heltalet medan beräkningen görs. Här är kodprovet av vad vi har diskuterat nu.
För (int v = 0; v { x = x + X inkrement; y = y + Y ökning; putpixel (Round (x), Round (y)); } Vi är klara med att rita linjen med hjälp av DDA och låt oss gå vidare till Bresenhams nu! Det är också en digital linje teckning algoritm och uppfanns av Bresenham år 1962 och det är därför det har samma namn. Denna algoritm är mer exakt och den använde subtraktion och tillägg för att beräkna pixelvärdet medan du ritar linjen. Noggrannheten i Bresenhams algoritm är tillförlitlig samtidigt som man ritar kurvor och cirklar. Låt oss se hur denna algoritm fungerar. Steg 1: Bresenhams algoritmer antar den ursprungliga pixelkoordinaten som (x a + 1 , a ). Steg 2: Beräknar automatiskt det nästa pixelvärdet som (x a + 1 , y a + 1 ), här är 'a' det inkrementella värdet och algoritmen beräknar det genom att lägga till eller subtrahera ekvationerna som den hade bildat. Denna algoritm beräknar exakta värden utan avrundning och ser också lättare ut! Låt oss nu överväga punkterna (0, 0) och (-8, -4) och låt oss rita en linje mellan dessa punkter med Bresenhams algoritm. Givad data, (x1, y1) = (0, 0) och (x2, y2) = (-8, -4). Låt oss nu beräkna differentialvärdena enligt nedan. Δx = x2-x1 = -8-0 = 8 Därför är inkrementvärdet för x = Δx / x2 = 8 / -8 = -1. Δy = y2-y1 = -4-0 = 4 Därför är inkrementet för y = Δy / y2 = 4 / -4 = -1. Beslutsvariabel = e = 2 * (Δy) - (xx) Därför, e = 2 * (4) - (8) = 8-8 = 0 Med ovanstående beräkning, låt vi tabulera de resulterande värdena. Värdena för y-koordinaten justeras baserat på en beslutsvariabel och vi ignorerar bara dess beräkning här. Y inkrement = dy / (float) steg Här används inga fasta konstanter men i Bresenhams algoritm fixade punkter används i aritmetiska beräkningar. Bresenhams algoritm använder heltal aritmetik, till skillnad från DDA. Typ av operation som används: DDA löser differentialekvationerna med multiplikations- och delningsoperationer. Du kan märka detsamma här, X increment = dx / (float) steg. Bresenhams algoritm använder tilläggs- och subtraktionsoperationer och du kan märka samma sak här i sin nästa pixelvärdesberäkningsekvation (x , y a + 1 ). Aritmetiken är enklare i Bresenham jämfört med DDA. Effektivitet: Som vi tidigare diskuterat använder Bresenhams algoritm enklare aritmetik än DDA och det resulterar i effektiva resultat. Eftersom DDA använder flytande punkts heltal tillsammans med multiplikations- och delningsoperationer är det relativt långsammare medan Bresenhams algoritm använder helt heltalsräkning tillsammans med tillägg och subtraheringar ensamma. Detta minskar avsevärt tiden för dess beräkningar och därmed snabbare än DDA. Vad ritar det? DDA kan dra cirklar och kurvor bortsett från ritningslinjer. Bresenhams algoritm kan också dra alla de som nämnts ovan och dess noggrannhet är verkligen högre än för DDA. På samma sätt kan Bresenhams algoritm komma med effektiva kurvor än det som produceras av DDA. Båda algoritmerna kan också rita trianglar och polygoner. Eftersom DDA inkluderar avrundning så är det dyrt än användningen av Bresenhams algoritm. Av ovanstående diskussion är det mycket tydligt att Bresenhams algoritm är en optimerad fråga om hastighet, kostnad och användning av operationer. S. Ingen Skillnader iVad är Bresenhams algoritm?
Pixel
x
y
Beslutsvariabel
(0, 0)
0
0
0
(- 1, 0)
- 1
0
Ett värde
(- 2, -1)
-2
-1
0
(- 3, -1)
-3 < -1
Ett värde
(- 4, -2)
-4
-2
0
(- 5, -2)
-5 > -2
Ett värde
(- 6, -3)
-6
-3
0
(- 7, -3)
-7
-3
Ett värde
(- 8, -4)
-8
-4
0
Skillnader mellan DDA & Bresenhams algoritm
:
Aritmetisk beräkning: DDA använder reella värden i sina beräkningar med användningen av flytande punkter. Nästa pixel- eller punktvärden bestäms med differentialekvationer