Bresenham-Algorithmus (in Arbeit): Unterschied zwischen den Versionen

Aus Geometrie-Wiki
Wechseln zu: Navigation, Suche
(Allgemeines zum Bresenham Algorithmus: table+)
(Effektivität des Algorithmus)
Zeile 56: Zeile 56:
 
| 1
 
| 1
 
|}
 
|}
Hier wird die Zahl (im Dezimalsystem) dargestellt:
+
Hier wird die Zahl (im Dezimalsystem) dargestellt<br\><br\>
<math>  0 \cdot 2^7 + 1 \cdot 2^6 + 0 \cdot 2^5 + 0 \cdot 2^4 + 1 \cdot 2^3 +  1 \cdot 2^2 + 0\cdot 2^1 + 1 \cdot 2^0 = 77</math> <br\>
+
<math>  0 \cdot 2^7 + 1 \cdot 2^6 + 0 \cdot 2^5 + 0 \cdot 2^4 + 1 \cdot 2^3 +  1 \cdot 2^2 + 0\cdot 2^1 + 1 \cdot 2^0 = 77</math><br\><br\>
Multiplizerien wir nun mit zwei, so folgt:<br\>  
+
Multiplizerien wir nun mit zwei, so folgt:<br\><br\>
<math>\ \ \ \ 2 \cdot ( 0 \cdot 2^7 + 1 \cdot 2^6 + 0 \cdot 2^5 + 0 \cdot 2^4 + 1 \cdot 2^3 +  1 \cdot 2^2 + 0\cdot 2^1 + 1 \cdot 2^0 )  = 154</math> <br\>
+
<math>2 \cdot ( 0 \cdot 2^7 + 1 \cdot 2^6 + 0 \cdot 2^5 + 0 \cdot 2^4 + 1 \cdot 2^3 +  1 \cdot 2^2 + 0\cdot 2^1 + 1 \cdot 2^0 )  = 154</math><br\><br\>
<math>
+
<math> \Leftrightarrow </math><br\><br\>
\Leftrightarrow 0 \cdot 2^8 + 1 \cdot 2^7 + 0 \cdot 2^6 + 0 \cdot 2^5 + 1 \cdot 2^4 +  1 \cdot 2^3 + 0\cdot 2^2 + 1 \cdot 2^1 = 154</math> <br\>
+
<math> 0 \cdot 2^8 + 1 \cdot 2^7 + 0 \cdot 2^6 + 0 \cdot 2^5 + 1 \cdot 2^4 +  1 \cdot 2^3 + 0\cdot 2^2 + 1 \cdot 2^1 = 154</math> <br\>
Also in Binärdarstellung:
+
 
 +
Also die Zahl 154 (Dezimal) in Binärdarstellung:
 
{| class="wikitable "
 
{| class="wikitable "
 
! Wertigkeit der Stelle
 
! Wertigkeit der Stelle
Zeile 85: Zeile 86:
 
| 0
 
| 0
 
|}
 
|}
 +
Vergleichen wir nun die Darstellung der Zahl 77 mit der Darstellung der Zahl 154, so fällt auf, dass durch die Multiplikation mit zwei jedes Bit um eine Stelle nach links verschoben wurde.
  
 
=Bresenham-Algortihmus für Graden=
 
=Bresenham-Algortihmus für Graden=
  
 
=Bresenham-Algortihmus für Kreise=
 
=Bresenham-Algortihmus für Kreise=

Version vom 5. Januar 2013, 17:20 Uhr

Inhaltsverzeichnis

Allgemeines zum Bresenham Algorithmus

Motivation des Algorithmus

Der Bresenham-Algorihtmus, ist ein Verfahren um Graden bzw. Kreise möglichst "gut" auf Anzeigegeräten zu zeichnen. Hier heisst "gut", dass die Abweichung zwischen dem gezeichneten und dem gedachten Objekt möglichst gering ist.

Das Problem beim Darstellen einer Strecke auf einem Anzeigegerät ist, dass das erzeugte Bild nur durch endlich viele Punkte aufgebaut ist. Dadurch entstehen "Lücken" beim zeichnen. Da unser Auge nur eine endliche Auflösung verarbeiten kann, scheint uns ein Bild auf dem Monitor nicht durch einzelne Punkte aufgebaut zu sein, sondern es entstehen für uns geometrische Formen, die wir mit unserer Vorstellung von mathematischen Objekten in Einklang bringen können.



Eine Gerade wie wir sie auf dem Bildschirm wahrnehmen.
Gerade in normaler Größe



Hier sieht man dieselbe Gerade um das 8fache vergrößert.


Gerade bis auf die Pixeleben vergrößert

Effektivität des Algorithmus

Dieser Algorithmus ist auch in heutiger Zeit, in seiner Geschwindigkeit und Einfachheit ungeschlagen, da die Rechenoperationen sich auf Addition und die Multiplikation mit zwei beschränken lässt. Dadurch kann dieser Rechenalgorithmus direkt in die Hardware der Grafikkarten implementiert werden.

Obwohl in den Rechentermen Potenzen auftreten, kann man diese umgehen. Hierfür betrachten wir den Ausdruck:
 n^2 die zweite Binomische Formel liefert :  (n - 1)^2 = n^2 - 2 \cdot n + 1 \ \Leftrightarrow n ^ 2 = ( n - 1)^2 + 2 \cdot n - 1
durch rekursive Anwendung dieser Formel, lassen sich Potenzen solange vereinfachen, bis die Basis eins erreicht ist und damit die Potenz verschwindet.

Multiplikation mit zwei
Eine Multiplikation mit zwei ist für einen Computer eine elementare Rechenoperation, da die sogenannte Shift Operation durchgeführt werden kann.

Wir erinnern uns an die Darstellung von Zahlen im Binärsystem.


Wertigkeit der Stelle 2^7 = 128 2^6 = 64 2^5 = 32 2^4 = 16 2^3 = 8 2^2 = 4 2^1 = 2 2^0 = 1
Binärzahl 0 1 0 0 1 1 0 1

Hier wird die Zahl (im Dezimalsystem) dargestellt

  0 \cdot 2^7 + 1 \cdot 2^6 + 0 \cdot 2^5 + 0 \cdot 2^4 + 1 \cdot 2^3 +  1 \cdot 2^2 + 0\cdot 2^1 + 1 \cdot 2^0 = 77

Multiplizerien wir nun mit zwei, so folgt:

2 \cdot ( 0 \cdot 2^7 + 1 \cdot 2^6 + 0 \cdot 2^5 + 0 \cdot 2^4 + 1 \cdot 2^3 +  1 \cdot 2^2 + 0\cdot 2^1 + 1 \cdot 2^0 )  = 154

 \Leftrightarrow

 0 \cdot 2^8 + 1 \cdot 2^7 + 0 \cdot 2^6 + 0 \cdot 2^5 + 1 \cdot 2^4 +  1 \cdot 2^3 + 0\cdot 2^2 + 1 \cdot 2^1 = 154

Also die Zahl 154 (Dezimal) in Binärdarstellung:

Wertigkeit der Stelle 2^7 = 128 2^6 = 64 2^5 = 32 2^4 = 16 2^3 = 8 2^2 = 4 2^1 = 2 2^0 = 1
Binärzahl 1 0 0 1 1 0 1 0

Vergleichen wir nun die Darstellung der Zahl 77 mit der Darstellung der Zahl 154, so fällt auf, dass durch die Multiplikation mit zwei jedes Bit um eine Stelle nach links verschoben wurde.

Bresenham-Algortihmus für Graden

Bresenham-Algortihmus für Kreise