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 '16, 13:01

vague_creature's gravatar image

vague_creature
21132226
Akzeptiert-Rate: 0%


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 '16, 14:00

Henri's gravatar image

Henri
15.7k133943
Akzeptiert-Rate: 46%

bearbeitet 25 Apr '16, 14: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 '16, 14: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 '16, 14: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 '16, 14: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 '16, 23:47

esdd's gravatar image

esdd
17.8k284257
Akzeptiert-Rate: 62%

bearbeitet 26 Apr '16, 10:57

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

(26 Apr '16, 09:05) Henri
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

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ügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×730
×20
×3
×1

gestellte Frage: 25 Apr '16, 13:01

Frage wurde gesehen: 7,920 Mal

zuletzt geändert: 26 Apr '16, 10:57