tikz: Bullseye-Wagen mit Pfeilen

tikz: Bullseye-Wagen mit Pfeilen

Gewünschte Ausgabe

Bildbeschreibung hier eingeben

Mein MWE

Den Code habe ich ausgeliehen vonHier.

% Dartboard.
% Author: Roberto Bonvallet <[email protected]>
% Under Creative Commons attribution license.

\documentclass[tikz]{standalone}
\usepackage{mathpazo}

\tikzstyle{wired}=[draw=gray!30, line width=0.15mm]
\tikzstyle{number}=[anchor=center, color=white]
% Sectors are numbered 0-19 counterclockwise from the top.

% \strip{color}{sector}{outer_radius}{inner_radius}
\newcommand{\strip}[4]{
    \filldraw[#1, wired]
      ({18 *  #2}      :                   #3) arc
      ({18 *  #2}      : {18 * (#2 + 1)} : #3) --
      ({18 * (#2 + 1)} :                   #4) arc
      ({18 * (#2 + 1)} : {18 *  #2}      : #4) -- cycle;
}

% \sector{color}{sector}{radius}
\newcommand{\sector}[3]{
    \filldraw[#1, wired]
      (0, 0) --
      ({18 * #2} :                   #3) arc
      ({18 * #2} : {18 * (#2 + 1)} : #3) -- cycle;
}

\begin{document}

% 81 degrees = 4.5 sectors.
% The rotation leaves 20 at the top.
\begin{tikzpicture}[rotate=81, scale=.14]

  % These are the official dartboard dimensions as per BDO's regulations.

  % The whole board's background.
  \fill[black] (0, 0) circle (225.5mm);

  % Even sections.
  \foreach\i in {0,2,...,18} {
    \sector{black}{\i}{162mm}
    \strip{red}{\i}{170mm}{162mm} % Double strip.
    \strip{red}{\i}{107mm}{ 99mm} % Treble strip.
  }

  % Odd sections.
  \foreach\i in {1,3,...,19} {
    \sector{white}{\i}{162mm}
    \strip{green}{\i}{170mm}{162mm} % Double strip.
    \strip{green}{\i}{107mm}{ 99mm} % Treble strip.
  }

  % Bull's ring and eye.
  \filldraw[green, wired] (0, 0) circle (15.9mm);
  \filldraw[red,   wired] (0, 0) circle (6.35mm);

  % Labels.
  \foreach \sector/\label in {%
      0/20,  1/ 1,  2/18,  3/ 4,  4/13,
      5/ 6,  6/10,  7/15,  8/ 2,  9/17,
     10/ 3, 11/19, 12/ 7, 13/16, 14/ 8,
     15/11, 16/14, 17/ 9, 18/12, 19/ 5}%
  {
    \node[number] at ({18 * (-\sector + .5)} : 197.75mm) {\label};
  }
\end{tikzpicture}

\end{document}

Ausgabe

Bildbeschreibung hier eingeben

Fragen

  1. Mein MWE produziert dort falsche Seiten. Wie kann ich das korrigieren?
  2. Wie setzt man Pfeile?

Vielen Dank im Voraus für Ihre Hilfe.

Antwort1

Über die Darts:

\documentclass{article}
\usepackage{tikz}
\begin{document}
\colorlet{gold}{orange!50!yellow}
\def\dart#1#2#3{ % 1 = tip position, 2 = rotation angle, 3 = dart color
  \begin{scope}[rotate=#2]
  \colorlet{dart color}{#3}
  % tip
  \fill[top color=black!30, bottom color=black!60, middle color=white] 
     (#1) ++(0,0) -- ++(1,0.04) -- ++(0,-0.04) -- cycle;
  % golden mass
  \fill[top color=gold, bottom color=gold!60!black, middle color=gold!20!white]
    (#1) ++(0.99,0) to[out=90, in=180] ++(0.2, 0.2) -- ++(0.5, 0) -- ++(0, -0.4) -- ++(-0.5,0) to[out=180, in=-90] ++(-0.2,0.2) -- cycle;
  % wings
  \fill[top color=dart color!20!white, bottom color=dart color!10!black, middle color=dart color!70!white] 
    (#1) ++(4.5,0) to[out=60, in=150] ++(3.1,1) -- ++(-0.3,-1) -- cycle;
  \fill[top color=dart color!20!black, bottom color=dart color] 
    (#1) ++(4.5,0) to[out=-60, in=-150] ++(3.1,-1) -- ++(-0.3,1) -- cycle;
  % body
  \fill[top color=dart color!20!white, bottom color=dart color!10!black, middle color=dart color] 
    (#1) ++(1.7,0.2) .. controls +(1,.2) and +(-4,.4) .. ++(6,-0.2) .. controls +(-4, -.4) and +(1,-.2) .. ++(-6, -0.2) -- cycle;
\end{scope}
}

\begin{tikzpicture} % Demo
\dart{0,0}{30}{yellow}
\dart{0,0}{-10}{red}
\dart{0,0}{10}{green!70!cyan}
\dart{0,0}{-25}{blue!50!cyan}
\dart{0,0}{30}{yellow}
\end{tikzpicture}
\end{document}

Ergebnis:

Darts

Integration mit dem Bullseye:

\documentclass{article}
\usepackage{tikz}
\begin{document}
\colorlet{gold}{orange!50!yellow}
\def\dart#1#2#3{ % 1 = tip position, 2 = rotation angle, 3 = dart color
  \begin{scope}[rotate=#2, scale=0.3]
  \colorlet{dart color}{#3}
  % tip
  \fill[top color=black!30, bottom color=black!60, middle color=white] 
     (#1) ++(0,0) -- ++(1,0.04) -- ++(0,-0.04) -- cycle;
  % golden mass
  \fill[top color=gold, bottom color=gold!60!black, middle color=gold!20!white]
    (#1) ++(0.99,0) to[out=90, in=180] ++(0.2, 0.2) -- ++(0.5, 0) -- ++(0, -0.4) -- ++(-0.5,0) to[out=180, in=-90] ++(-0.2,0.2) -- cycle;
  % wings
  \fill[top color=dart color!20!white, bottom color=dart color!10!black, middle color=dart color!70!white] 
    (#1) ++(4.5,0) to[out=60, in=150] ++(3.1,1) -- ++(-0.3,-1) -- cycle;
  \fill[top color=dart color!20!black, bottom color=dart color] 
    (#1) ++(4.5,0) to[out=-60, in=-150] ++(3.1,-1) -- ++(-0.3,1) -- cycle;
  % body
  \fill[top color=dart color!20!white, bottom color=dart color!10!black, middle color=dart color] 
    (#1) ++(1.7,0.2) .. controls +(1,.2) and +(-4,.4) .. ++(6,-0.2) .. controls +(-4, -.4) and +(1,-.2) .. ++(-6, -0.2) -- cycle;
\end{scope}
}

% The code from next line to line marked with % <<<END is from:
% Dartboard.
% Author: Roberto Bonvallet <[email protected]>
% Under Creative Commons attribution license.    
\tikzstyle{wired}=[draw=gray!30, line width=0.15mm]
\tikzstyle{number}=[anchor=center, color=white]
% Sectors are numbered 0-19 counterclockwise from the top.

% \strip{color}{sector}{outer_radius}{inner_radius}
\newcommand{\strip}[4]{
    \filldraw[#1, wired]
      ({18 *  #2}      :                   #3) arc
      ({18 *  #2}      : {18 * (#2 + 1)} : #3) --
      ({18 * (#2 + 1)} :                   #4) arc
      ({18 * (#2 + 1)} : {18 *  #2}      : #4) -- cycle;
}

% \sector{color}{sector}{radius}
\newcommand{\sector}[3]{
    \filldraw[#1, wired]
      (0, 0) --
      ({18 * #2} :                   #3) arc
      ({18 * #2} : {18 * (#2 + 1)} : #3) -- cycle;
}


% 81 degrees = 4.5 sectors.
% The rotation leaves 20 at the top.
\begin{tikzpicture}
% Next scope and its options are not from the original code,
% but added here to better integrate with my darts
\begin{scope}[rotate=81,scale=0.14,  yscale=0.7]
  % These are the official dartboard dimensions as per BDO's regulations.

  % The whole board's background.
  \fill[black] (0, 0) circle (225.5mm);

  % Even sections.
  \foreach\i in {0,2,...,18} {
    \sector{black}{\i}{162mm}
    \strip{red}{\i}{170mm}{162mm} % Double strip.
    \strip{red}{\i}{107mm}{ 99mm} % Treble strip.
  }

  % Odd sections.
  \foreach\i in {1,3,...,19} {
    \sector{white}{\i}{162mm}
    \strip{green}{\i}{170mm}{162mm} % Double strip.
    \strip{green}{\i}{107mm}{ 99mm} % Treble strip.
  }

  % Bull's ring and eye.
  \filldraw[green, wired] (0, 0) circle (15.9mm);
  \filldraw[red,   wired] (0, 0) circle (6.35mm);

  % Labels.
  \foreach \sector/\label in {%
      0/20,  1/ 1,  2/18,  3/ 4,  4/13,
      5/ 6,  6/10,  7/15,  8/ 2,  9/17,
     10/ 3, 11/19, 12/ 7, 13/16, 14/ 8,
     15/11, 16/14, 17/ 9, 18/12, 19/ 5}%
  {
    \node[number] at ({18 * (-\sector + .5)} : 197.75mm) {\label};
  }
\end{scope}
% <<<END of the code by Roberto Bonvallet

\dart{0,0}{30}{yellow}
\dart{0,0}{-10}{red}
\dart{0,0}{10}{green!70!cyan}
\dart{0,0}{-25}{blue!50!cyan}
\dart{0,0}{30}{yellow}
\end{tikzpicture}
\end{document}

Ergebnis:

Finale

Aktualisieren:

Die „Perspektive“ wurde durch Canvas-Transformationen verbessert. Außerdem wurde ein brauner Kreis hinzugefügt, um der Dartscheibe etwas Tiefe vorzutäuschen:

Neu

Die einzigen Änderungen im Code befinden sich am Anfang von tikzpicture:

\begin{tikzpicture}
% Next scope and its options are not from the original code,
% but added here to better integrate with my darts
\begin{scope}[rotate=81,scale=0.14,  transform canvas={xscale=0.6,xslant=-0.3}]
  % These are the official dartboard dimensions as per BDO's regulations.

  % The whole board's background.
  \fill[brown!80!black] (-1,2) circle (225.5mm);  % <-- Fake "depth"
  \fill[black] (0, 0) circle (225.5mm);

 % The remaining is unchanged...

Aktualisierung 2

(Das Letzte, versprochen ;-))

Ich denke, das Ergebnis lässt sich durch eine Änderung der für die Zahlen verwendeten Schriftart verbessern:

\node[number] at ({18 * (-\sector + .5)} : 197.75mm) {\sffamily\bfseries\large\label};

Letzter

Antwort2

Dies war nur ein Versuch. Ich habe versucht, das Brett schräg zu machen und Zahlen hinzuzufügen. Ich habe das asymptotePaket verwendet. Hier ist der Code:

\documentclass{standalone}
\usepackage{asymptote}
\begin{document}
\begin{asy}
size(3cm);
path p1 = ellipse((1,0), 9, 10);
path p2 = ellipse((1,0), 8.8, 9.8);
path p3 = ellipse((1,0), 7, 8);
draw(rotate(30)*p1);
fill(rotate(30)*p1, gray);
draw(rotate(30)*p2);
fill(rotate(30)*p2, white);
draw(rotate(30)*p3);
fill(rotate(30)*p2);
fill(rotate(30)*p3, white);
label("20", (1,9),white);
label("8", (9,1),white);
label("11", (1,-8.2),white);
label("2", (-7.5,0.8),white);
\end{asy}
\end{document}

Die generierte Ausgabe ist:

Bildbeschreibung hier eingeben

Dies scheint bei herkömmlichen eine sehr mühsame Aufgabe zu sein TikZ. Mit dem asymptotePaket75 %ist möglich (Experten können bis zu 100 % erreichen, brauchen aber viel Geduld). Ich habe die Methode gezeigt, um schräge Ellipsen zu zeichnen und die Schnittbereiche auszufüllen. Befolgen Sie das gleiche Verfahren für alle Ellipsen und die entsprechenden Beschriftungen. Um den 3D-Effekt des Pfeils zu erzielen, können Sie etwa so vorgehen (wenn Sie zufrieden sind):
Bildbeschreibung hier eingeben
Der entsprechende MWE hierfür ist:

settings.render=16;
import three;
size(4cm,0);
draw(O--2X ^^ O--2Y ^^ O--2Z);
triple circleCenter = (Y+Z)/sqrt(2) +
X;
path3 mycircle =
circle(c=circleCenter, r=1,
normal=Y+Z);
draw(plane(O=sqrt(2)*Z, 2X, 2*unit(Y-Z)), gray + 0.1cyan);
draw(mycircle, blue);
draw(shift(circleCenter) * (O -- Y+Z), green, arrow=Arrow3());

(das Obige ist der Code, den Sie in und asyeinfügen müssen ).\begin{asy}\end{asy}

verwandte Informationen