如何使用 TikZ 将曲线的一部分变为红色?

如何使用 TikZ 将曲线的一部分变为红色?

我想让图形的闭环部分仅由“超红色”颜色组成,而其他部分则由蓝色组成。(来自(2,0) .. (0,0.93) .. (-0.93,0) .. (0,-0.93) .. (2,0)

\documentclass{standalone}
        \usepackage{tikz}
        \usetikzlibrary{hobby,decorations.markings}
        \begin{document}
        \begin{tikzpicture}[use Hobby shortcut]
          % filled points
          \fill (0,0) circle (1pt);
          \fill (2,0) circle (1pt);
          % middle crossing loop
          \draw (3,-1) .. (2,0) .. (0,0.93) .. (-0.93,0) .. (0,-0.93) .. (2,0) .. (3,1);
        \end{tikzpicture}
        \end{document}

请提出建议。如果我在曲线中加入箭头,请提出建议,如何改变箭头的颜色?

答案1

我认为不可能改变路径中间的绘图颜色:

但对于这种特殊情况,这clipping可能是一个有效的选择。即使是黑点也(0,0)有助于隐藏剪辑部分之间的不良连接。

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{hobby,decorations.markings}
\begin{document}
    \begin{tikzpicture}[use Hobby shortcut]
    % middle crossing loop
    % \draw (3,-1) .. (2,0) .. (0,0.93) .. (-0.93,0) .. (0,-0.93) .. (2,0) .. (3,1);
    \begin{scope}
        \clip (3,-1) rectangle (2,1);
       \draw[thick, blue, fill=blue!30] (3,-1) .. (2,0) .. (0,0.93) .. (-0.93,0) .. (0,-0.93) .. (2,0) .. (3,1);
    \end{scope}
   \begin{scope}
        \clip (2,1) rectangle (-1,-1);
       \draw[thick, red, fill=red!30] (3,-1) .. (2,0) .. (0,0.93) .. (-0.93,0) .. (0,-0.93) .. (2,0) .. (3,1);
    \end{scope}
   % filled points
   \fill (0,0) circle (1pt);
   \fill (2,0) circle (1pt);
   \end{tikzpicture}
\end{document}

在此处输入图片描述

如果你想在任何路径上绘制箭头,可以使用decoration.markings库。答案TikZ:如何在线中间画箭头?就是很好的例子。

\documentclass[border=3mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{hobby,decorations.markings, arrows.meta,bending}
\begin{document}
    \begin{tikzpicture}[use Hobby shortcut,
    decoration={markings, 
    mark=between positions 0 and 1 step 2mm with
                {\arrow{Stealth[length=1mm,flex]}},
                }]
    \begin{scope}
        \clip (3,-1) rectangle (2,1);
       \draw[thick, blue, fill=blue!30, postaction={decorate}] (3,-1) .. (2,0) .. (0,0.93) .. (-0.93,0) .. (0,-0.93) .. (2,0) .. (3,1);
    \end{scope}
   \begin{scope}
        \clip (2,1) rectangle (-1,-1);
       \draw[thick, red, fill=red!30, postaction={decorate}] (3,-1) .. (2,0) .. (0,0.93) .. (-0.93,0) .. (0,-0.93) .. (2,0) .. (3,1);
    \end{scope}
   % filled points
   \fill (0,0) circle (1pt);
   \fill (2,0) circle (1pt);
   \end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

由于交叉点是爱好路径,您可以使用包soft blank的功能hobby。这允许您将路径的某些部分指定为空白的。它还允许您保存和重复使用路径并切换“软空白”的行为。

\documentclass{article}
%\url{http://tex.stackexchange.com/q/162919/86}
\usepackage{tikz}
\usetikzlibrary{hobby,decorations.markings}
\begin{document}
\begin{tikzpicture}[use Hobby shortcut]
% filled points
\fill (0,0) circle (1pt);
\fill (2,0) circle (1pt);
% middle crossing loop
\draw[save Hobby path=fish,thick, red, fill=red!30] (3,-1) .. ([blank=soft]2,0) .. (0,0.93) .. (-0.93,0) .. (0,-0.93) .. (2,0) .. ([blank=soft]3,1);
\draw[restore and use Hobby path={fish}{invert soft blanks,disjoint=true},thick, blue];
\end{tikzpicture}
\end{document}

(注:我使用的是 的最新开发版本hobby;如果它不适用于最新的官方版本,你需要从TeX-SX 启动板地点。)

保存save Hobby path=<name>Hobby 算法的输出,但在将其反馈到 PGF 以构建路径之前。 重新加载restore and use Hobby path={<name>}{<options>}先前存储的 Hobby 路径并将其转换为 PGF 路径。<options>可以使用与此转换有关的(即,不是任何会影响算法本身工作方式的选项)。在这种情况下,发生的情况是原始路径的某些段已被标记为soft blank。这意味着它们不会被绘制,尽管它们会用于路径的计算。当恢复路径时,键invert soft blanks会将软空白与非空白交换,因此现在会删除先前绘制的部分并绘制先前隐藏的部分。 意味着disjoint=true转换后的路径以显式的 开头move,这是必要的,因为每条路径都必须以移动开始,并且没有附加 Hobby 路径的路径。

(有关更多详细信息,请参阅包装内的手册hobby。)

有重复片段的爱好

相关内容