
Я хочу нарисовать логотип Бэтмена. Поскольку он симметричен относительно вертикальной линии, будет удобнее сначала определить правую часть (или левую часть), а затем отразить ее, чтобы получить другую часть. Важное замечание, которое вы должны учесть, заключается в том, что логотип должен быть построен замкнутой кривой, которую можно использовать в качестве обтравочного контура.
Согласно данным pst-news13
на странице 4, мы имеем \reversepath
, что можно использовать для построения кривой в обратных координатах.
К сожалению, мне не удалось использовать \reversepath
код, показанный в следующем примере.
\documentclass[pstricks,border=6pt]{standalone}
\SpecialCoor
\pstVerb
{
/theta 72 def
/Major 6.0 def
/Minor 3.3 def
% b a t p2c ---> x y
% where b (semi-minor), a (semi-major), t (theta)
/p2c {dup 3 1 roll cos mul 3 1 roll sin mul} bind def
}
\def\RightPart
{
\psline(0,2.7)(0.5,2.7)(1,3.25)
\psbezier(1.2,1.3)(1.3,1.0)(2.0,1.0)
\psbezier(3.0,1.0)(3.0,2.2)(!Minor Major theta p2c)
\psellipticarcn(0,0)(!Major Minor){(!Minor Major theta p2c)}{(!Minor Major theta neg p2c)}
\psbezier(4,-2)(4,0)(2.2,-1.8)
\psbezier(1.5,-1)(1,-1)(0,-3.2)
}
\def\LeftPart
{
\scale{-1 1}
\reversepath
\psbezier(1.5,-1)(1,-1)(0,-3.2)
\psbezier(4,-2)(4,0)(2.2,-1.8)
\psellipticarcn(0,0)(!Major Minor){(!Minor Major theta p2c)}{(!Minor Major theta neg p2c)}
\psbezier(3.0,1.0)(3.0,2.2)(!Minor Major theta p2c)
\psbezier(1.2,1.3)(1.3,1.0)(2.0,1.0)
\psline(0,2.7)(0.5,2.7)(1,3.25)
\closepath
}
\begin{document}
\begin{pspicture}[showgrid=false](-7.85,-4.85)(7.85,4.85)
\pscustom[dimen=middle]{\RightPart}
\end{pspicture}
\begin{pspicture}[showgrid=false](-7.85,-4.85)(7.85,4.85)
\pscustom[dimen=middle]{\LeftPart}
\end{pspicture}
\begin{pspicture}[showgrid=false](-7.85,-4.85)(7.85,4.85)
\pscustom[dimen=middle,fillstyle=solid,fillcolor=red]{\RightPart\LeftPart}
\end{pspicture}
\end{document}
Так вот мой вопрос: как использовать \reversepath
в этом случае?
решение1
Потратив много времени на выяснение того, как это \reversepath
работает, теперь мы понимаем его поведение.
\reversepath
влияет на предыдущие пути, а не на последующие (как, вероятно, предполагает большинство людей). Его поведение несовместимо с другими макросами (такими как \scale
, \translate
, и т. д.), определенными для pscustom
. Это одно из многих других несоответствий в PSTricks. Но это все равно весело!
\documentclass[pstricks,border=12pt]{standalone}
% b a t p2c ---> x y
% where b (semi-minor), a (semi-major), t (theta)
\pstVerb{/p2c {dup 3 1 roll cos mul 3 1 roll sin mul} bind def}
\def\RightPart
{
\psline(0.5,2.7)(1,3.25)
\psbezier(1.2,1.3)(1.3,1.0)(2.0,1.0)
\psbezier(3.0,1.0)(3.0,2.2)(!3.3 6.0 72 p2c)
\psellipticarcn(6.0,3.3){(!3.3 6.0 72 p2c)}{(!3.3 6.0 72 neg p2c)}
\psbezier(4,-2)(4,0)(2.2,-1.8)
\psbezier(1.5,-1)(1,-1)(0,-3.2)
}
\begin{document}
\begin{pspicture}[showgrid](-7,-4)(7,4)
\pscustom[dimen=middle,fillstyle=solid,fillcolor=orange,linewidth=6pt]
{
\RightPart
\reversepath
\scale{-1 1}
\RightPart
\closepath
}
\end{pspicture}
\end{document}