装饰多段路径而不改变段端点

装饰多段路径而不改变段端点

我想画多段“波浪”路径,所以我尝试了标准snake装饰和非常有前途的complete sines但在这两种情况下,线段端点都不会被保留。

以下是我所指的一个例子。第一个矩形是用单段路径绘制的,看起来很棒(尤其是complete sines底部的那个)。但是,当一次绘制两个段或整个矩形时,波浪段不会在预期的段端点处结束。

\documentclass[margin=3mm,tikz]{standalone}
\usepackage{tikz}
\usetikzlibrary{decorations.pathmorphing}
\input{sine.tex} %% From https://tex.stackexchange.com/a/60757/2113

\begin{document}

\begin{tikzpicture}
  \tikzset
      { wavy/.style={red, decorate, sharp corners, decoration={snake, amplitude=0.4mm}}
      , siny/.style={blue, decorate, sharp corners, decoration={complete sines, amplitude=1mm}}
      }

\newcommand{\test}[1]{
  \begin{scope}[shift={(0,0)}]
    \draw (0,0) -- ++ (1,0);
    \draw[#1] (0,0) -- ++ (1,0);
    
    \draw (1,0) -- ++ (0,1);
    \draw[#1] (1,0) -- ++ (0,1);
    
    \draw (1,1) -- ++ (-1,0);
    \draw[#1] (1,1) -- ++(-1,0);
    
    \draw (0,1) -- (0,0);
    \draw[#1] (0,1) -- (0,0);
  \end{scope}
  
  \begin{scope}[shift={(2,0)}]
    \draw (0,0) -- ++ (1,0) -- ++ (0,1);
    \draw[#1] (0,0) -- ++ (1,0) -- ++ (0,1);
  \end{scope}
  
  \begin{scope}[shift={(4,0)}]
    \draw (0,0) rectangle ++ (1,1);
    \draw[#1] (0,0) rectangle ++ (1,1);
  \end{scope}
}

\begin{scope}[shift={(0,0)}]
  \test{wavy}
\end{scope}

\begin{scope}[shift={(0,-2)}]
  \test{siny}
\end{scope}

\end{tikzpicture}

\end{document}

在此处输入图片描述

有没有办法获得与第一列匹配的结果?我想通过这些路径进行剪辑,所以我认为我需要将它们绘制为一个多段路径。

答案1

至少对于snake,如果我将段分解成自己的块,它似乎有效decorate{}

\documentclass[margin=3mm,tikz]{standalone}
\usepackage{tikz}
\usetikzlibrary{decorations.pathmorphing}

\newcommand{\segmentrect}[3]{
  decorate{ #1 -- ++ (#2,0) }
  decorate{ -- ++ (0,#3) }
  decorate{ -- ++ ({-(#2)},0) }
  decorate{ -- cycle }
}
  
\begin{document}

\begin{tikzpicture}
\draw (0,0) rectangle ++ (1,1);
\draw[decoration={snake, amplitude=0.4mm,segment length=2mm},red]
  \segmentrect{(0,0)}{1}{1};
\end{tikzpicture}
\end{document}

在此处输入图片描述

不幸的是,同样的方法导致complete sines了彻底的灾难:

\documentclass[margin=3mm,tikz]{standalone}
\usepackage{tikz}
\usetikzlibrary{decorations.pathmorphing}
\input{sine.tex} %% From https://tex.stackexchange.com/a/60757/2113

\newcommand{\segmentrect}[3]{
  decorate{ #1 -- ++ (#2,0) }
  decorate{ -- ++ (0,#3) }
  decorate{ -- ++ ({-(#2)},0) }
  decorate{ -- cycle }
}
  
\begin{document}

\begin{tikzpicture}
\draw (0,0) rectangle ++ (1,1);
\draw[decoration={complete sines},blue]
  \segmentrect{(0,0)}{1}{1};
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容