www.wikidata.de-de.nina.az
Unter der Rasterung von Kreisen versteht man in der Computergrafik das Zeichnen Rastern eines Kreises auf dem Punktraster einer Rastergrafik oder eines Raster Grafikgerats durch Einfarben entsprechender Pixel Es gibt hierfur sowohl Algorithmen zur einfarbigen Rasterung als auch zum Antialiasing Inhaltsverzeichnis 1 Einfarbige Rasterung 1 1 Einfache Algorithmen 1 2 Methode von Metzger 1 3 Methode von Horn 1 4 Midpoint Algorithmus 1 5 Methode von Jesko 1 6 Sonstiges 2 Antialiasing 3 Siehe auch 4 Literatur 5 EinzelnachweiseEinfarbige Rasterung BearbeitenEinfache Algorithmen Bearbeiten Eine einfache Moglichkeit Kreise zu zeichnen basiert auf der Parameterdarstellung von Kreisen x y r cos f r sin f displaystyle x y r cos varphi r sin varphi nbsp Fur jedes f displaystyle varphi nbsp zwischen 0 und 2 p displaystyle 2 pi nbsp werden in bestimmten Abstanden die x y Koordinaten gemass dieser Formel berechnet und die entsprechenden Pixel eingefarbt Kreise mit beliebigem Mittelpunkt konnen durch eine einfache Koordinatenverschiebung gezeichnet werden Diese Methode ist sehr ineffizient da sie die langsamen Cosinus und Sinusfunktionen verwendet Eine andere Moglichkeit ist die Koordinatengleichung des Kreises x 2 y 2 r 2 displaystyle x 2 y 2 r 2 nbsp nach y displaystyle y nbsp aufzulosen y r 2 x 2 displaystyle y pm sqrt r 2 x 2 nbsp Hier wird fur jedes x displaystyle x nbsp zwischen 0 displaystyle 0 nbsp und r displaystyle r nbsp y displaystyle y nbsp berechnet Diese Methode ist wegen der Wurzel ebenfalls ineffizient und lasst zudem fur x displaystyle x nbsp nahe r displaystyle r nbsp Lucken Die soeben beschriebenen Algorithmen konnen durch die Nutzung von Symmetrieeigenschaften verbessert werden Tatsachlich besitzt jedes Pixel auf dem Kreis sieben weitere symmetrische Pixel die sich trivial berechnen lassen Es genugt demnach nur einen Achtelkreis zu zeichnen und anstatt nur einem Pixel folgende acht Pixel einzufarben x y y x y x x y x y y x y x x y Diese Methode lost ausserdem das Problem der Lucken bei der eben beschriebenen Methode Methode von Metzger Bearbeiten nbsp Wahl des nachsten Pixels bei der Methode von MetzgerEine fruhe Methode zum Rastern von Kreisen wurde 1969 von Metzger vorgestellt 1 Hierbei wird ausgehend vom aktuellen Pixel der Koordinaten x i y i displaystyle x i y i nbsp zwischen den beiden Pixeln die sich ausserhalb x i y i 1 displaystyle x i y i 1 nbsp und innerhalb x i 1 y i 1 displaystyle x i 1 y i 1 nbsp des Kreises befinden gewahlt Wenn R I displaystyle R I nbsp der Abstand des inneren und R A displaystyle R A nbsp der Abstand des ausseren Pixels zum Kreismittelpunkt ist so wird dasjenige Pixel gewahlt dessen Abstand naher am Kreisradius liegt Beispielsweise wird das aussere Pixel gewahlt falls r R I gt R A r displaystyle r R I gt R A r nbsp Unter Anwendung des Satzes des Pythagoras lasst sich letztere Bedingung folgendermassen umformen 2 r gt x i 2 y i 1 2 x i 1 2 y i 1 2 displaystyle 2r gt sqrt x i 2 y i 1 2 sqrt x i 1 2 y i 1 2 nbsp Mit Hilfe der Dreiecksungleichung die hier fur alle r gt 1 25 displaystyle r gt 1 25 nbsp gultig ist ergibt sich 4 r 2 gt x i 1 2 2 y i 2 2 displaystyle 4r 2 gt x i 1 2 2y i 2 2 nbsp Zur Umsetzung der Quadrierungen sind allerdings langsame Multiplikationen erforderlich Diese wurden sich durch die inkrementelle Berechnung der Bedingung vermeiden lassen Metzger formulierte allerdings keine derartige Losung Methode von Horn Bearbeiten nbsp Rastern eines Kreises mit der Methode von HornEin Algorithmus der nur Additionen und Subtraktionen verwendet wurde 1976 von Horn vorgestellt 2 Bei Horns Verfahren befinden sich die einzufarbenden Pixel innerhalb eines ein Pixel breiten Bereichs um den idealen Kreisbogen Wenn x i y i displaystyle x i y i nbsp das aktuelle Pixel ist dann wird die Position des direkt daruberliegenden Pixels x i y i 1 displaystyle x i y i 1 nbsp mit dem rechten Rand dieses Bereichs verglichen Liegt es innerhalb des Bereichs wird dieses Pixel gewahlt Liegt das Pixel ausserhalb so wird das links liegende Pixel x i 1 y i 1 displaystyle x i 1 y i 1 nbsp gewahlt Auf letzteren Fall lasst sich unter Einfuhrung der Kontrollvariable d displaystyle d nbsp folgendermassen testen d i x i 1 2 2 y i 2 r 2 gt 0 displaystyle textstyle d i x i frac 1 2 2 y i 2 r 2 gt 0 nbsp Ein inkrementeller Algorithmus ergibt sich durch die Betrachtung der Differenz d i 1 d i displaystyle d i 1 d i nbsp bei beiden moglichen Fallen Bei jedem Schritt wird d displaystyle d nbsp um 2 y i 1 displaystyle 2y i 1 nbsp erhoht wenn das linke Pixel gewahlt wird subtrahiert man 2 x i 2 displaystyle 2x i 2 nbsp Der Anfangswert der Kontrollvariable betragt r 1 4 displaystyle textstyle r frac 1 4 nbsp kann aber fur Kreise mit ganzzahligen Mittelpunkten und Radien auf r displaystyle r nbsp gerundet werden Der komplette Algorithmus lautet damit d r x r y 0 Wiederhole bis y gt x Pixel x y sowie symmetrische Pixel einfarben d d 2 y 1 y y 1 Wenn d gt 0 d d 2 x 2 x x 1 Optimierung fur den Schritt d gt 0 displaystyle d gt 0 nbsp Wenn man die Zeile x x 1 displaystyle x x 1 nbsp mit der daruberliegenden vertauscht kann man die Operation 2 displaystyle 2 nbsp einsparen Wenn zuvor also x displaystyle x nbsp um 1 erniedrigt wurde ist das 2 displaystyle 2 nbsp automatisch schon enthalten Von x displaystyle x nbsp wird in beiden Versionen 1 abgezogen Trotz Vertauschung der Zeilen bleibt also das Endergebnis fur x displaystyle x nbsp gleich Fur d displaystyle d nbsp andert sich jetzt aber etwas Statt mit dem einfachen x displaystyle x nbsp wird in dieser Zeile mit dem um 1 reduzierten x displaystyle x nbsp gearbeitet mit x 1 displaystyle x 1 nbsp Von d displaystyle d nbsp wird jetzt 2 x 1 2 x 2 displaystyle 2 x 1 2x 2 nbsp abgezogen d d 2 x 2 displaystyle d d 2x 2 nbsp Klammern entfernen entspricht d d 2 x 2 displaystyle d d 2x 2 nbsp Man kann also sehen dass fur d displaystyle d nbsp der gleiche Wert wie in der unoptimierten Version errechnet wird Damit ist gezeigt dass das Endergebnis sich algorithmisch nicht von der unoptimierten Version unterscheidet Optimiert sieht das dann so aus d r x r y 0 Wiederhole bis y gt x Pixel x y sowie symmetrische Pixel einfarben d d 2 y 1 y y 1 Wenn d gt 0 x x 1 d d 2 x Midpoint Algorithmus Bearbeiten nbsp Wahl des nachsten Pixels beim Midpoint Algorithmus nbsp Iterationsweise Fortschreiten des Midpoint Algorithmus r 23 p x displaystyle r 23 mathrm px nbsp Nur der grune Achtelkreis wird tatsachlich berechnet er wird einfach durch Spiegelung auf die anderen Achtelkreise kopiert 1964 und 1977 stellte Bresenham einen weiteren Algorithmus vor 3 4 5 siehe auch Bresenham Algorithmus Ahnlich wie Metzger wahlt er Pixel auf der Basis ihrer Entfernung zum Kreismittelpunkt aus Ein einfacherer aquivalenter Algorithmus bedient sich der Midpoint Formulierung bei der der Mittelpunkt zwischen den beiden nachsten Pixeln betrachtet wird 6 Der Midpoint Algorithmus rastert den Kreisbogen ausgehend vom Pixel mit grosster y Koordinate Ausgegangen wird von einer impliziten Form der Koordinatengleichung des Kreises F x y x 2 y 2 r 2 displaystyle F x y x 2 y 2 r 2 nbsp F displaystyle F nbsp ist 0 auf dem Kreis positiv ausserhalb und negativ innerhalb des Kreises Bei jedem Schritt wird zwischen dem ostlichen und dem sudostlichen Pixel gewahlt In diese Gleichung werden die Koordinaten des Mittelpunkts eingesetzt d i F x i 1 y i 1 2 x i 1 2 y i 1 2 2 r 2 displaystyle textstyle d i F x i 1 y i frac 1 2 x i 1 2 y i frac 1 2 2 r 2 nbsp Bei d i lt 0 displaystyle d i lt 0 nbsp wird Pixel O gewahlt im anderen Fall SO Auch hier ist ein inkrementeller Algorithmus moglich Die Anderung der Kontrollvariable hangt von der Wahl des Pixels ab D O d i 1 d i F x i 2 y i 1 2 d i 2 x i 3 displaystyle textstyle Delta O d i 1 d i F x i 2 y i frac 1 2 d i 2x i 3 nbsp D S O d i 1 d i F x i 2 y i 3 2 d i 2 x i 2 y i 5 displaystyle textstyle Delta SO d i 1 d i F x i 2 y i frac 3 2 d i 2x i 2y i 5 nbsp Der Anfangswert der Kontrollvariable betragt 5 4 r displaystyle textstyle frac 5 4 r nbsp Fur die ganzzahlige Rasterung lasst sich der Bruch vermeiden indem von d 1 4 displaystyle textstyle frac 1 4 nbsp abgezogen wird Dadurch andert sich der Anfangswert in 1 r displaystyle 1 r nbsp und der Vergleich d i lt 0 displaystyle d i lt 0 nbsp in d i lt 1 4 displaystyle textstyle d i lt frac 1 4 nbsp welcher sich durch Rundung in d i lt 0 displaystyle d i lt 0 nbsp umwandeln lasst Der resultierende Algorithmus ist Horns Methode sehr ahnlich Im Gegensatz zum Midpoint Algorithmus fur Linien siehe Rasterung von Linien sind D O displaystyle Delta O nbsp und D S O displaystyle Delta SO nbsp nicht konstant sondern hangen von der aktuellen Position ab Es ist daher moglich Differenzen zweiter Ordnung zu betrachten bei der D O displaystyle Delta O nbsp und D S O displaystyle Delta SO nbsp selbst inkrementell berechnet werden Mit diesem Algorithmus wird die Initialisierung aufwandiger innerhalb der Schleife spart man im Falle der Wahl von SO eine Addition Auf dieses Verfahren hat IBM Bresenhams damaliger Arbeitgeber in mehreren Staaten Softwarepatente eingereicht darunter auch 1982 beim Europaischen Patentamt 7 8 9 Eine mogliche Implementierung des Midpoint Algorithmus vom Bresenham in der Programmiersprache C zeigt das folgende Beispiel 10 public void DrawCircle Color image int centerX int centerY int radius Color color int d 5 radius 4 4 Kontrollvariable int x 0 int y radius do Pruft ob das Pixel innerhalb der Grenzen des Bilds liegt und setzt gegebenenfalls ein Pixel in jedem Oktanten if centerX x gt 0 amp amp centerX x lt image Width 1 amp amp centerY y gt 0 amp amp centerY y lt image Height 1 image centerX x centerY y color 7 Oktant if centerX x gt 0 amp amp centerX x lt image Width 1 amp amp centerY y gt 0 amp amp centerY y lt image Height 1 image centerX x centerY y color 2 Oktant if centerX x gt 0 amp amp centerX x lt image Width 1 amp amp centerY y gt 0 amp amp centerY y lt image Height 1 image centerX x centerY y color 6 Oktant if centerX x gt 0 amp amp centerX x lt image Width 1 amp amp centerY y gt 0 amp amp centerY y lt image Height 1 image centerX x centerY y color 3 Oktant if centerX y gt 0 amp amp centerX y lt image Width 1 amp amp centerY x gt 0 amp amp centerY x lt image Height 1 image centerX y centerY x color 8 Oktant if centerX y gt 0 amp amp centerX y lt image Width 1 amp amp centerY x gt 0 amp amp centerY x lt image Height 1 image centerX y centerY x color 1 Oktant if centerX y gt 0 amp amp centerX y lt image Width 1 amp amp centerY x gt 0 amp amp centerY x lt image Height 1 image centerX y centerY x color 4 Oktant if centerX y gt 0 amp amp centerX y lt image Width 1 amp amp centerY x gt 0 amp amp centerY x lt image Height 1 image centerX y centerY x color 5 Oktant if d lt 0 Pixel O wahlen d 2 x 1 else Pixel SO wahlen d 2 x y 1 y x while x lt y Methode von Jesko Bearbeiten Die Algorithmik ist weitestgehend schon erklart jedoch gibt es noch weitere Optimierungen Die neue vorgestellte Methode 11 kommt mit nur 5 Rechenoperationen pro Schritt fur 8 Pixel aus und ist damit gerade fur niedrigperformante Systeme bestens geeignet In der Wenn Operation wird nur das Vorzeichen gepruft positiv Ja oder Nein und es gibt eine Variablenzuweisung was auch nicht als Rechenoperation gilt Die Initialisierung in der ersten Zeile Geschiebe um 4 Bits nach rechts ist nur der Schonheit geschuldet und nicht wirklich notig Also bleibt zahlbare Operationen in der Hauptschleife Der Vergleich x gt y gilt als Subtraktion x y gt 0 y t1 y t1 x x Operationen 5 t1 r 16 x r y 0 Wiederhole solange x gt y Pixel x y sowie symmetrische Pixel einfarben y y 1 t1 t1 y t2 t1 x Wenn t2 gt 0 t1 t2 x x 1 Sonstiges Bearbeiten Die Anzahl der arithmetischen Operationen bei Bresenhams Algorithmus lasst sich weiter verringern 12 Es wurden noch andere schnellere Methoden zur Rasterung vorgestellt die mehrere Pixel auf einmal zeichnen Wu und Rokne stellten 1987 ein Doppelschrittverfahren vor bei dem je Schleifendurchlauf zwei Pixel eingefarbt werden 13 Yao und Rokne zeigten 1995 wie auch bei der Rasterung von Kreisen ganze Pixelreihen auf einmal eingefarbt werden konnen 14 Es gibt mehrere Methoden gefullte Kreise zu zeichnen Eine triviale Methode besteht darin beim Zeichnen eines Oktanten nicht nur ein Pixel pro Schleifendurchlauf sondern alle Pixel einer Reihe zu zeichnen Durch die Symmetrie wird der gesamte Kreis gefullt 15 Ebenfalls moglich ist das Zeichnen einer minimalen Anzahl von Rechtecken Nachteil ist hier dass viele Pixel mehrmals eingefarbt werden 16 Anstatt einen Kreis durch seinen Mittelpunkt und seinen Radius zu definieren ist es auch moglich einen Mittelpunkt und einen beliebigen auf dem Kreis liegenden Punkt anzugeben Dabei muss aber beachtet werden dass bestimmte Punkte des Rasters gar nicht auf einem Kreis mit ganzzahligem Radius liegen Algorithmen die Kreise nach diesem Schema zeichnen mussen auf ungultige Anfangspunkte testen 17 Antialiasing BearbeitenField stellte eine Methode zum Antialiasing von Kreisen mittels ungewichteter Flachenabtastung vor bei der der Kreis fur jedes Pixel mit einem Trapez angenahert wird 18 Der Flachenanteil des Trapezes innerhalb eines Quadrats mit einem Pixel Kantenlange bestimmt den Farbwert Dank inkrementeller Berechnung benotigt der Algorithmus nur Multiplikationen und Additionen Auch der Gupta Sproull Algorithmus fur Linien kann auf Kreise erweitert werden 19 Im Gegensatz zu Linien hangt der Wert des Glattungskerns nicht nur von der Distanz zur Kurve sondern auch vom Radius ab Daher sind verschiedene Tabellen fur verschiedene Radien notwendig Fur grossere Kreise kann eine einzige Tabelle verwendet werden bei der die Krummung vernachlassigt wird Siehe auch BearbeitenBresenham Algorithmus Rasterung von Linien Rasterung von PolygonenLiteratur BearbeitenJames D Foley u a Computer Graphics Principles and Practice in C Addison Wesley Reading MA 1995 ISBN 978 0 201 84840 3 David F Rogers Procedural Elements for Computer Graphics WCB McGraw Hill Boston 1998 ISBN 978 0 07 053548 0 James F Blinn How Many Ways Can You Draw a Circle In IEEE Computer Graphics and Applications 7 8 August 1987 S 39 44 ISSN 0272 1716Einzelnachweise Bearbeiten Richard A Metzger Computer generated graphic segments in a raster display In AFIPS Conference Proceedings Vol 34 Spring Joint Computer Conference 1969 S 161 172 AFIPS Press Montvale 1969 B K P Horn Circle Generators for Display Devices In Computer Graphics and Image Processing 5 2 June 1976 S 280 288 ISSN 0146 664X csail mit edu PDF 580 kB Jack Bresenham A linear incremental algorithm for digitally plotting circles Technical Report TR02 286 IBM General Products Division San Jose CA 27 Januar 1964 Jack Bresenham A linear algorithm for incremental digital display of circular arcs In Communications of the ACM 20 2 1977 S 100 106 ISSN 0001 0782 Zur Geschichte der Veroffentlichung dieses Algorithmus siehe tog acm org Memento des Originals vom 23 Dezember 2007 im Internet Archive nbsp Info Der Archivlink wurde automatisch eingesetzt und noch nicht gepruft Bitte prufe Original und Archivlink gemass Anleitung und entferne dann diesen Hinweis 1 2 Vorlage Webachiv IABot tog acm org James D Foley u a Computer Graphics Principles and Practice in C S 83 87 Patent US4371933 Patent JP57064778 Patent EP0049360 Rosetta Code Bitmap Midpoint circle algorithm Zur Geschichte der Veroffentlichung dieses Algorithmus siehe https schwarzers com algorithms Yevgeni P Kuzmin An Efficient Circle Drawing Algorithm Computer Graphics Forum 9 4 December 1990 333 336 ISSN 0167 7055 X Wu J G Rokne Double Step Incremental Generation of Lines and Circles In Computer Vision Graphics and Image Processing 37 3 March 1987 S 331 344 ISSN 0734 189X Chengfu Yao Jon G Rokne Hybrid Scan Conversion of Circles In IEEE Transactions on Visualization and Computer Graphics 1 4 December 1995 S 311 318 ISSN 1077 2626 M Doros Algorithms for Generation of Discrete Circles Rings and Disks In Computer Graphics and Image Processing 10 1979 S 366 371 N I Badler Disk Generators for a Raster Display Device In Computer Graphics and Image Processing 6 1977 S 589 593 Marek Doros On Some Properties of the Generation of Discrete Circular Arcs on a Square Grid In Computer Vision Graphics and Image Processing 28 3 December 1984 S 377 383 D Field Algorithms for Drawing Anti Aliased Circles and Ellipses In Computer Vision Graphics and Image Processing 33 1 January 1986 S 1 15 James D Foley u a Computer Graphics Principles and Practice in C S 969 971 Abgerufen von https de wikipedia org w index php title Rasterung von Kreisen amp oldid 239088013