Binäre Zahlendarstellung in einer 3D-Tikz-Knotenbox

Binäre Zahlendarstellung in einer 3D-Tikz-Knotenbox

Mein Bemühen ist

\documentclass[margin=1in]{standalone}

\usepackage{tikz}
\usetikzlibrary[arrows, decorations.pathmorphing, backgrounds, positioning, fit, petri]


\begin{document}
    \begin{tikzpicture}[node distance=0pt,
        box/.style={draw, minimum size=1cm, inner sep=0.5cm},
        value/.style={yshift=-1cm}]
        \node[box] (b7) {1};
        \node[box] (b6) [right=of b7] {1};
        \node[box] (b5) [right=of b6] {1};
        \node[box] (b4) [right=of b5] {1};
        \node[box] (b3) [right=of b4] {1};
        \node[box] (b2) [right=of b3] {1};
        \node[box] (b1) [right=of b2] {1};
        \node[box] (b0) [right=of b1] {1};
        
        \node[value] [below of=b0] {$2^0$};
        \node[value] [below of=b1] {$2^1$};
        \node[value] [below of=b2] {$2^2$};
        \node[value] [below of=b3] {$2^3$};
        \node[value] [below of=b4] {$2^4$};
        \node[value] [below of=b5] {$2^5$};
        \node[value] [below of=b6] {$2^6$};
        \node[value] [below of=b7] {$2^7$};
    \end{tikzpicture}
\end{document}

Bildbeschreibung hier eingeben

Wie kann ich diese Binärzahlendarstellung in Tikz wie einen 3D-Boxknotentyp zeichnen? Danke

Bildbeschreibung hier eingeben

Antwort1

Dies scheint ein sinnvolles Bild für die Binärzahl zu sein, 1111111aber für eine Binärzahl wie 101010111diese sollte das Bild meiner Meinung nach folgendermaßen aussehen:

Bildbeschreibung hier eingeben

Der folgende Code definiert ein Makro \BinaryNumber, das eine durch Kommas getrennte Liste von Binärziffern akzeptiert. Sobald dies definiert ist, können Sie verwenden

  \BinaryNumber{1,1,1,1,1,1,1,1,1}
  \BinaryNumber{1,0,1,0,1,1,1}
  \BinaryNumber{1,0,1,1,1,0,1,0,0,1,1}

produzieren:

Bildbeschreibung hier eingeben

Hier ist der Code. Ich erkläre unten ein wenig, wie er funktioniert:

\documentclass{article}
\usepackage{tikz}

\tikzset{
  pics/byte cube/.style args = {#1,#2}{
      code = {
         \draw[fill=white] (0,0) rectangle (1,1);
         \node at (0.5,0.5){#1};
         \draw[cube #1] (0,0)--(-60:2mm)--++(1,0)--++(0,1)--++(120:2mm)--(1,0)--cycle;
         \draw(1,0)--++(-60:2mm);
         \node at (0.5,-0.5){$2^{#2}$};
      }
    },
    cube 1/.style = {fill=gray!30}, % style for bytes that are "on"
    cube 0/.style = {fill=white},   % style for bytes that are "off"
}

\newcommand\BinaryNumber[1]{%
  \begin{tikzpicture}
     % count the number of bytes and store as \C
     \foreach \i [count=\c] in {#1} { \xdef\C{\c} }
     \foreach \i [count=\c, evaluate=\c as \ex using {int(\C-\c)}] in {#1} {
       \pic at (\c, 1) {byte cube={\i,\ex}};
     }
  \end{tikzpicture}

}
\begin{document}

  \BinaryNumber{1,1,1,1,1,1,1,1,1}          \bigskip

  \BinaryNumber{1,0,1,0,1,1,1}              \bigskip

  \BinaryNumber{1,0,1,1,1,0,1,0,0,1,1}      \bigskip

\end{document}

Die Grundidee besteht darin, picjedes Byte mit einem zu zeichnen (siehe Abschnitt 18.2 desTikZHandbuch). Das aufgerufene Bild byte cubenimmt zwei Argumente an: {0 or 1, exponent}. Das Bild zeichnet den „Bytewürfel“ mit der Füllfarbe unter der Zahl, die auf den entsprechenden Stil von cube 0oder eingestellt ist cube 1. Wenn Sie diese Stile ändern, ändert sich die Schattierung unter der Zahl. (Die Wahl des Stils hängt also konzeptgemäß von der Binärziffer ab.)

Die Definition \BinaryNumberdurchläuft zuerst die Bytes, um die „Länge“ der Binärzahl zu bestimmen, und durchläuft sie dann erneut, um jeden „Bytewürfel“ zu zeichnen. Jeder nachfolgende Bytewürfel überschreibt die Teile der vorherigen Würfel, die wir „nicht wollen“. Folglich ist die Schattierung auf der rechten Seite, obwohl sie für jeden Würfel gezeichnet wird, nur für den Würfel ganz rechts sichtbar.

Antwort2

Eine erste einfache Lösung kann die folgende sein:

\documentclass[margin=1in]{standalone}

\usepackage{tikz}
\usetikzlibrary[arrows, decorations.pathmorphing, backgrounds, positioning, fit, petri]

\begin{document}
    \begin{tikzpicture}[node distance=0pt,
        box/.style={draw, minimum size=1cm, inner sep=0.5cm},
        value/.style={yshift=-1cm}]
        \node[box] (b7) {1};
        \node[box] (b6) [right=of b7] {1};
        \node[box] (b5) [right=of b6] {1};
        \node[box] (b4) [right=of b5] {1};
        \node[box] (b3) [right=of b4] {1};
        \node[box] (b2) [right=of b3] {1};
        \node[box] (b1) [right=of b2] {1};
        \node[box] (b0) [right=of b1] {1};
\def\xasn{1mm}% x direction of the box
\def\yasn{-1.5mm}% y direction of the box
\fill[lightgray] (b0.north east) -- ([shift={(\xasn,\yasn)}]b0.north east) -- ([shift={(\xasn,\yasn)}]b0.south east) -- (b0.south east);
\draw (b0.north east) -- ([shift={(\xasn,\yasn)}]b0.north east) -- ([shift={(\xasn,\yasn)}]b0.south east);

\foreach \boxnr in {0,1,...,7} {
\draw[fill=lightgray] (b\boxnr.south west) -- +(\xasn,\yasn) -- ([shift={(\xasn,\yasn)}]b\boxnr.south east) -- (b\boxnr.south east);
}
        
        \node[value] [below of=b0] {$2^0$};
        \node[value] [below of=b1] {$2^1$};
        \node[value] [below of=b2] {$2^2$};
        \node[value] [below of=b3] {$2^3$};
        \node[value] [below of=b4] {$2^4$};
        \node[value] [below of=b5] {$2^5$};
        \node[value] [below of=b6] {$2^6$};
        \node[value] [below of=b7] {$2^7$};
    \end{tikzpicture}
\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen