Het verschil tussen DDA en het algoritme van Bresenham Verschil tussen
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! 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! 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. 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 , 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. 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. 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. Omdat DDA ook afgerond is, is het duurder dan het gebruik van het algoritme van Bresenham. Uit onze bovenstaande discussie is het overduidelijk dat het algoritme van Bresenham een geoptimaliseerde is in termen van snelheid, kosten en gebruik van bewerkingen. S. Nee Verschillen inWat is het algoritme van Bresenham?
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