Wie erstelle ich mit Tikz teilweise schattierte Knoten, ohne Koordinaten fest zu codieren?

Wie erstelle ich mit Tikz teilweise schattierte Knoten, ohne Koordinaten fest zu codieren?

Wie erstelle ich teilweise schattierte nodes tikzohne Hardcoding coordinate-s?

Ein einfaches MWE sieht wie folgt aus:

\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[mynode/.style={circle,draw=black,minimum size=10mm}]

    \filldraw[fill=gray!25] (-3.5mm,-3.5mm) arc [start angle=225, end angle=405, radius=5mm];
    \node at (0,0) [mynode] {\Large $x$};

\end{tikzpicture}
\end{document}
\end{tikzpicture}

Das funktioniert, aber ich musste die Koordinaten des schattierten Bogens berechnen, und das ist sehr mühsam, wenn ich mit einer großen Anzahl von Knoten arbeiten muss. Gibt es eine Möglichkeit, dies automatisch zu tun?

Ich habe anderen Code, der verwendettikz-bayesnet, wenn die Lösung also darauf aufbauen kann, wäre es sogar noch besser.

Antwort1

Sie können die Bibliothek laden backgroundsund die Knotenanker wie verwenden a.225. Der Radius sollte die Hälfte von betragen minimum size. Verwenden Sie außerdem \fillanstelle von \filldraw.

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{backgrounds}
\begin{document}
\begin{tikzpicture}[mynode/.style={circle,draw=black,minimum size=10mm}]
    \node (a) at (0,0) [mynode] {\Large $x$};
    \begin{scope}[on background layer]
      \fill[fill=gray!25] (a.225) arc [start angle=225, end angle=405, radius=5mm];
    \end{scope}
\end{tikzpicture}
\end{document}

Bildbeschreibung hier eingeben

Antwort2

Wenn alle Ihre Knoten die gleiche Füllung haben, können Sie solche Knoten wie folgt zeichnen pics:

\documentclass[12pt,tikz,border=3mm]{standalone}
    \usetikzlibrary{backgrounds}

        \begin{document}
    \begin{tikzpicture}[
pics/mynode/.style = {code = 
        {\node[name=a,%node name
               shape=circle, draw, minimum size=10mm,
               inner sep=0mm, outer sep=0mm] at (0,0) {#1};
         \scoped[on background layer]
         \filldraw[gray!50] (a.south west) -- (a.north east) arc (45:-135:5mm);
                 }},
                        ]
\pic    {mynode=\Large$X$};
    \end{tikzpicture}
        \end{document}

Antwort3

Bequemer geht es mit /.style: Sie können semifillden Stil eines halbgefüllten Knotens festlegen und semifill={gray}mit die Füllfarbe und semifill={ang=125}den Winkel der Trennlinie angeben.

\documentclass[tikz, border=1cm]{standalone}
\usetikzlibrary{calc}
\makeatletter
\tikzset{
  prefix after node/.style={
    prefix after command={\pgfextra{#1}}
  },
  /semifill/ang/.store in=\semi@ang,
  /semifill/ang=0,
  semifill/.style={
    circle, draw,
    prefix after node={
      \typeout{aaa \semi@ang}
      \let\nodename\tikz@last@fig@name
      \fill[/semifill/.cd, /semifill/.search also={/tikz}, #1]
        let \p1 = (\nodename.north), \p2 = (\nodename.center) in
        let \n1 = {\y1 - \y2} in
        (\nodename.\semi@ang) arc [radius=\n1, start angle=\semi@ang, delta angle=180];
    },
  }
}
\makeatother

\begin{document}
\begin{tikzpicture}
  \node[semifill={gray,ang=60}] {$y$};
\end{tikzpicture}
\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen