优秀的 Hobby 库文档指出,可以保存和重复使用 Hobby 路径。示例包括使用不同属性进行移动和重新绘制的路径。
但是,我不知道如何让恢复的路径正常运行。它们似乎在绘制路径的起点或终点时迷失了方向,最终出现在错误的位置。
据我了解,红色、蓝色和灰色曲线应该完全相同,蓝色和灰色略微向原始红色的左右偏移。然而,蓝色和灰色的形状都与红色不同,我认为它们应该是相同的。
我究竟做错了什么?
\documentclass[tikz,12pt]{standalone}
\usetikzlibrary{hobby}
\begin{document}
\begin{tikzpicture}
\path [draw=red] (0,0) coordinate (f) to[curve through={+(.125,-.5) +(-.5,-1) +(0,-1.5) +(.5,-.75) }, save Hobby path={ff1}] (f);
\path [draw=blue,xshift=1mm] (f) [restore and use Hobby path={ff1}{}];
\path [draw=gray,xshift=-1.5mm] (f) [restore and use Hobby path={ff1}{}];
\end{tikzpicture}
\end{document}
答案1
(f)
用相对替换绝对值(0,0)
可得到所需的结果(这里也使用变体scope
):
\documentclass[tikz,12pt]{standalone}
\usetikzlibrary{hobby}
\begin{document}
\begin{tikzpicture}
% \path [draw=red] (0,0) coordinate (f) to[curve through={+(.125,-.5) +(-.5,-1) +(0,-1.5) +(.5,-.75) }, save Hobby path={ff1}] (f);
\path [draw=red] (0,0) coordinate (f) to[curve through={+(.125,-.5) +(-.5,-1) +(0,-1.5) +(.5,-.75) }, save Hobby path={ff1}] (f);
\begin{scope}[xshift=+1mm]
% \path [draw=blue,xshift=1mm] (f) [restore and use Hobby path={ff1}{}];
\path [draw=blue] (0,0) [restore and use Hobby path={ff1}{}];
\end{scope}
\path [draw=gray,xshift=-1.5mm] (0,0) [restore and use Hobby path={ff1}{}];
\end{tikzpicture}
\end{document}
答案2
仅用于语法的比较,这里是 Hobby 自己的 Metapost 中写的相同图表……
\RequirePackage{luatex85}
\documentclass[border=10bp]{standalone}
\usepackage{luamplib}
\begin{document}
\mplibtextextlabel{enable}
\begin{mplibcode}
beginfig(1);
path ff;
ff = ((0,0) .. (1/8,-1/2) .. (-1/2,-1) ..
(0,-3/2) .. (1/2,-3/4) .. (0,0) .. cycle) scaled 28;
draw ff withcolor red;
draw ff shifted 3 right withcolor blue;
draw ff shifted 5 left withcolor 1/2 white;
endfig;
\end{mplibcode}
\end{document}