在 tikz 绘制的一个图中,如何让所有的两两相交的曲线在交点处不重合

发布于 2022-07-27 21:38:13

在tikz 中绘制了两条相交曲线(不一定是直线),它们有一个交点,但希望在交点处不重合,
就是这样的效果:1ef699035d6cc94b217d90a6d68a1f0c.png

而不是这样的效果:657c7675a2dd8ac312eacb1af3f54b00.png

我考虑了一个思路:

  1. 求出一个图中所有相交曲线的交点,
  2. 在每个交点处用一个白色的小圆点覆盖,这样实际上是相当于把相交的两个曲线都在 交点处挖掉了一部分,但我们需要只让其中一条曲线被挖掉形成断点
  3. 把所有的不需要断点的曲线再重新绘制一次。(这一步不知道 tikz 有没有自动化命令,就是这个命令可以重新绘制指定带有名称的某个路径,而不是用 draw 命令手动绘制)

理论上以上是可以形成我想要的效果,但操作太麻烦,代码也更复杂(有时候近似是二倍原来的代码数量),特别是图比较复杂时,有时想找到所有有交点的曲线都难。

我考虑过用 foreach 实现,这个有可能可以,但我目前还没做到。

请问哪位大佬有其他的更简洁的方法?或者我这个思路如何用 foreach 或者其他自动化命令实现?谢谢!

查看更多

关注者
0
被浏览
799
越来越少
越来越少 2022-07-27
这家伙很懒,什么也没写!

参考 knots 包,不过这个包我不熟悉。

2 个回答
拿了橘子跑啊
拿了橘子跑啊 2022-08-08
这家伙很懒,什么也没写!

虽然已经有最佳答案了,我也来补充一个治标的方法,需要保证连续的线可以使用双线 double 绘制,选项 [draw = white, double=black,double distance =0.4pt](当然如果图线颜色和底色并非黑白的时候,以及线宽非默认时要自己调整),例:

\begin{tikzpicture}
        \draw(0,0)--(1,1);
        \draw[draw=white,double=black,double distance =0.4pt](0,1)--(1,0);
    \end{tikzpicture}

image.png

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览