30 knots 包纽结画图求助

发布于 2025-01-10 09:38:41

需要用 tikz 画纽结, 如图
e34950676ca0c89008c6f0c29f5cb14b.png
找到 knots 包, 三叶结网上有现成的复制了, D 图通过看 knots 包画出来了, 可能代码比较蹩脚, 如下

\begin{tikzpicture}[scale=.7]
\begin{knot}[
    %draft mode=crossings,
]
    \strand[ultra thick](0,0)circle(1cm);
    \strand[ultra thick](60:1)circle(1cm);
    \strand[ultra thick](1,0)circle(1cm);
    \flipcrossings{2,3,6}
\end{knot}
\end{tikzpicture}

然后画 B 选项时, 看到包里面有 consider self intersections 这部分, 就做了尝试, 但是那个结似乎并不会被计算出来, 搞不定, 因此求教, 失败代码如下

\begin{tikzpicture}[scale=.7]
\begin{knot}[
    consider self intersections,
    draft mode=crossings,
]
    \strand[ultra thick](0,0)
    to[out=45,in=135](0.707,0)
    arc(405:135:1)
    to[out=45,in=135](0,0)
    to[out=-45,in=225](0.707,0)
    arc(-45:225:1)
    to[out=-45,in=225](0,0);
\end{knot}
\end{tikzpicture}

失败效果如下
704f27a7db09ac70ddfb0648dc4014f1.png

感谢指教,谢谢

查看更多

关注者
0
被浏览
185
Thallo
Thallo 1天前
这家伙不懒,但还是什么也没写

image.png

测了好几位数到 0.045722961425pt ,还是不能仅分到123,应该就是起点终点重合了,一般分两段曲线画更好。

\begin{tikzpicture}[scale=.7]
\begin{knot}[
consider self intersections=true,
% draft mode=crossings,
end tolerance=.045722961425pt,
flip crossing/.list={3}
]
\strand[ultra thick](0,0)
to[out=45,in=135](0.707,0)
arc(405:135:1)
to[out=45,in=135](0,0)
to[out=-45,in=225](0.707,0)
arc(-45:225:1) to[out=-45,in=225](0,0);
\end{knot}
\end{tikzpicture}

\begin{tikzpicture}[scale=.7]
\begin{knot}[
consider self intersections=true,
% draft mode=crossings,
end tolerance=.045722961425pt,
flip crossing/.list={2,4}
]
\strand[ultra thick](0,0)
to[out=45,in=135](0.707,0)
arc(405:135:1)
to[out=45,in=135](0,0)
to[out=-45,in=225](0.707,0)
arc(-45:225:1) to[out=-45,in=225](0,0);
\end{knot}
\end{tikzpicture}
3 个回答
Sagittarius Rover
我要成为Typst糕手/(ㄒoㄒ)/~~

option ignore endpoint intersections is what you need.

image.png

第一版代码:

\documentclass[tikz,border=1cm]{standalone}
\usetikzlibrary{knots}
\begin{document}
\begin{tikzpicture}
    \begin{knot}[
        consider self intersections,
        ignore endpoint intersections=false,
        draft mode=crossings,
    ]
        \strand[ultra thick] 
        (0,0) to[out=45,in=135] (0.707,0)
              arc(405:135:1) 
              to[out=45,in=135] (0,0)  
              to[out=-45,in=225] (0.707,0)
              arc(-45:225:1)
              to[out=-45,in=225] (0,0);
    \end{knot}
\end{tikzpicture}
\end{document}

但是问题出现在由于起点恰为knots点,似乎因为识别精度等问题出现了大量重合的交点,难以指定\flipcrossings的序号。和八省联考题还有差异。

image.png

第二版代码(权宜之计):经过近乎痛苦仔细地分辨,我们想要修改的左侧节点对应的的编号应为8,9,10,11,于是可以不优雅地加上\flipcrossings{8,9,10,11}

\documentclass[tikz,border=1cm]{standalone}
\usetikzlibrary{knots}
\begin{document}
\begin{tikzpicture}
    \begin{knot}[
        consider self intersections,
        ignore endpoint intersections=false,
    ]
        \strand[ultra thick] 
        (0,0) to[out=45,in=135] (0.707,0)
              arc(405:135:1) 
              to[out=45,in=135] (0,0)  
              to[out=-45,in=225] (0.707,0)
              arc(-45:225:1)
              to[out=-45,in=225] (0,0);
        \flipcrossings{8,9,10,11}%ugly here
    \end{knot}
\end{tikzpicture}
\end{document}

可以得到B选项...
image.png

另外你的八省联考卷pdf扫描质量堪忧,补图

image.png

Anyway...应该是有更优雅地无需指定是哪几个重叠intersections的方法,蹲一下论坛的其他朋友

鸣镝
鸣镝 1天前
这家伙很懒,什么也没写!

self interaction 我没整出来,我的方法,是分成这样的红蓝两个曲线,中间必须交错,把起始和终点弄在别的地方,你自己把颜色的选项去掉:

这个是你的 B:

1.png

这个是你的 C:

2.png

以下是代码,可以直接编译:

\documentclass[tikz]{standalone}

\usetikzlibrary{knots}

\begin{document}

\begin{tikzpicture}[scale=.7]
   \begin{knot}[
      draft mode = crossings,
      flip crossing = 2]

   \strand[ultra thick,red](-1,0.707)
   arc(180:225:1)
   to[out=-45,in=225](0,0)
   to[out=45,in=135](0.707,0)
   arc(45:-180:1);

   \strand[ultra thick,blue](-1,-0.707)
   arc(180:135:1)
   to[out=45,in=135](0,0)
   to[out=-45,in=225](0.707,0)
   arc(-45:180:1);
\end{knot}
\end{tikzpicture}

\clearpage{}

\begin{tikzpicture}[scale=.7]
   \begin{knot}[
      draft mode = crossings,
      flip crossing = 2]

   \strand[ultra thick,blue](-1,-0.707)
   arc(180:135:1)
   to[out=45,in=135](0,0)
   to[out=-45,in=225](0.707,0)
   arc(-45:180:1);

   \strand[ultra thick,red](-1,0.707)
   arc(180:225:1)
   to[out=-45,in=225](0,0)
   to[out=45,in=135](0.707,0)
   arc(45:-180:1);
\end{knot}
\end{tikzpicture}

\end{document}

撰写答案

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

发布
问题

分享
好友

手机
浏览

扫码手机浏览