我想让图形的闭环部分仅由“超红色”颜色组成,而其他部分则由蓝色组成。(来自(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
。)