Ich möchte mit TikZ als Bestandteil einer Grafik einen Kreisring zeichnen, also zwei konzentrische Kreise (gemeinsamer Mittelpunkt) und die eingeschlossene Fläche gefärbt. Was so kompliziert klingt, veranschaulicht besser ein Bildentwurf:

Kreisscheibe

Wie stelle ich das am besten an? Einen Pfad festlegen und füllen, oder gefüllte Kreise zeichnen, wobei der kleinere als zweiter gezeichnet wird und so den größeren überschreibt? Die Kreislinien selbst als Begrenzung sind nicht wichtig, die hatte ich im Mal-Programm gezeichnet, um den zu füllenden Bereich zu begrenzen, nur um die farbige Scheibe geht es eigentlich.

gefragt 23 Jul '13, 15:34

Felix's gravatar image

Felix
1.3k225366
Akzeptiert: 89%

bearbeitet 21 Jun, 11:45

saputello's gravatar image

saputello
18.4k22352


Dann wäre das einfachste wohl das hier.

\documentclass{standalone}
\usepackage{tikz}

\begin{document}
  \begin{tikzpicture}
    \draw[yellow,line width=1cm] (0,0) circle[radius=2cm];
  \end{tikzpicture}
\end{document}

Die Details liest Du am besten in der Anleitung von »PGF/TikZ« nach.


Ergebnis

Permanenter link

beantwortet 23 Jul '13, 16:00

Thorsten's gravatar image

Thorsten
1.5k325

bearbeitet 17 Aug '13, 05:12

Clemens's gravatar image

Clemens
19.0k112960

Clever! Einfach eine dicke Kreislinie als Kreisscheibe, da kam ich nicht drauf. Da ich keine Randline brauche, erfüllt das den Zweck am einfachsten.

(23 Jul '13, 16:14) Felix

Was ist aber, wenn doch eine Linie am Rand der Fläche gezeichnet werden soll? Es folgt eine Lösung für beliebige Pfade, die geschnitten werden sollen. (In diesem Fall sind es nur zwei Kreise, die einen gemeinsamen Mittelpunkt haben.

Das Resultat von Thorsten’s Beispiel kann relativ einfach erstellt werden:

\begin{tikzpicture}[even odd rule]
  \fill[yellow] (0,0) circle[radius=2.5]
                      circle[radius=1.5];
\end{tikzpicture}

Die even odd rule sorgt dafür, dass eine zweifache (und damit gerade) Überlagerung von Flächen bewirkt, dass sie eben nicht gefüllt wird. Die Option kann selbstverständlich auch nur am Pfad angegeben sein.

Die Standard-Regel für Füllungen ist die nonzero rule, die die „Richtung“ von den Pfaden beachtet. Im obigen Fall (circles werden immer im mathematischen Sinne positiv, also gegen den Uhrzeigersinn, gezeichnet) würde das nur eine gemeinsame Fläche ergeben. Zeichnet man den Kreis allerdings mit dem Uhrzeigersinn (also negativ), kann man auch die nonzero rule verwenden:

\begin{tikzpicture}
  \fill[yellow] (0,0)   circle[radius=2.5]
                (0:1.5) arc   [radius=1.5, start angle=0, delta angle=-360];
\end{tikzpicture}

Zugegebenermaßen, in diesem einfachen Fall nicht sehr komfortabel, kann aber in anderen Fällen sicherlich hilfreich sein.
(Selbst das TikZ-Manual bezeichnet das Vorgehen der nonzero rule als „kompliziert“: „Sounds complicated? It is.“)

Beide TikZ-Pictures ergeben das linke Bild:

alt text       alt text

Fügt man dem Pfad noch ein nicht-none draw hinzu kann man auch die Ränder der Fläche zeichnen lassen. Mit dem Code

\begin{tikzpicture}[ultra thick, even odd rule]
  \path[fill=yellow,draw=blue] (0,0) circle[radius=2.5]
                                     circle[radius=1.5];
\end{tikzpicture}

lässt sich das zweite Bild von oben erstellen.

Möchte man die Begrenzungslinien allerdings in unterschiedlicher Farbe oder Art zeichnen, muss dies in einem separatem Pfad erfolgen. Damit man denselben Pfad nicht zweimal angeben muss (und somit Fehler und Aufwand bei Korrekturen verhindert), empfehle ich den Pfad mittels eines insert path-Styles zu speichern:

\begin{tikzpicture}[ultra thick, even odd rule]
  \path[fill=yellow] [saveuse path={aussenRing}{(0,0) circle[radius=2.5]}]
                     [saveuse path={innenRing} {      circle[radius=1.5]}];

  \draw[red]   [aussenRing];
  \draw[green] [innenRing];
\end{tikzpicture}

Man beachte, dass der saveuse path den benannten Style (hier aussenRing und innenRing) global definiert und somit womöglicherweise gleichnamige, gespeicherten Pfade aus einem höheren Scope überschreibt.

Referenz:

Gesamter Code

\documentclass[tikz,convert=false]{standalone}
\tikzset{
  saveuse path/.code 2 args={
    \pgfkeysalso{#1/.estyle={insert path={#2}}}%
    \global\expandafter\let\csname pgfk@\pgfkeyscurrentpath/.@cmd\expandafter\endcsname %
                           \csname pgfk@\pgfkeyscurrentpath/.@cmd\endcsname
    \pgfkeysalso{#1}%
  }
}
\begin{document}
  \begin{tikzpicture}[ultra thick, even odd rule]
    \path[fill=yellow] [saveuse path={aussenRing}{(0,0) circle[radius=2.5]}]
                       [saveuse path={innenRing} {      circle[radius=1.5]}];

    \draw[red]   [aussenRing];
    \draw[green] [innenRing];
  \end{tikzpicture}
  \begin{tikzpicture}[ultra thick, even odd rule]
    \path[fill=yellow,draw=blue] (0,0) circle[radius=2.5]
                                       circle[radius=1.5];
  \end{tikzpicture}
  \begin{tikzpicture}
    \fill[yellow] (0,0)   circle[radius=2.5]
                  (0:1.5) arc   [radius=1.5, start angle=0, delta angle=-360];
  \end{tikzpicture}
\end{document}

Ergebnis

alt text

Permanenter link

beantwortet 25 Jul '13, 22:32

Qrrbrbirlbel's gravatar image

Qrrbrbirlbel
2.9k1415

bearbeitet 17 Aug '13, 05:15

Clemens's gravatar image

Clemens
19.0k112960

Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Aktuelle Buch-Infos

LaTeX Cookbook

LaTeX Beginners Guide

Limitierter Rabatt ebook
50% Coupon code tDRet6Y

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs füge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×492
×17
×2

Frage gestellt: 23 Jul '13, 15:34

Frage wurde angeschaut: 9,054 Mal

Zuletzt aktualisiert: 21 Jun, 11:45