tikz-knots:带有圆圈的意外(?)行为

tikz-knots:带有圆圈的意外(?)行为

这是我的结:

在此处输入图片描述

我首先绘制红色+蓝色线条,这与 Hobby 曲线非常匹配。

\usepackage{tikz}
\usetikzlibrary{knots, hobby, shapes.geometric}

\begin{document}

\tikzset{
  knot diagram/every strand/.append style={
    ultra thick,
    red
  }}

\begin{tikzpicture}[use Hobby shortcut]
 \begin{knot}[scale=2,
   consider self intersections=true,%ignore endpoint
   % intersections=false,
   end tolerance=0.05mm,
  draft mode=crossings,
   flip crossing/.list={1,3},
   clip width=8,
   clip radius=8pt,
   only when rendering/.style={
   }
   ]
 \strand ([closed]2,0) .. (3, 0) .. (4, 2) .. (1.5, 0) .. (1.8, -0.4)
 .. (2.2, -0.4) .. (2.4, 0.4) .. (0, 2) .. (1, 0);

 \end{knot}
\end{tikzpicture}

\end{document}

然后我添加了一个圆圈形式的绿色链接:

\usepackage{tikz}
\usetikzlibrary{knots, hobby, shapes.geometric}

\begin{document}

\tikzset{
  knot diagram/every strand/.append style={
    ultra thick,
    red
  }}

\begin{tikzpicture}[use Hobby shortcut]
 \begin{knot}[scale=2,
   consider self intersections=true,%ignore endpoint
   % intersections=false,
   end tolerance=0.05mm,
  draft mode=crossings,
   flip crossing/.list={1,3},
   clip width=8,
   clip radius=8pt,
   only when rendering/.style={
   }
   ]
 \strand ([closed]2,0) .. (3, 0) .. (4, 2) .. (1.5, 0) .. (1.8, -0.4)
 .. (2.2, -0.4) .. (2.4, 0.4) .. (0, 2) .. (1, 0);
\strand[green] (2, -0.5) circle[radius=2cm];
 \end{knot}
\end{tikzpicture}
\end{document}

现在我明白了: 在此处输入图片描述

当然,交叉口编号已经改变,但这不是问题——我可以翻转它们。问题是标记为“2”的交叉口:它的位置不对。如果我尝试翻转它,情况会变得更糟(从图像放大):

在此处输入图片描述

我最终成功地使用第二条 Hobby 曲线绘制了绿色线 (*) 的这个结。我已经下定决心——我并不想寻求有关如何完成这个特定示例的进一步建议。但我渴望更好地掌握这个knots库,我想了解为什么使用圆圈的尝试会出现这种情况-- 有人知道吗?我尝试过把圆圈变大、变小,并稍微向左和向右移动,但都无济于事……我不知道我是否遗漏了结点选项中的某些内容?除了圆圈的起点可能位于何处之外,它基本上与标记为 7 的交叉点对称,这处理得当……所以也许这与圆圈的起点有关?

(*)为了完整性,工作代码如下:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{knots, hobby, shapes.geometric}

\begin{document}

\tikzset{
  knot diagram/every strand/.append style={
    ultra thick,
    red
  }}

\begin{tikzpicture}[use Hobby shortcut]
 \begin{knot}[scale=2,
   consider self intersections=true,%ignore endpoint
   % intersections=false,
   end tolerance=0.05mm,
  draft mode=crossings,
   flip crossing/.list={1,4, 5,6 },
   clip width=8,
   clip radius=8pt,
   only when rendering/.style={
   }
   ]
 \strand ([closed]2,0) .. (3, 0) .. (4, 2) .. (1.5, 0) .. (1.8, -0.4)
 .. (2.2, -0.4) .. (2.4, 0.4) .. (0, 2) .. (1, 0);
\strand[green] ([closed]2, -1) .. (3.5, 0) .. (2, 1) .. (0.5, 0);

 \end{knot}
\end{tikzpicture}
\end{document}

答案1

这不是一个答案,而是一个问题的解释。

consider self intersections设置为时true,每条路径都会被分割成段,以便可以使用交点例程来查找其自交点。这样做时,它会删除仅由movetos 组成的空段。似乎对圆执行此操作时会出现错误,因为圆moveto从中心开始到圆周上的某个点。通过删除各种剪辑,可以看到结库用于查找自交点的路径:

移除 moveto 后的圆圈

因此,当moveto删除时,它就是错误的moveto。这是一个错误。我在 github 上打开了一个问题:https://github.com/loopspace/spath3/issues/29

相关内容