1

LaTeXのグラフィックを作成するためにPostScriptの学習を始めたばかりですが、パスをそれ自体と組み合わせる方法がわからないため、ストロークは描画されたシェイプの外側の境界にのみ影響します。私のコードは次のとおりです。

/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

ストロークを描くと、形を横切る線が引かれます。形の外側の境界線だけを打って、内側の線を打たない方法があるかどうか知りたいです。星を形成する線が交差する場所を計算する必要はありません。つまり、10本の小さい線を取得する代わりに5本の線を保持します。

また、私はPSをそのまま学習しており、外部プログラム(Illustratorなどを読む)を使用したくないことにも注意してください。この質問の目的は、PostScriptに関する私の知識を深めることです。

4

2 に答える 2

2

最も簡単なのは、最初にストロークを実行し、次に塗りつぶしを実行することです。これを行うと効果的に線が半分にカットされるため、線幅を2倍にすることをお勧めします。

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

PostScriptには、現在のパスの外側にペイントを制限する必要があるアンチクリップ演算子がありません。内側にペイントを制限するがありますがclip、それはこの問題の助けにはなりません。

以前に提案したように、stroke線幅を2倍にしてからfill白にすることもできますが、これを他のものの上にペイントしたい場合、その戦略は下にあるものを覆い隠します。

または、星を少し大きくすることもできますが(私は疑っていますが、チェックしていませんcurrentlinewidth 2 5 sqrt 2 mul 5 div add sqrt mul 2 div)、それは1 setlinejoin

于 2013-04-01T12:05:56.883 に答える