&size(24){''ベン図(Venn Diagram)''}; -emath でベン図を描画する例は #ref(http://emath.s40.xrea.com/xdir/tex.htm,,使用例) 4. 雑~ (2) ベン図~ にありますが, ここでは,PostScript 特有の機能を用いた例を置いてみます。 #contents #br *例 [#e4818e55] **和集合 [#c3c3ddb9] 2つの集合A, Bの和集合を図示します。 #ref(AcupB01.png) CENTER:&ref(AcupB01.pdf,,上のPDF); CENTER:&ref(AcupB01p.tex,,上のソースリスト); +EMpscontinue環境内では,\Enko は円弧を描画せず,カレントパスに円弧を追加するだけです。~ ここでは,2つの円弧A, B(いずれも優弧)をつないで塗りつぶしの境界を作ります。~ くどいですが,この時点では何も描画されていません。 +\psfill で,カレントパスに囲まれた領域内が塗りつぶされます。~ ここでは \begin{EMpscolor}{pink}内ですから,pink で塗りつぶされます。 +続いて,\psstroke でカレントパスが描画されます。~ \psstroke は pink の色指定の外ですから,デフォルト(黒)で描画されます。 +塗りの色指定は~ \psfill<nuriiro=pink>~ と記述することも出来ます。ただし,~ \gsave~ \psfill<nuriiro=pink>~ \grestore~ と,PostScript のグルーピングをしておく方が良いでしょう。 次は斜線塗りです。 #ref(AcupB01s.png) CENTER:&ref(AcupB01s.pdf,,上のPDF); CENTER:&ref(AcupB01sp.tex,,上のソースリスト); +\psclip で,クリッピング領域を設定し +\Nuritubusi*{\LT\LB\RB\RT}で,全平面を斜線塗りしています。 +\gsave と \grestore で囲み,クリップを局所化して,他の部分に影響を与えないようにしています。 +上のソースリスト部は~ \gsave~ \psfill*<linewidth=3>~ \grestore~ と簡潔に記述することも可能です。 **共通部分 [#zf5e8d34] 共通部分を描画するには,和集合で 優弧を接続した ところを 劣弧を接続する ように修正するだけです。 #ref(AcapB01.png) CENTER:&ref(AcapB01.pdf,,上のPDF); CENTER:&ref(AcapB01p.tex,,上のソースリスト); 斜線塗りも同様です。 #ref(AcapB01s.png) CENTER:&ref(AcapB01s.pdf,,上のPDF); CENTER:&ref(AcapB01sp.tex,,上のソースリスト); **補集合 [#s8c75398] A を表す円周と全体集合を表す長方形の周を接続したパスを作り,塗りつぶします。 #ref(cA01.png) CENTER:&ref(cA01p.tex,,上のソースリスト); 塗りつぶしパスの作り方を説明します。 #ref(cA11.png) -説明の都合上,円全部ではなく~ \Enko\A\rA{2}{358}~ として,2度から358度までの優弧を描画します。~ この時点でパスは,始点をP, 終点をQとする優弧PQとなります。~ (なお,P, Qを通り水平な直線と全体集合をあらわす長方形の右辺との交点をそれぞれP', Q'とします。)~ このパスに~ \psLineto{%~ \QQ\trueRB\trueLB\trueLT%~ \trueRT\PP}%~ として,次の折れ線をつなげます:~ Q, Q', 長方形の右下(RB), 左下(LB), 左上(LT), 右上(RT), P'~ 続いて,\psclosepath により,パスの始点Pと終点P'を結ぶ線分が追加され,パスは閉曲線となります。~ この閉曲線の内部が \psfill<nuriiro=pink> により,ピンクで塗りつぶされます。~ (実際には,2度から358度までではなく,0度から360度まで,~ すなわち円全部として補集合の塗りつぶしが実行されています。) 斜線塗りは \psfill を \psfill* に変更するだけです。 #ref(cA01s.png) CENTER:&ref(cA01sp.tex,,上のソースリスト); **差集合 [#q4173cb7] 差集合(集合A の要素で,集合Bに含まれないものの集合)です。 #ref(Acap(cB)01.png) CENTER:&ref(Acap(cB)01p.tex,,上のソースリスト); -集合A, Bを表す円の交点をC, Dとします(Cが下方,Dが上方です)。~ 塗りつぶし path の設定は,まずは~ \Enko\A\rA{hazimeten=\D}{owariten=\C}~ によって,円Aの周上をDからCまで正の回転(時計の針と反対)でたどります(優弧DC)。続いて~ \Enko<arcn>\B\rB{hazimeten=\C}{owariten=\D}%~ によって,円Bの周上をCからDまで負の回転(時計の針と同じ)でたどります(劣弧CD)。~ 負の回転でたどる指令が,<arcn>オプションです。 斜線塗りは \psfill を \psfill* に変更するだけです。 #ref(Acap(cB)01s.png) CENTER:&ref(Acap(cB)01sp.tex,,上のソースリスト); **対称差 [#rcc07ddf] どちらか一方の集合には含まれるが両方とも含まれることがないような要素の集合 #ref(AxorB01.png) CENTER:&ref(AxorB01p.tex,,上のソースリスト); #ref(AxorB01s.png) CENTER:&ref(AxorB01sp.tex,,上のソースリスト); *注意事項 [#mc845a55] *関連事項 [#xe0aa641] RIGHT:&counter;