让我分为两种情况来讨论:
使用\CW
\documentclass[border=12pt]{standalone}
\usepackage{pstricks}
\def\CW{\psline(2,2)(3,4)(4,1)(4,-3)}
\begin{document}
\begin{pspicture}[showgrid=top](-5,-5)(5,5)
\pscustom[fillstyle=solid,fillcolor=red,linewidth=5pt]
{
\CW
\reversepath
\scale{-1 1}
\CW
\closepath
\pscircle{1}
}
\end{pspicture}
\end{document}
分析
\def\CW{\psline(2,2)(3,4)(4,1)(4,-3)}
当我们从原点观察时,是一条顺时针路径。以下代码片段通过路径反转逆时针“追踪”左侧部分
\CW
。\CW \reversepath
以下代码片段通过
\CW
垂直镜像逆时针“追踪”右侧部分。\scale{-1 1} \CW
以下代码片段通过闭合路径“创建”一个多边形。该多边形的方向为逆时针。
\closepath
以下代码片段按照设计“制作”了一个逆时针的圆圈。
\pscircle{1}
请注意,
\pscustom
默认情况下使用非零规则。由于多边形和圆具有相同的方向(逆时针),因此所有点都在“内部”,因此没有洞。因此上面给出的输出不一致。
使用\CCW
\documentclass[border=12pt]{standalone}
\usepackage{pstricks}
\def\CCW{\psline(4,-3)(4,1)(3,4)(2,2)}
\begin{document}
\begin{pspicture}[showgrid=top](-5,-5)(5,5)
\pscustom[fillstyle=solid,fillcolor=red,linewidth=5pt]
{
\CCW
\reversepath
\scale{-1 1}
\CCW
\closepath
\pscircle{1}
}
\end{pspicture}
\end{document}
分析
\def\CCW{\psline(4,-3)(4,1)(3,4)(2,2)}
当我们从原点观察时,是一条逆时针路径。以下代码片段通过路径反转顺时针“追踪”左侧部分
\CCW
。\CCW \reversepath
以下代码片段通过
\CCW
垂直镜像来顺时针“追踪”右侧部分。\scale{-1 1} \CCW
以下代码片段通过闭合路径“创建”一个多边形。该多边形的方向为顺时针。
\closepath
以下代码片段按照设计“制作”了一个逆时针的圆圈。
\pscircle{1}
注意,
\pscustom
默认情况下使用非零规则。由于多边形和圆的方向不同,圆内的点会变成“外部”,因此有一个洞。因此上面给出的输出也是不一致的。
问题
PSTricks 如何确定由 构成的复合对象的最终路径方向\reversepath
?在我看来,PSTricks\reversepath
在关闭路径时添加了一个额外内容。请纠正我。
答案1
\scale{-1 1}
是顺时针方向形成圆圈的原因。
\documentclass[border=12pt]{standalone}
\usepackage{pstricks}
\def\CW{\psline(2,2)(3,4)(4,1)(4,-3)}
\begin{document}
\begin{pspicture}[showgrid=top](-5,-5)(5,5)
\pscustom[fillstyle=solid,fillcolor=red,linewidth=5pt]
{
\CW % (2,2)(3,4)(4,1)(4,-3)
\reversepath % now (4,-3)(4,1)(3,4)(2,2)
\scale{-1 1}
\CW % (-2,2)(-3,4)(-4,1)(-4,-3)
\closepath % line from -4,-3 to 4,-3 counter clockwise path
% \pscircle moves the current path to (-1,0) !!
\pscircle(0,0){1}% clockwise: circle not filled (scale -1 1)!!
}% The inner of the circle is _not_ inside the path
\end{pspicture}
\end{document}