Wie zeichne ich dieses Diagramm (Funktion als Maschine) mit Tikz?

Wie zeichne ich dieses Diagramm (Funktion als Maschine) mit Tikz?

Ich möchte das folgende Diagramm reproduzieren, konnte aber den „Code“ für die gegebene Form nicht finden. Die Beispieldiagramme, die ich mir angesehen habe, zeigen nur ein geschlossenes Rechteck mit Pfeilen, die auf das Rechteck und von ihm weg zeigen. Jede Hilfe ist sehr willkommen. Bildbeschreibung hier eingeben

Anbei mein aktuelles MWE, wie von Jasper vorgeschlagen:

\tikzstyle{Box} = [rectangle, rounded corners, minimum width=2cm, minimum height=1.25cm, text centered, draw=blue, inner color=white, outer color=blue!30]
\tikzstyle{arrow} = [red, very thick,->,>=stealth]

\begin{center}
\begin{tikzpicture}[node distance=2.5cm]
\node (A) [Box] {\(f\)};
\node (B) [left of=A, label=below:{input}] {$x$};
\node (C) [right of=A, label=below:{output}] {$y$};
\draw [arrow] (B) -- (A);
\draw [arrow] (A) -- (C);
\end{tikzpicture}
\end{center}

Antwort1

Wenn keine Form vorhanden ist, können Sie Folgendes erstellen \pic:

\documentclass[border=10pt]{standalone}
\usepackage{tikz}

\tikzset{
    pics/machine/.style={
        code={
            \coordinate (-in) at ({-0.5*\pgfkeysvalueof{/tikz/machine/width}},0);
            \coordinate (-out) at ({0.5*\pgfkeysvalueof{/tikz/machine/width}},0);
            \coordinate (-north) at (0,{0.5*\pgfkeysvalueof{/tikz/machine/height}});
            \coordinate (-south) at (0,{-0.5*\pgfkeysvalueof{/tikz/machine/height}});
            \path[/tikz/machine/filling]
                ([shift={(-0.75em,0.5em)}]-in) 
                -- ([shift={(0,0.25em)}]-in) 
                -- ([shift={(0,-5pt)}]-north -| -in)
                arc[start angle=180, end angle=90, radius=5pt]
                -- ([shift={(-5pt,0)}]-north -| -out)
                arc[start angle=90, end angle=0, radius=5pt]
                -- ([shift={(0,0.25em)}]-out) 
                -- ([shift={(0.75em,0.5em)}]-out)
                -- ([shift={(0.75em,-0.5em)}]-out)
                -- ([shift={(0,-0.25em)}]-out) 
                -- ([shift={(0,5pt)}]-south -| -out)
                arc[start angle=360, end angle=270, radius=5pt]
                -- ([shift={(5pt,0)}]-south -| -in)
                arc[start angle=270, end angle=180, radius=5pt]
                -- ([shift={(0,-0.25em)}]-in) 
                -- ([shift={(-0.75em,-0.5em)}]-in) 
                -- cycle;
            \draw[/tikz/machine/border]
                ([shift={(-0.75em,0.5em)}]-in) 
                -- ([shift={(0,0.25em)}]-in) 
                -- ([shift={(0,-5pt)}]-north -| -in)
                arc[start angle=180, end angle=90, radius=5pt]
                -- ([shift={(-5pt,0)}]-north -| -out)
                arc[start angle=90, end angle=0, radius=5pt]
                -- ([shift={(0,0.25em)}]-out) 
                -- ([shift={(0.75em,0.5em)}]-out);
            \draw[/tikz/machine/border]
                ([shift={(0.75em,-0.5em)}]-out)
                -- ([shift={(0,-0.25em)}]-out) 
                -- ([shift={(0,5pt)}]-south -| -out)
                arc[start angle=360, end angle=270, radius=5pt]
                -- ([shift={(5pt,0)}]-south -| -in)
                arc[start angle=270, end angle=180, radius=5pt]
                -- ([shift={(0,-0.25em)}]-in) 
                -- ([shift={(-0.75em,-0.5em)}]-in);
            \node (-node) at (0,0) {#1};
        }
    },
    machine/width/.initial={3.5em},
    machine/height/.initial={2em},
    machine/filling/.style={
        left color=cyan!50!blue!25, 
        right color=cyan!50!blue!25, 
        middle color=cyan!50!blue!10
    },
    machine/border/.style={
        blue!50!cyan
    }
}

\begin{document}
\begin{tikzpicture}

    \node[label={below:{input}}] (A) at (0,0) {$x$}; 
    \pic (B) at (2,0) {machine={$f$}};
    \node[label={below:{output}}] (C) at (4,0) {$f(x)$}; 

    \draw[red, -stealth] (A) -- (B-in);  
    \draw[red, -stealth] (B-out) -- (C);  

\end{tikzpicture}
\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen