PSTricks 中的闭合曲线

PSTricks 中的闭合曲线

请考虑以下示例:

\documentclass{article}

\usepackage{pstricks-add}

\def\side{%
  \psline(-2,2)(-1,2)
  \psarc(0,2){1}{180}{0}
  \psline(1,2)(2,2)
  \psline(-1,1)(0,2)(1,1)
}

\begin{document}

\def\length{60}
\psset{unit=79pt}
\begin{pspicture}(-2,-2)(2.15,2.15)
  \multido{\iA=0+90,\iB=-2+1}{4}{%
   \psset{offset=12pt,nrot=:U}
    \rput{\iA}(0,0){\side}
    \pcline[linestyle=dotted]{|<*->|*}(\iB,2)(!\iB\space 1 add 2)
    \ncput*{\length\,cm}
    \pcline[linestyle=dotted]{|<*->|*}(!2 \iB\space 1 add)(2,\iB)
    \ncput*{\length\,cm}
  }
\end{pspicture}

\end{document}

输出

可以看出,曲线没有闭合。我该怎么做呢(或者至少让它看起来是闭合的;我不需要填充内部,所以让它看起来闭合其实就足够了)?

注意:如果有人有比已经提供的解决方案“更简单”的解决方案,我会很高兴看到它。

答案1

由于您不想填充由线段包围的区域,那么这linecap=1将有所帮助!请注意,linecap影响每条线的末端而不是角落(不要将其与混淆linejoin)。有关详细信息,请linejoin参阅我的奖励答案。

在此处输入图片描述

\documentclass{article}

\usepackage{pstricks-add}

\def\side{%
  \psline(-2,2)(-1,2)
  \psarc(0,2){1}{180}{0}
  \psline(1,2)(2,2)
  \psline(-1,1)(0,2)(1,1)
}

\begin{document}

\def\length{60}
\psset{unit=79pt,linecap=1}
\begin{pspicture}(-2,-2)(2.15,2.15)
  \multido{\iA=0+90,\iB=-2+1}{4}{%
   \psset{offset=12pt,nrot=:U}
    \rput{\iA}(0,0){\side}
    \pcline[linestyle=dotted]{|<*->|*}(\iB,2)(!\iB\space 1 add 2)
    \ncput*{\length\,cm}
    \pcline[linestyle=dotted]{|<*->|*}(!2 \iB\space 1 add)(2,\iB)
    \ncput*{\length\,cm}
  }
\end{pspicture}

\end{document}

奖励答案

但是如果您想改变连接线的角,那么使用linejoin

在此处输入图片描述

答案2

您必须绘制一条闭合曲线。直线是一条开放的曲线,您可以用\pscustom和来闭合它\closepath\pscustom也可以包括\multido构造。请参阅以下示例以了解不同的方法:

\documentclass[pstricks, border=3pt]{standalone}
\usepackage{multido}

\begin{document}
\SpecialCoor
\begin{pspicture}(10,2)
\psset{linewidth=10\pslinewidth}

\psline(0,0)(2,0)(2,1)(0,1)(0,0)

\rput(3,0){%
  \pscustom{%
    \psline(0,0)(2,0)(2,1)(0,1)(0,0)
    \closepath
  }%
}%

\rput(6.5,0.8){%
  \psline(1;-45)(1;45)
  \psline(1;45)(1;135)
  \psline(1;135)(1;225)
  \psline(1;225)(1;315)
}

\rput(9,0.8){%
  \pscustom{%
    \moveto(1;-45)
    \multido{\i=45+90}{4}{%
      \psline(1;\i)
    }%
    \closepath
  }%
}%
\end{pspicture}
\end{document}

得出:

在此处输入图片描述

您不能使用\rputinside of\pscustom来定位线条(目前不知道原因)。所以您需要更改部分\multido。以下是您的文档的一部分,已更改为具有紧密曲线(也许有更优雅的方式):

\documentclass{article}

\usepackage{pstricks-add}

\begin{document}

\def\length{60}
\psset{unit=79pt}
\begin{pspicture}(-2,-2)(2.15,2.15)
  \psset{offset=12pt,nrot=:U}
  \pscustom{%
    \moveto(2,2)
    \multido{\iA=-90+-90,\iB=0+-90}{4}{%
      \psarc(2;\iB){1}{!\iB\space 90 add}{!\iB\space 90 sub}
      \rlineto(1;\iA)}
    \closepath
  }
\end{pspicture}

\end{document}

相关内容