« プリティプリントの試作 | Home | Don't plagiarize your cover le... »

TikZでマック・ペイントの床しいタイリングを描きましょう

Sat 14 Dec 2013 by mskala Tags used: , , ,

TeXとLaTeXで画を書いたらTikZは便利とポピュラーです。 みんなはきれいなグラフィクスを作っています。 たとえば、これがtexample.netから一つのクリスマスツリーです。

[クリスマスツリー]

しかし、ただのグラフィクスには興味ありません。 今日は1984年からノスタルジックの画を書きましょう。 マック・ペイントを思い出しませんか? そう…

[マック・ペイントのスクリーンショット]

この書き込みは12月14日に「2013年TeXとLaTeX Advent Calendar」ので僕の基金です。 @p_typoさんから昨日(13日)の書き込み@_yyu_さんから明日(15日)の書き込みのリンクがあります。 僕は日本語があまり分らないで、担当者さんが「英語でもいいですヨ!」と言いました。 でも上手のレベルアップをしたいです。 それは『作りましょうプロジェクト』の生きがいです。 だから日本語を書いています。 よろしくおねがいします。

僕はカナダ国ウィニペグ市に住んでいます。 日本から時差は15時です。 だから日本の14日のために、ウィニペグで13日に書き込んでいます。 「未来人がいたら、僕のところに来なさい。以上。」

もちろん黒白ピクセルのタイリングはマック・ペイントの真髄です。 スクリーンショットの下でタイリングを見ることができます。 1984年でマック・クラーシクは本当の色なCRTがありませんでした。 だから色々なタイリングは代替でした。 これはマック・ペイントの気持ちでした。 今2013年にそのタイリングの書くことができますか?

じつは、アップルがマック・ペイントのオープンソースをしていました。 (英語のリンク) Bill AtkinsonさんはApple Pascalと68000アセンブラで書いていました。 でもソースコードを読んでタイリングを探すことが難しいです。 幸いにツイターで@minusbabyさんはマック・ペイントからフォートーショップのPATファイルを書き込んでいました。 PATファイルは分らなくても、イメージがやさしいです。

[PATファイルのイメージ]

TikZ 2.10のユーザーマニュアルは78章でタイリングの作ることを教えています。 二つの型があります。 \pgfdeclarepatternformonlyのは、形状を選んでも色を選びません。 いつもデフォルトの色を使っています。 「form only」でしょ。 \pgfdeclarepatterninherentlycoloredは二人に形状と色を選びます。 言明後色が変わらないです。 「inherently colored」です。 マック・ペイントは色を持たなくても、もしかしたら今色々な色の使うことが出来たいです。 だから\pgfdeclarepatternformonlyをしています。 マニュアルの例文を見てこのコードを書きました。

\pgfdeclarepatternformonly{macpaint5}
{\pgfpointorigin}{\pgfpoint{2mm}{2mm}}{\pgfpoint{2mm}{2mm}}{
  \pgfpathmoveto{\pgfpoint{0mm}{0mm}}
  \pgfpathlineto{\pgfpoint{0mm}{1mm}}
  \pgfpathlineto{\pgfpoint{1mm}{1mm}}
  \pgfpathlineto{\pgfpoint{1mm}{0mm}}
  \pgfpathclose\pgfusepath{fill}
  \pgfpathmoveto{\pgfpoint{1mm}{1mm}}
  \pgfpathlineto{\pgfpoint{1mm}{2mm}}
  \pgfpathlineto{\pgfpoint{2mm}{2mm}}
  \pgfpathlineto{\pgfpoint{2mm}{1mm}}
  \pgfpathclose\pgfusepath{fill}
}

PATファイルのイメージで、それは上左のタイルです。 タイルは2×2のピクセルです。 大ピクセルを使いたいだから1ピクセルについて1ミリにします。 二つのピクセルは黒いだから、二つの真四角を書きます。 (0,0)..(0,1)..(1,1)..(1,0)と(1,1)..(1,2)..(2,2)..(2,1)です。 (0,2)とか(2,0)とか(2,2)とかには、タイルが繰り返します。 今このタイリングを使いましょう!

  1. \documentclass{article}
  2.  
  3. \usepackage{tikz}
  4.  
  5. \pgfdeclarepatternformonly{macpaint5}
  6. {\pgfpointorigin}{\pgfpoint{2mm}{2mm}}{\pgfpoint{2mm}{2mm}}{
  7. \pgfpathmoveto{\pgfpoint{0mm}{0mm}}
  8. \pgfpathlineto{\pgfpoint{0mm}{1mm}}
  9. \pgfpathlineto{\pgfpoint{1mm}{1mm}}
  10. \pgfpathlineto{\pgfpoint{1mm}{0mm}}
  11. \pgfpathclose\pgfusepath{fill}
  12. \pgfpathmoveto{\pgfpoint{1mm}{1mm}}
  13. \pgfpathlineto{\pgfpoint{1mm}{2mm}}
  14. \pgfpathlineto{\pgfpoint{2mm}{2mm}}
  15. \pgfpathlineto{\pgfpoint{2mm}{1mm}}
  16. \pgfpathclose\pgfusepath{fill}
  17. }
  18.  
  19. \begin{document}
  20.  
  21. \begin{tikzpicture}
  22. \filldraw[red] (0,0) circle[radius=2];
  23. \filldraw[pattern=macpaint5] (0,0) rectangle (5,3);
  24. \end{tikzpicture}
  25.  
  26. \end{document}

しかし…

! Package tikz Error: You need to say \usetikzlibrary{patterns}.
 
See the tikz package documentation for explanation.

はい、はい。

[macpaint5のテスト]

問題を見ますか? マック・ペイントのタイリングは、黒白です。 でもじつは、そのイメージで黒と透過的なタイリングがあります。 4つのピクセルから2つのピクセルが書かれました。 ほかのピクセルにバックグラウンドが見られます。 だから白いバックグラウンドを入れると思います。

その上、エイリアシングの問題があります。 引き延ばせばやさしく見ることができます。 隔列が違うです。 もしかしたらPDFビューアの罪です。

[エイリアシング]

そうだから繰り返しの寸法よりタイルの寸法のほうがちょっと伸びなければなりません。 フルブリードが必要です。 これは2番のアタックです。

  1. \documentclass{article}
  2.  
  3. \usepackage{tikz}
  4.  
  5. \usetikzlibrary{patterns} % エラーメッセージだから
  6.  
  7. \pgfdeclarepatternformonly{macpaint5}{\pgfpointorigin}
  8. {\pgfpoint{2.05mm}{2.05mm}} % タイルの寸法は、
  9. {\pgfpoint{2mm}{2mm}}{ % 繰り返しの寸法より大きい
  10. \pgfpathmoveto{\pgfpoint{0mm}{0mm}}
  11. \pgfpathlineto{\pgfpoint{0mm}{1mm}}
  12. \pgfpathlineto{\pgfpoint{1mm}{1mm}}
  13. \pgfpathlineto{\pgfpoint{1mm}{0mm}}
  14. \pgfpathclose\pgfusepath{fill}
  15. \pgfpathmoveto{\pgfpoint{1mm}{1mm}}
  16. \pgfpathlineto{\pgfpoint{1mm}{2.05mm}} % フルブリード
  17. \pgfpathlineto{\pgfpoint{2.05mm}{2.05mm}} % フルブリード
  18. \pgfpathlineto{\pgfpoint{2.05mm}{1mm}} % フルブリード
  19. \pgfpathclose\pgfusepath{fill}
  20. }
  21.  
  22. \begin{document}
  23.  
  24. \begin{tikzpicture}
  25. \filldraw[red] (0,0) circle[radius=2];
  26. \fill[white] (0,0) rectangle (5,3); % 白いバックグラウンド
  27. \filldraw[pattern=macpaint5] (0,0) rectangle (5,3);
  28. \end{tikzpicture}
  29.  
  30. \end{document}

これはイメージです。

[2番のテスト]

白いバックグラウンドはきれいです。 今でもエイリアシングはちょっとあります。 でも、上達をしました。 完璧は出来ないと思います。

マック・ペイントでは、真っ白と真っ黒以外36類のタイリングがあります。 がんばったら難しくないです。 ページで見せなくてもダウンロードを書き込みました。 \foreachでタイリング見本を作りました。

  \foreach \x/\y/\r/\n in {
     2/2/2/1, 3/5/1.9/2, 15/24/3/3, 14.5/15.5/2.5/4, 7/20/3.5/5,%
     9/3/3/6, 4/8/2/7, 16/5/2/8, 7/9/3/9, 10/22.5/2.5/10,%
     2/18/2.3/11, 4/16/2.1/12, 6/14/2.5/13, 8/12/2/14, 13/9.5/3.5/15,%
     2/11/2.5/16, 2/23/2/17, 10/16/2.4/18, 16/19/2/19, 13/2/2.5/20,%
     5/3/1.8/21, 12.5/6/2.5/22, 16/11/2/23, 1.5/7/1.5/24, 4/25/2/25,%
     7/24/2.2/26, 15/13/1.8/27, 16/2.5/2.2/28, 2/13.8/2.2/29, 7/17/1.8/30,%
     5.5/5.5/1.9/31, 4/21.5/2/32, 11.5/13/3/33, 12.5/19.5/3/34,%
     16/8/2/35, 9/7/2/36%
  } {
    \path[fill=white] (\x,\y) circle[radius=\r];
    \path[fill,pattern=macpaint\n,draw,thick] (\x,\y) circle[radius=\r];
  }

これはデモのイメージです。 タイリング見本の上に荷札を書きました。 ダウンロードはTeXファイルPDFファイルがあります。

[タイリング見本]

小さなピクセルのためにPerlでタイリングを変えました。 いたるところ1ミリから0.25ミリまで変えました。 TikZのユザーマニューアルのは、「a more-or-less successful emulation of “mutable” patterns」に話しています。 でも難しいと思います。 たった一つの書き込みなら、Perlが好きです。 その後eps2pgfでPostScriptの虎から.texファイルを作りました。 テキストエディタで色のコマンドを拭ってタイリングのコマンドを入れました。 これは結果です。 マンガ流と思います。

[全部のタイリング]

ダウンロードはTeXファイルPDFファイルがあります。 でも気を付けて下さいよ! そのPDFは、多くて小さい形態を含みます。 もしかしたらビューアやプリンタは難しく描画をしています。 じつは、僕のレーザープリンタは虎のPDFのプリントがぜんぜんできません。

マック・ペイントの床しい気持ちを楽しんでください。

0 comments



(optional field)
(optional field)
Answer "bonobo" here to fight spam. ここに「bonobo」を答えてください。SPAMを退治しましょう!
I reserve the right to delete or edit comments in any way and for any reason. New comments are held for a period of time before being shown to other users.