我想绘制带状线并能够控制交叉点。
例如
\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
这knots
TikZ 库几乎就是为此目的而设计的。我说“几乎”是因为我在设计它时没有考虑到不考虑交叉点的可能性,但是你很幸运,因为你制作曲线的方式(即,你想要“忽略”的交叉点位于路径组件的端点)而且我确实设置了一个忽略端点交叉点的选项。
\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}