改变指定点的路径颜色(改为三色三叶结)

改变指定点的路径颜色(改为三色三叶结)

我目前正在自学结理论,并希望使用 Ti 绘制相关图表Z. 使用knots库和foreach循环,我编写了一个非常可靠的代码来绘制单色三叶草结:

\begin{tikzpicture}
    \begin{knot}[
        clip width=5,
        consider self intersections
    ]
        \strand[red,thick] (90:1)
            \foreach \x in {1,2,3} {
                to [bend left=117,looseness=1.9] ({90+120*\x}:1)
            }
        ;
        \flipcrossings{1,3}
    \end{knot}
\end{tikzpicture}

由此得到下面的图像。

在此处输入图片描述

但是,我想把每个不间断的线段(总共 3 个)涂上不同的颜色,就像我的教科书一样(请注意,我不是想做双线,只是想从白色到灰色再到黑色的变化[或者最好是我选择的颜色]):

在此处输入图片描述

到目前为止,我已经研究了该网站和其他网站上的decorations库、dashed线路和更多建议,但没有找到任何解决方案。

总共,我怎样才能在 Ti 中独立地为我的结的不同部分着色Z?

请注意,我希望该程序足够通用,以便也适用于其他结。

答案1

[感谢@AndrewStacey在问题下的评论中提出此修复建议]


LaTeX 尚未实现对该问题的完整、简单的解决方案,但以下内容是一个相当充分的近似值。

首先,请考虑knots库的第 3.3 节文档,尤其是使用 TiZ 节点有助于结图。下面引用了最重要的段落。

该节点knot crossing不是用来绘制的,它是一个空的形状……这对于设计在特定方向优雅地进入和退出交叉点的曲线很有用。当使用这种节点形状时,交叉点本身最容易绘制,方法是使用center形成交叉点的线的锚点。

按照此指导,我为 7_4 结创建了以下 MWE,以其下方的黑白图片为模型,并在其下方生成彩色图片。

\begin{tikzpicture}[
    every path/.style={thick},
    every node/.style={knot crossing,inner sep=1.2pt}
]
    \colorlet{rex}{red}
    \colorlet{orx}{orange}
    \colorlet{ylx}{yellow!70!black}

    \node (l) at (-1,0) {};
    \node (c) at (0,0) {};
    \node (r) at (1,0) {};
    \node (lu) at (-0.6,0.6) {};
    \node (lb) at (-0.6,-0.6) {};
    \node (ru) at (0.6,0.6) {};
    \node (rb) at (0.6,-0.6) {};

    \draw [orx] (lb)
        to [out=-50,in=-130] (rb.center)
        to [out=50,in=-120] (r)
    ;
    \draw [rex] (r)
        to [out=60,in=35,out looseness=2.5] (ru.center)
        to [out=-145,in=50] (c)
    ;
    \draw [rex] (c)
        to [out=-130,in=35] (lb.center)
        to [out=-145,in=-120,looseness=2] (l)
    ;
    \draw [orx] (l)
        to [out=60,in=-130] (lu.center)
        to [out=50,in=130] (ru)
    ;
    \draw [ylx] (ru)
        to [out=-50,in=120] (r.center)
        to [out=-60,in=-35,looseness=2] (rb)
    ;
    \draw [rex] (rb)
        to [out=145,in=-52] (c.center)
        to [out=128,in=-35] (lu)
    ;
    \draw [ylx] (lu)
        to [out=145,in=120,in looseness=2.5] (l.center)
        to [out=-60,in=130] (lb)
    ;
\end{tikzpicture}

在此处输入图片描述在此处输入图片描述

让我们从在环境开始时定义的样式开始tikzpicture。出于个人喜好,我用路径绘制结图thick,因此全局定义该样式是有意义的。此外,inner sep节点选项控制每个交叉点的空白量(值越高,空白越多)。最后,knot crossing节点类型实际上在技术上不是必需的(我不相信),但我想为什么不呢。

接下来,我为想要使用的三种颜色定义宏。这样既可以轻松更改特定颜色的每个实例(如果需要),又可以让每种颜色(以后使用时)都用一个简短的三个字母的术语表示。也许这样比较美观,但确实使代码更具可读性。请注意,我选择颜色名称时采用两个表示颜色的字母(例如,“re”表示“红色”)并连接后缀“-x”。我选择“-x”是因为如果我想要一种颜色有多种色调,后续色调可以有“-y”和“-z”后缀。

对于节点(必须位于结点的交叉点),我最初猜测了适当的位置,然后逐渐完善。请注意,节点的名称是其位置的缩写——在 MWE 中从上到下依次为:左、中、右、左上、左下、右上、右下。还请注意,虽然这里没有必要,但scale可以使用键来缩小或扩大结点。

现在,不可见的辅助部分已经设置好了,我使用了七个draw宏——每个宏对应结的七条线。请注意,使用七个宏而不是一个draw宏只是因为颜色多种多样。无论如何,为了创建代码,我从一个交叉点开始,然后按照黑白图片和上面引用的第 3.3 节中的说明,猜测宏的 10in个和 11 个out角度to。在我得到草稿后,我逐渐完善角度并根据需要添加looseness宏(始终保持对称性),直到我满意为止。最后添加颜色。

虽然这种方法并不完美,因为缺乏knot使用多色功能调整环境的便利性,但这种方法可以创建无错误、程序化的多色结渲染。虽然这通常适用于任何图表,但请注意,为了简化代码的创建,必须先绘制一个像样的结草图,以确定交叉点的位置。

相关内容