Moin zusammen,

ich will einen Kreis haben, worauf z.B. 8 knoten in gleicher Distanz (jeweils 45 grad) bestimmt wird und danach 8 Kreisbogen, deren Mittelpunkt jeweiligen knoten ist und zwei beide Enden auf dem Rand des ersten Kreises stehen. Mein Kreis:

Open in Online-Editor
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[node distance=5em,every node/.style={circle,draw}]
    \draw[solid] (0,0) circle (102 pt);
\end{tikzpicture}
\end{document}

was ich brauche, soll so aussehen: alt text

herzlichen Dank im Voraus! Viele Grüße

gefragt 25 Apr, 07:01

vague_creature's gravatar image

vague_creature
8519
Akzeptiert: 37%


Das macht man am besten mit einem Clipping-Pfad. Der Clipping-Pfad schneidet nämlich alles weg, was außerhalb liegt. Da dies für den Rest des aktuellen scope gilt ist es am einfachsten immer am Ende den Clipping-Pfad zu setzen. Hier mache ich

Open in Online-Editor
\path[preaction={draw=white},clip] (0,0) circle (4);
\foreach \angle in {0,45,...,325}
  \draw[white] (\angle:4) circle (1);

Man sieht, dass ich nach dem Clipping-Pfad einfach ganze Kreise zeichne, die über den Kreis hinausragen. Alles was übersteht wird aber abgeschnitten.

Open in Online-Editor
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows.meta}
\definecolor{bottom}{HTML}{76769A}
\definecolor{top}{HTML}{39396B}
\begin{document}
\begin{tikzpicture}[>={Stealth[round]}]
  % Backkground
  \shade[top color=top,bottom color=bottom] (-4.5,-4.5) rectangle (4.5,4.5);
  % Plus marks
  \foreach \angle in {0,45,...,325}
    \draw[white] plot[mark=+] coordinates { (\angle:4) };
  % Coordinate system
  \draw[white] (-.4,-.4) grid[step=.4] (.4,.4);
  \draw[->,yellow,thick] (0,0) -- (1,0) node[font=\tiny\sffamily,above] {H};
  \draw[->,yellow,thick] (0,0) -- (0,1) node[font=\tiny\sffamily,left] {V};
    % Circle (clipping path)
    \path[preaction={draw=white},clip] (0,0) circle (4);
    % Inner circles
    \foreach \angle in {0,45,...,325}
      \draw[white] (\angle:4) circle (1);
\end{tikzpicture}
\end{document}

alt text

Um die Bereiche der inneren Kreis frei zu lassen kann man den äußeren Kreis gestrichelt zeichnen. Die Werte für das Pattern können sicher berechnet werden, hier sind sie geraten.

Open in Online-Editor
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,intersections}
\definecolor{bottom}{HTML}{76769A}
\definecolor{top}{HTML}{39396B}
\begin{document}
\begin{tikzpicture}[>={Stealth[round]}]
  % Backkground
  \shade[top color=top,bottom color=bottom] (-4.5,-4.5) rectangle (4.5,4.5);
  % Plus marks
  \foreach \angle in {0,45,...,325}
    \draw[white] plot[mark=+] coordinates { (\angle:4) };
  % Coordinate system
  \draw[white] (-.4,-.4) grid[step=.4] (.4,.4);
  \draw[->,yellow,thick] (0,0) -- (1,0) node[font=\tiny\sffamily,above] {H};
  \draw[->,yellow,thick] (0,0) -- (0,1) node[font=\tiny\sffamily,left] {V};
  % Circle (clipping path)
  \path[preaction={
    draw=white,
    dash pattern=on 1.15cm off 1.99cm,
    dash phase=-1cm
  },clip] (0,0) circle (4);
  % Inner circles
  \foreach \angle in {0,45,...,325}
    \draw[white] (\angle:4) circle (1);
\end{tikzpicture}
\end{document}

alt text

Permanenter link

beantwortet 25 Apr, 08:00

Henri's gravatar image

Henri
10.0k31730

bearbeitet 25 Apr, 08:53

das war geil! vielen Dank! nur noch eine Frage! wie kann ich die Teilen vom großen Kreis unter den kleinen Kreisen löschen und letztendlich irgendwas wie ein Zahnrad haben?

(25 Apr, 08:21) vague_creature

@vague_creature Das ist wiederum überhaupt nicht trivial. Es gibt nämlich kein »reverse clipping«. Das heißt man muss alle Schnittpunkte von Hand ausrechnen und dann entsprechende Kreissegmente dazwischen zeichnen. Alternativ kann man bei einfarbigem Hintergrund die inneren Kreise mit der Hintergrundfrage füllen.

(25 Apr, 08:31) Henri
1

@vague_creature: Das ist nun eigentlich eine ganz andere Frage als die ursprüngliche. Genauer gesagt ist das ein XY-Problem. Du hast also oben ein Stück Deiner Lösungsidee gefragt, statt das eigentlichen Problem – wie man ein Zahnrad zeichnet – darzustellen.

BTW: Die Schnittpunkte der Kreise sollten sich in der Schleife über die kleinen Kreise ermitteln lassen.

(25 Apr, 08:58) saputello

Wenn ich die Frage und die Kommentare richtig verstanden habe, dann sollen aus einem großen Kreis eine gewisse Anzahl kleinere Teilkreise ausgeschnitten werden, deren Mittelpunkte gleichmäßig auf den Rand des großen Kreises verteilt sind. Wenn eine solche Zeichnung mehrfach mit unterschiedlichen Radien und Anzahlen der kleinen Kreise benötigt wird, bietet es sich an ein pic dafür zu definieren.

alt text

Code:

Open in Online-Editor
\documentclass[margin=5pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows.meta}
\definecolor{bottom}{HTML}{76769A}
\definecolor{top}{HTML}{39396B}

\tikzset{
  pics/zahnrad/.style n args={3}{code={
    % Plus marks
    \foreach[evaluate=\i as \angle using {360/#3*(\i-1)}] \i in {1,...,#3}
      \path[pic actions,fill=none] plot[mark=+] coordinates { (\angle:#1) };
    \begin{scope}[overlay]
      % reverse clipping der kleinen Kreise
      \foreach[evaluate=\i as \angle using {360/#3*(\i-1)}] \i in {1,...,#3}
          \path[clip] 
            (\angle:#1)circle[radius=#2]
            ([shift={(-\pgflinewidth,-\pgflinewidth)}]-#1,-#1)
              rectangle ([shift={(\pgflinewidth,\pgflinewidth)}]#1,#1)
          ;
      % Reststücke großer Kreis
      \path[pic actions](0,0)circle[radius=#1];
    \end{scope}
    % Kleine Teilkreise
    \path[
      path picture={
        \foreach[evaluate=\i as \angle using {360/#3*(\i-1)}] \i in {1,...,#3}
          \path[pic actions,fill=none] (\angle:#1)circle[radius=#2];
      }](0,0)circle[radius=#1];
  }},
   pics/koordinatensystem/.style n args={3}{code={
    \path[draw,gitter](-#1,-#1)grid[step=#1](#1,#1);
    \path[pic actions](0,0)--(2.5*#1,0)node[draw=none,fill=none,above]{#2};
    \path[pic actions](0,0)--(0,2.5*#1)node[draw=none,fill=none,left]{#3};
  }},
  gitter/.style={thin,-,gridoption},
  gridoption/.style={gitter/.append style={#1}}
}

\begin{document}
\begin{tikzpicture}[>={Stealth[round]},very thick]
% Hintergrund
\shade[top color=top,bottom color=bottom] (-10,-5) rectangle (10,5);

\foreach[count=\i,evaluate=\anzahl as \Anzahl using int(\anzahl+\i)] \anzahl in {4,8,10,16}
  \path
    ({-12.5+5*\i},2.5)
      pic[draw=white]{zahnrad={2}{.2}{\anzahl}}
      pic[draw,yellow,very thick,->,font=\bfseries\tiny,gridoption={white}]
        {koordinatensystem={.2}{H}{V}}
    ({-12.5+5*\i},-2.5)
      pic[draw=white,fill=green!50!blue]{zahnrad={2}{.2}{\Anzahl}}
      pic[draw,orange,->,font=\bfseries\tiny,gridoption={white,dotted,thick}]
        {koordinatensystem={.2}{H}{V}}
  ;
\end{tikzpicture}
\end{document}

Dabei wird zum Zeichnen der kleinen Teilkreise path picture genutzt. Dazu ist hier nochmal ein kleines Beispiel:

Open in Online-Editor
\documentclass[margin=5pt]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
  \draw[help lines](-2,-2)grid[step=.5](2,2);
  \draw
    [path picture={
      \fill[orange!30,draw=green!50!blue,very thick]
        (45:1)circle[radius=.5];
    }]
    (0,0)circle[radius=1];
\end{tikzpicture}
\end{document}

alt text

Und dann ist hier außerdem ein Beispiel, wie die kleinen Teilkreise aus dem großen Kreis ausgeschnitten werden können:

Open in Online-Editor
\documentclass[margin=5pt]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}      \draw[help lines](-2,-2)grid[step=.5](2,2);

    \begin{scope}
    \path[clip]
      (45:1)circle[radius=.5]
      (-2,-2)rectangle(2,2)
    ;
    \path[draw,fill=orange!30] (0,0)circle[radius=1];
\end{scope}
\end{tikzpicture}
\end{document}

alt text

Open in Online-Editor
\documentclass[margin=5pt]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
  \draw[help lines](-2,-2)grid[step=.5](2,2);
    \begin{scope}
    \path[clip]
      (45:1)circle[radius=.5]
      (-2,-2)rectangle(2,2)
    ;
    \path[draw,fill=orange!30] (0,0)circle[radius=1];
\end{scope}
\end{tikzpicture}
\end{document}
Permanenter link

beantwortet 25 Apr, 17:47

esdd's gravatar image

esdd
14.2k53251

bearbeitet 26 Apr, 04:57

+1: path picture kannte ich noch gar nicht. Vielen Dank!

(26 Apr, 03:05) Henri
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
×3
×1

Frage gestellt: 25 Apr, 07:01

Frage wurde angeschaut: 764 Mal

Zuletzt aktualisiert: 26 Apr, 04:57