使用 tikz 创建超立方体

使用 tikz 创建超立方体

这是我在这里的第一篇帖子,请告诉我这里是否可以接受以下问题。

我想绘制一个汉明立方体——使用 TikZ 的集合。我还想绘制一些从 到的上升路径链,每个链包含 n 个点。这里是我希望实现的目标的说明。

我希望这张图片可以解释我的问题。

提前致谢!

Hypercube with a few ascending chains which might overlap

编辑(稍后添加): 鉴于 Gernot 提供的答案,我认为我并没有真正提出一个非常具体的问题。我很高兴实现以下目标。

我不想固定 n —— 尤其是这意味着我们可以假装我乐意将超立方体抽象地绘制为两条垂直绘制的钟形曲线(或高斯曲线),在端点处相切。如果这太耗时,我也很乐意将超立方体绘制为两条弯曲路径,在端点处相切,如我的绘图所示。

换句话说,如果我能得到我用 TikZ 画的图片,我想我会很满意。我意识到我本来可以问这个问题的,对此我深表歉意。

如果问题现在清楚了,请告诉我。

再次感谢!

答案1

你的问题非常不明确,因为示例路径取决于你想要举例说明的内容。你是否想保留n不确定或者是否要修复n为某个值,比如 3、4 或 5。(如果深度固定,可能会更容易理解。)

这里有两次尝试,仅供参考。一旦你自己知道了要把哪些节点和标签放在哪里,以及需要哪些类型的线(直线、弯曲、点线、虚线、实线……),就可以自由地询问有关如何实现特定效果的具体问题。

tuple定义了格子中的节点如何排版,命令\lb定义了节点的标签如何排版。

enter image description here

\documentclass[border=1mm]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
  \newcommand\lb[1]{\small$#1$}
  \tikzset{tuple/.style={}}
  \node[tuple] (0-0) {\lb{0\cdots0}};
  \node[tuple] (10-0) at (-2,1) {\lb{10\cdots0}};
  \node[tuple] (0-01) at ( 2,1) {\lb{0\cdots01}};
  \node[tuple] (1-10-0) at (-6,3) {\lb{1\cdots10\cdots0}};
  \node[tuple] (0-01-1) at ( 6,3) {\lb{0\cdots01\cdots1}};
  \node[tuple] (1-10) at (-2,5) {\lb{1\cdots10}};
  \node[tuple] (01-1) at ( 2,5) {\lb{01\cdots1}};
  \node[tuple] (1-1) at (0,6) {\lb{1\cdots1}};
  \draw (0-0) -- (10-0);
  \draw (0-0) -- (0-01);
  \draw[dashed] (10-0) -- (1-10-0);
  \draw[dashed] (0-01) -- (0-01-1);
  \draw[dashed] (1-10-0) -- (1-10);
  \draw[dashed] (0-01-1) -- (01-1);
  \draw (1-10) -- (1-1);
  \draw (01-1) -- (1-1);
  \draw[dotted] (10-0) -- (0-01);
  \draw[dotted] (1-10) -- (01-1);
\end{tikzpicture}
\end{document}

enter image description here

\documentclass[border=1mm]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
  \newcommand\lb[1]{\small$#1$}
  \tikzset{tuple/.style={circle,draw,fill,inner sep=1pt}}
  \node[tuple,label={[below]\lb{0\cdots0}}] (0-0) {};
  \node[tuple,label={[below left]\lb{10\cdots0}}] (10-0) at (-2,1) {};
  \node[tuple,label={[below right]\lb{0\cdots01}}] (0-01) at ( 2,1) {};
  \node[tuple,label={[left]\lb{1\cdots10\cdots0}}] (1-10-0) at (-6,3) {};
  \node[tuple,label={[right]\lb{0\cdots01\cdots1}}] (0-01-1) at ( 6,3) {};
  \node[tuple,label={[above left]\lb{1\cdots10}}] (1-10) at (-2,5) {};
  \node[tuple,label={[above right]\lb{01\cdots1}}] (01-1) at ( 2,5) {};
  \node[tuple,label={[above]\lb{1\cdots1}}] (1-1) at (0,6) {};
  \draw (0-0) -- (10-0);
  \draw (0-0) -- (0-01);
  \draw[dashed] (10-0) -- (1-10-0);
  \draw[dashed] (0-01) -- (0-01-1);
  \draw[dashed] (1-10-0) -- (1-10);
  \draw[dashed] (0-01-1) -- (01-1);
  \draw (1-10) -- (1-1);
  \draw (01-1) -- (1-1);
  \draw[dotted,shorten <=5pt,shorten >=5pt] (10-0) -- (0-01);
  \draw[dotted,shorten <=5pt,shorten >=5pt] (1-10) -- (01-1);
\end{tikzpicture}
\end{document}

相关内容