1

我刚刚开始学习 PostScript 以便为 LaTeX 生成图形,但我不知道如何将路径与其自身组合,因此笔画只会影响绘制形状的外边框。我的代码如下:

/black { 0 0 0 1 setcmykcolor } def
/gold { 0.02 0.17 0.72 0.05 setcmykcolor } def
newpath
  % the center is 1/2w and 1/2h
  /cx { 1200 2.0 div } def % center-x
  /cy {  600 2.0 div } def % center-y
  /r  {  600 9.0 div
               4 mul
             2.0 div } def % star's radius
  cx r   0 cos mul add
  cy r   0 sin mul add moveto
  cx r 144 cos mul add
  cy r 144 sin mul add lineto
  cx r 288 cos mul add
  cy r 288 sin mul add lineto
  cx r  72 cos mul add
  cy r  72 sin mul add lineto
  cx r 216 cos mul add
  cy r 216 sin mul add lineto
closepath
gsave
gold fill
grestore
1 setlinewidth
black stroke

绘制笔画时,将绘制与形状相交的线条。我想知道是否有办法只让形状的外边界而不是内线。我宁愿不必计算形成星形的线相交的位置,保留 5 条线而不是获得 10 条较小的线。

另请注意,我正在按原样学习 PS,并且不想使用外部程序(阅读 Illustrator 等)。这个问题的目的是建立我对 PostScript 的了解。

4

2 回答 2

2

最简单的方法是先描边,然后填充。您可能希望将线宽加倍,因为这样做可以有效地将线条减半。

%...
closepath
gsave
  2 setlinewidth
  black stroke
grestore
gold fill
于 2012-07-03T03:04:44.020 回答
1

PostScript 缺少一个antilip 操作符,它应该将绘画限制在当前路径之外。有clip,它将绘画限制在内部,但这对解决这个问题没有帮助。

如前所述,您可以使用stroke双倍线宽,然后fill是白色,但是如果您想将其绘制在其他东西之上,那么该策略会掩盖下面的任何内容。

或者你可以让星星大一点(我怀疑,但还没有检查过currentlinewidth 2 5 sqrt 2 mul 5 div add sqrt mul 2 div),但只有在1 setlinejoin.

于 2013-04-01T12:05:56.883 回答