M.C.P.C.

―むり・くり―プラスコミュニケーション(更新終了)


| トップページ |

2004年4月29日 15:22

Illustratorのアウトプット値でカクカク問題(PostScriptの平滑度問題)(2)

このエントリーをはてなブックマークに追加 mixiチェック

Illustratorアイコン前回記事、平滑度を適当に設定すると、Illustrator はとんでもない平滑度の eps を吐き出すよ、アドビなにやってんの! ていう話の続きです。

Illustrator 8 の epsなんかでは、

  800 Ar

というところで、オブジェクトのアウトプットの値を設定しています。それで、実際のカクカク具合は、setflat っていうオペレータでデバイスに指示するのだけれども、こいつが受け付けるのは、平滑度 0.2~100(Photoshopのクリッピングパスでおなじみ)だったりしますので、変換が必要です。
(僕は 生PSについては、setflat 位しか語れません。予防線、予防線……)

/Ar
{
  72 exch div
  0 dtransform dup mul exch dup mul add sqrt
  dup 1 lt
  {
    pop 1
  } if
  setflat
} def
exch
スタックの上から2つを入れ替える
dup
スタックの一番上を複製して一番上に乗せる
mul
スタックの上から2つで掛け算
add
スタックの上から2つで掛け算足し算
adddiv
スタックの上から2つで割り算
sqrt
言わずと知れた平方根
LISP 苦手なんで逆ポーランド表記あんま読めないんですが、これって、Ar のオペランドを f として、( 72 / f , 0 ) をデバイスの距離ベクトル ( x' , y' ) に変換して、√( x' * x' + y' * y' ) しているのですよね。あと結果が 1 未満になったら、先ほどの結果を捨てて 1 にしてしまうという条件が付いているのですね。exch でスタック交換したりするのが、あまりにも技巧的で LISP 系にはまる人はすごくはまるんだろうなと思うとともに、僕はむかし Z80 を機械語で転がしていた頃をほんのりと思い出すのでした。もうマネできない。

計算機実習のときにハンドアセンブルする課題面倒なんで MSX でアセンブラかけて提出したので課題自体は早く終わったが A レジスタクリアに XOR A を使ってしまい意味不明ということで減点食らったのもいい思い出だ。日高徹のバカー(課題以外では役に立った。テープリードBIOSをフックしてディスク版ソフトにしたりとか)。

Postscript を吐き出すアプリをかける人って結構いたりするのですよね(僕の近くにもいらっしゃいます)。確かに自動組版での自由度は一番デカいけれども……

(2004.4.30訂正)
<del>LISP 苦手なんで</del><ins>逆ポーランド表記</ins>
<del> LISP 系にはまる人はすごくはまるんだろうなと思うとともに</del>
計算機言語の講義サボってたの丸分かり。PostscriptはForth系の言語で、逆ポーランド表記が特徴なんですよね。LISPはどっちかというと関数型じゃん。許して、偉い人。

(2004.8.23訂正)
<del>
<dt>add</dt><dd>スタックの上から2つで掛け算</dd>
<dt>add</dt><dd>スタックの上から2つで割り算</dd></del>
<ins>
<dt>add</dt><dd>スタックの上から2つで足し算</dd>
<dt>div</dt><dd>スタックの上から2つで割り算</dd>
</ins>

投稿 大野 義貴 [Illustrator] | |

トラックバック(0)

トラックバックURL: http://blog.dtpwiki.jp/MTOS/mt-tb.cgi/68

コメントする