双线之间的交叉如何控制?

双线之间的交叉如何控制?

我想绘制带状线并能够控制交叉点。

例如

\documentclass{standalone}
\usepackage{tikz}
\begin{document}
 \begin{tikzpicture}
\clip (-1,-2) rectangle (2,2); 
\draw [double,double distance=3pt]
plot [smooth cycle] coordinates{(-4,0) (0,0) (4,0)}
plot [smooth cycle] coordinates{(0,0) (0,1) (1,1) (1,-1) (0,-1)};
\end{tikzpicture}
\end{document}

产生以下内容:

在此处输入图片描述

我想要的是:

在此处输入图片描述

(我已手动更正)。

理想情况下(最终我会需要它)我希望能够将如下图形视为节点:

在此处输入图片描述

在此处输入图片描述

并能够选择四条双线中的一条并将其与其他节点的双线连接起来;所以我确信我的方法不是最好的。有什么建议吗?

答案1

knotsTikZ 库几乎就是为此目的而设计的。我说“几乎”是因为我在设计它时没有考虑到不考虑交叉点的可能性,但是你很幸运,因为你制作曲线的方式(即,你想要“忽略”的交叉点位于路径组件的端点)而且我确实设置了一个忽略端点交叉点的选项。

\documentclass{article}
%\url{https://tex.stackexchange.com/q/175582/86}

\usepackage{tikz}
\usetikzlibrary{knots}
\begin{document}
 \begin{tikzpicture}
\begin{knot}[
  consider self intersections=no splits,
  only when rendering/.style={
    double,
    double distance=3pt
  }
]
\strand (-4,0) -- (0,0) -- (4,0) plot [smooth cycle] coordinates{(0,0) (0,1) (1,1) (1,-1) (0,-1)};
\end{knot}
 \end{tikzpicture}
\end{document}

有关详细信息,请参阅文档和引发该文档的问题(TikZ 中的辫子图)。有趣的是,它本质上实现了 Jesse 的答案中提出的方法,即以正确的方式重新绘制交叉点区域的图表。但是,它(相当)自动地完成了这一操作。

代码中一个很大的变化是,我用plot[smooth cycle] {(-4,0) (0,0) (4,0)}一条简单的直线替换了这条线。通过使它成为一个平滑的循环,你沿着它沿两个方向绘制,这是不必要的(而且真的knots由于路口数量急剧增加,图书馆陷入混乱!)。

有重叠交叉点的双倍路径

答案2

这次尝试基本上增加了一个scope环境来重新绘制循环,clip再次局限于微小的窗口。

在此处输入图片描述

代码

\documentclass{article}%[border=5pt]{standalone}
\usepackage{tikz}
\begin{document}

OP's solution:

\begin{tikzpicture}
\clip (-1,-2) rectangle (2,2); 
\draw [double,double distance=3pt]
plot [smooth cycle] coordinates{(-4,0) (0,0) (4,0)}
plot [smooth cycle] coordinates{(0,0) (0,1) (1,1) (1,-1) (0,-1)};
\end{tikzpicture}\par

Proposed solution

\begin{tikzpicture}
\clip (-1,-2) rectangle (2,2); 
\draw [double,double distance=3pt] 
plot [smooth cycle] coordinates{(-4,0) (0,0) (4,0)}
plot [smooth cycle] coordinates{(0,0) (0,1) (1,1) (1,-1) (0,-1)};
\begin{scope}
\clip [] (1,-0.2) rectangle (1.2,0.2); 
\draw [double,double distance=3pt] plot [smooth cycle] coordinates{(0,0) (0,1) (1,1) (1,-1) (0,-1)};
\end{scope}
\end{tikzpicture}
\end{document}

答案3

这不是一个通用的解决方案,但适用于此示例。OP 的代码使用一个\draw考虑所有交集的命令。

\draw [double,double distance=3pt]
plot [smooth cycle] coordinates{(-4,0) (0,0) (.5,0)}
plot [smooth cycle] coordinates{(0,0) (0,1) (1,1) (1,-1) (0,-1)};

第一个解决方案是将绘图过程划分为几个命令

\draw [double,double distance=3pt] plot [smooth cycle] coordinates{(-4,0) (0,0) (.5,0)}
\draw plot [smooth cycle] coordinates{(0,0) (0,1) (1,1) (1,-1) (0,-1)};

从而产生

在此处输入图片描述

这幅图解决了右手交叉的问题,但左手交叉是错误的。因此,更好的解决方案是绘制水平线的一部分,然后长方形在一个命令内,但在绘制水平线的右侧部分之后:

\documentclass{standalone}
\usepackage{tikz}
\begin{document}
 \begin{tikzpicture}
\clip (-1,-2) rectangle (2,2); 
\draw [double,double distance=3pt]
plot [smooth cycle] coordinates{(0.5,0) (1,0) (4,0)};
\draw [double,double distance=3pt]
plot [smooth cycle] coordinates{(-4,0) (0,0) (.5,0)}
plot [smooth cycle] coordinates{(0,0) (0,1) (1,1) (1,-1) (0,-1)};
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容