Het verschil tussen DDA en het algoritme van Bresenham Verschil tussen

Anonim

Het digitale differentieelalgoritme (DDA) en het algoritme van Bresenhams zijn algoritmen voor het tekenen van digitale lijnen en worden in computergraphics gebruikt om afbeeldingen te tekenen. Eerder gebruikten we analytische analyzers om de pixels te berekenen en daardoor werden lijntekeningen mogelijk gemaakt. Maar deze analysemethoden zijn niet zo nauwkeurig als de digitale methoden die we met het gebruik van deze digitale algoritmen nu en bij elk gebied ook methoden van hogere kwaliteit in computergrafieken hebben uitgevonden. De uitvinding van deze algoritmen is een perfect voorbeeld. Laten we, voordat we verder gaan, eens kijken naar het concept achter deze algoritmen. Hoewel het buiten het kader van onze discussie lijkt te zijn, is het essentieel om de fundamentele verschillen tussen de twee te benadrukken. Als u echt bekend bent met de algoritmen, kunt u naar de werkelijke verschillen aan het einde van deze pagina gaan.

Wat is een digitaal differentiaalalgoritme (DDA)?

Een DDA wordt meestal gebruikt om lijnen in computergrafieken te tekenen en gebruikt echte waarden terwijl de volgende pixelwaarden worden voorspeld. Laten we de initiële pixelwaarde aannemen als (X0, Y0) (X0, Y0) en de bestemmingspixel als (X1, Y1) (X1, Y1). We zullen leren hoe we de bestemmingspixelwaarden berekenen uit de bekende pixelwaarde (X0, Y0) (X0, Y0) zoals hieronder.

  • Hoe bereken ik de waarde van het bestemmingspunt met behulp van DDA?

Stap-1: Hier hebben we de invoer (X0, Y0) (X0, Y0) en moeten we vaststellen of de lijn evenwijdig loopt aan de x-as of de y-as. Om dat te vinden, moeten we nu het verschil berekenen tussen de initiële en de bestemmingspixelwaarden.

dx = X1 - X0

dy = Y1 - Y0

Stap-2: Nu hebben we het verschil geïdentificeerd en moeten we de lijn langs de x-as tekenen als 'dx' nul is anders zouden we de lijn parallel aan de y-as moeten tekenen. Hier is de daadwerkelijke berekening in termen van de computertaal.

if (absoluut (dx)> absoluut (dy))

Stappen = absoluut (dx);

else

Stappen = absoluut (dy);

Stap-3: Nu is het tijd om de werkelijke x-coördinaat of de y-coördinaten pixelwaarden te identificeren om de lijn te tekenen.

X increment = dx / (float) stappen;

Y increment = dy / (float) stappen;

Stap 4: Dit moet worden berekend tot we de bestemmingspixel bereiken. Het DDA-algoritme rondt de pixelwaarde af op de dichtstbijzijnde gehele waarde terwijl de berekening wordt uitgevoerd. Hier is de codevoorbeeld van wat we nu hebben besproken.

Voor (int v = 0; v

{

x = x + X toename;

y = y + Y toename;

putpixel (Round (x), Round (y));

}

We zijn klaar met het tekenen van de lijn met behulp van de DDA en laten we nu verdergaan met de Bresenham's!

Wat is het algoritme van Bresenham?

Het is ook een algoritme voor het trekken van digitale lijnen en werd uitgevonden door Bresenham in het jaar 1962 en daarom heeft het dezelfde naam. Dit algoritme is nauwkeuriger en het gebruikte aftrekken & optellen om de pixelwaarde te berekenen tijdens het tekenen van de lijn. De nauwkeurigheid van het Bresenham-algoritme is betrouwbaar, terwijl ook curven en cirkels worden getekend. Laten we kijken hoe dit algoritme werkt.

Stap 1: De algoritmen van Bresenham nemen de initiële pixelcoördinaten aan als (x a + 1 , y a ).

Stap-2: Het berekent automatisch de volgende pixelwaarde als (x a + 1 , y a + 1 ), Hier 'a' is de incrementele waarde en het algoritme berekent het door de vergelijkingen die het had gevormd toe te voegen of af te trekken.

Dit algoritme berekent nauwkeurige waarden zonder afronding en ziet er ook gemakkelijker uit!

  • Numeriek voorbeeld van het algoritme van Bresenham:

Laten we nu kijken naar de punten (0, 0) en (-8, -4) en laten we een lijn trekken tussen deze punten met behulp van het algoritme van Bresenham.

Gegeven gegevens, (x1, y1) = (0, 0) en (x2, y2) = (-8, -4).

Laten we nu de differentiële waarden berekenen zoals hieronder.

Δx = x2-x1 = -8-0 = 8

Daarom is de incrementele waarde voor x = Δx / x2 = 8 / -8 = -1.

Δy = y2-y1 = -4-0 = 4

Daarom is de incrementele waarde voor y = Δy / y2 = 4 / -4 = -1.

Beslissingsvariabele = e = 2 * (Δy) - (Δx)

Daarom, e = 2 * (4) - (8) = 8-8 = 0

laat bij de bovenstaande berekening we tabuleren de resulterende waarden. De waarden van de y-coördinaat worden aangepast op basis van een beslissingsvariabele en we negeren alleen de berekening hier.

Pixel x y Beslissingsvariabele
(0, 0) 0 0 0
(- 1, 0) - 1 0 Een waarde
(- 2, -1) -2 -1 0
(- 3, -1) -3 < -1 Een waarde (- 4, -2)
-4 -2 0 (- 5, -2)
-5 > -2 Een waarde (- 6, -3) -6
-3 0 (- 7, -3) -7
-3 A waarde (- 8, -4) -8
-4 0 Verschillen tussen DDA en Bresenham's algoritme :

Rekenkundige berekening: De DDA gebruikt reële waarden in de berekeningen met het gebruik van zwevende punten. De volgende pixel- of puntwaarden worden bepaald met differentiaalvergelijkingen

  • X increment = dx / (float) stappen

Y increment = dy / (float) stappen

Hier worden geen vaste constanten gebruikt, maar in Bresenham's algoritme vaste punten worden gebruikt in rekenkundige berekeningen. Het algoritme van Bresenham maakt gebruik van Integer rekenkunde, in tegenstelling tot de DDA.

Gebruikte type bewerking:

De DDA lost de differentiaalvergelijkingen op met vermenigvuldigings- en delingsbewerkingen. Je zou hier hetzelfde kunnen opmerken, X increment = dx / (float) stappen. Het algoritme van Bresenham gebruikt optel- en aftrekbewerkingen en u kunt hetzelfde opmerken in de volgende berekening van de pixelwaardeberekening (x

  • a + 1

, y a + 1 ). De rekenkunde is eenvoudiger in Bresenham in vergelijking met de DDA. Efficiëntie: Zoals we eerder hebben besproken, gebruikt het algoritme van Bresenham eenvoudigere rekenkundige bewerkingen dan de DDA en het resulteert in efficiënte resultaten.

  • Snelheid:

Aangezien DDA drijvende-komma-gehele getallen en vermenigvuldigings- en delingbewerkingen gebruikt, is deze relatief trager terwijl het algoritme van Bresenham alleen gehele getallen gebruikt, samen met toevoegingen en aftrekkingen. Hierdoor wordt de tijd die nodig is voor de berekeningen aanzienlijk verkort en dus sneller dan de DDA.

  • Nauwkeurigheid: Hoewel DDA drijvende-kommawaarden gebruikt, is de nauwkeurigheid van DDA niet zo veel beter dan die van Bresenham. Verschillende factoren beïnvloeden dit concept en daarom is Bresenham nauwkeuriger dan de DDA.
  • Afronding: Kijk maar naar de berekening van de DDA hier.
  • X increment = dx / (float) stappen U kunt de 'float' waarnemen en daarom worden de waarden niet afgerond, terwijl het algoritme van Bresenham de waarden naar het dichtstbijzijnde gehele getal afrondt. Daarom zijn de gebruikte waarden eenvoudiger in het algoritme van Bresenham.

Wat trekt het aan?

De DDA kan cirkels en curven tekenen, afgezien van het tekenen van lijnen. Het algoritme van Bresenham is ook in staat om alle bovengenoemde te tekenen en de nauwkeurigheid is echt hoger dan die van de DDA. Evenzo zou het algoritme van Bresenham kunnen komen met efficiënte curven dan die geproduceerd door de DDA. Beide algoritmen kunnen ook driehoeken en polygonen tekenen.

  • Wat is duur?

Omdat DDA ook afgerond is, is het duurder dan het gebruik van het algoritme van Bresenham.

  • Wat is een geoptimaliseerd algoritme?

Uit onze bovenstaande discussie is het overduidelijk dat het algoritme van Bresenham een ​​geoptimaliseerde is in termen van snelheid, kosten en gebruik van bewerkingen.

  • Laten we de verschillen in een tabel bekijken.

S. Nee

Verschillen in

Digitaal differentiaalalgoritme Bresenham's algoritme 1. Waarom de naam?
Alleen omdat het de digitale implementatie van de vergelijkingen was, heeft het de naam. Het werd uitgevonden door J. E. Bresenham in het jaar 1962 en vandaar de naam. 2. Berekeningen
Het gaat om hardere berekeningen. De gebruikte berekeningen zijn echt eenvoudiger. 3. Typen bewerkingen gebruikt
Er zijn vermenigvuldigingen en divisies gebruikt. De differentiaalvergelijkingen die hier worden gebruikt, zijn Xincrement = dx / (float) stappen, Yincrement = dy / (float) stappen. Het gebruikt toevoegingen en aftrekkingen. De monsterberekening hier kan worden aangeduid als (x

a + 1

, y a + 1 ). 4. Rekenkundige berekeningswaarden
Het gebruikt drijvende-kommawaarden. Het gebruikt alleen de gehele waarden. 5. Efficiëntie
Complex rekenkundig resultaat resulteert in minder efficiëntie. Eenvoudiger rekenresultaten zorgen voor meer efficiëntie. 6. Snelheid
Het gebruik van vermenigvuldigingen en divisiewerkzaamheden kost veel tijd voor de berekeningsprocessen. Het gebruik van optel- en aftrekbewerkingen kost minder tijd dan de DDA. 7. Nauwkeurigheid
Het is minder nauwkeurig. Het is nauwkeuriger. 8. Afronding
Het gebruikt echte waarden en rondt nooit de waarden af. Het rondt de waarden af ​​tot de dichtstbijzijnde gehele getallen. 9. Tekenmogelijkheid
Het is in staat om lijnen, cirkels en krommen te tekenen, maar met minder nauwkeurigheid. We kunnen zelfs driehoeken en polygonen tekenen met dit algoritme. Het is in staat om lijnen, cirkels en krommen met grotere efficiëntie te tekenen. Driehoeken en polygonen kunnen ook met dit algoritme worden getekend. 10. Kosten van berekeningen
Het is duur omdat het ook om afronding gaat. Het gebruik van het algoritme van Bresenham is goedkoper dan de DDA. 11. Geoptimaliseerd algoritme
Het is geen geoptimaliseerd algoritme Het is een geoptimaliseerd algoritme. We hebben elk mogelijk verschil tussen de DDA en het algoritme van Bresenham behandeld. Het lijkt misschien zelfs een herhaling, maar er is een geldige reden om die punten opnieuw te noemen en je zou het weten als je het volledig begrijpt. Als je nog steeds het gevoel hebt dat er een dubbelzinnigheid bestaat, laat ons dan een bericht achter. Laten we samen leren door de juiste kennis te delen!