So-net無料ブログ作成
検索選択

tikz/pgf のラッパー [pgf/tikz]

TikzPgfMPMacroTest02.png


Tikz/Pgf を本格的に使う為には,
これまで picture環境MetaPost with MePoTeX
作ってきたものをなるたけスムーズに移行できた方が良い。

因にpicture環境での自作マクロをMetaPostに移すのは
とてもスムーズに運んだ。

で,Tikz/Pgfだ。

とりあえず少しは何とかなりそうな感じが見えてきた。

具体的にはこんな具合だ

% 角度表示用 ¥def¥kaku#1{#1^{¥circ}} % 描画環境 ¥begin{qbPMP}ごにょごにょ〜¥end{qbPMP} ¥def¥qbPMP[#1](#2,#3)(#4,#5){ ¥begin{tikzpicture}}% ¥def¥endqbPMP{¥end{tikzpicture}} ¥def¥qbPMPt[#1]{% ¥begin{tikzpicture}[scale=#1]}% ¥def¥endqbPMPt{¥end{tikzpicture}} % % 方眼 ¥def¥qbPlattice(#1,#2)(#3,#4){%(#1,#2)左下座標(#3,#4)幅高さ ¥draw [help lines] (#1,#2) <a href="http://match.seesaa.jp/afr.pl?hid=25&sid=archimedes:000207394434&k=grid&ic=utf8" class="affiliate-link" target="_blank">grid</a> (#3,#4);} % 点の定義 ¥def¥qbPointDef#1(#2,#3){¥coordinate (#1) at (#2,#3);} %¥def¥qbPointsDef#1(#2,#3)#4.{¥qbPointDef#1(#2,#3)¥ifx#4¥@empty¥<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=archimedes:000207394434&k=else&ic=utf8" class="affiliate-link" target="_blank">else</a>¥tracingmacros1¥qbPointsDef#4.¥fi}% ¥def¥qbPointsDef#1(#2,#3)#4.{¥qbPointDef#1(#2,#3)¥ifnot@nil#4¥qbPointsDef#4.}% % ¥ifnot@nil#1#2#1が¥@nilなら#2を読み捨て、¥@nilなら#2はそのまま({}は一段階はぎ取られる。) % 点のラベル ¥def¥qbGptlabel#1(#2){ ¥node [label={[label <a href="http://match.seesaa.jp/afr.pl?hid=25&sid=archimedes:000207394434&k=distance&ic=utf8" class="affiliate-link" target="_blank">distance</a>=-1mm]30*#2:${¥rm #1}$}] at (#1) {}; %¥path (#1) ++(1:30*#2) node {#2}; } ¥def¥qbGptlabels#1(#2)#3.{¥qbGptlabel#1(#2)¥ifnot@nil#3¥qbGptlabels#3.} % 線分を描く ¥def¥qbGline#1#2{¥draw (#1)--(#2);} ¥def¥qbGlineC[#1]#2#3{¥draw[#1](#2)--(#3);} ¥def¥qbGlines#1#2#3.{¥qbGline#1#2¥ifnot@nil#3¥qbGlines#2#3.}% ¥def¥qbGlineCs[#1]#2#3#4.{¥qbGlineC[#1]#2#3¥ifnot@nil#4¥qbGlineCs[#1]#3#4.}% % ¥ifnot@nil#1#2#1が¥@nilなら#2を読み捨て、¥@nilなら#2はそのまま({}は一段階はぎ取られる。) ¥def¥qbGlineB#1#2{¥draw [[<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=archimedes:000207394434&k=ultra&ic=utf8" class="affiliate-link" target="_blank">ultra</a> thick] (#1)--(#2);} ¥def¥qbGlineBC[#1]#2#3{¥draw[#1,ultra thick](#2)--(#3);} ¥def¥qbGlineBs#1#2#3.{¥qbGlineB#1#2¥ifnot@nil#3¥qbGlineBs#2#3.}% ¥def¥qbGlineBCs[#1]#2#3#4.{¥qbGlineBC[#1]#2#3¥ifnot@nil#4¥qbGlineBCs[#1]#3#4.}% % 円を描く ¥def¥qbGcircl#1#2{¥node [draw, <a href="http://match.seesaa.jp/afr.pl?hid=25&sid=archimedes:000207394434&k=circle&ic=utf8" class="affiliate-link" target="_blank">circle</a> <a href="http://match.seesaa.jp/afr.pl?hid=25&sid=archimedes:000207394434&k=through&ic=utf8" class="affiliate-link" target="_blank">through</a>=(#2)] at (#1) {};} ¥def¥qbGcirclC[#1]#2#3{¥node [draw, <a href="http://match.seesaa.jp/afr.pl?hid=25&sid=archimedes:000207394434&k=color&ic=utf8" class="affiliate-link" target="_blank">color</a>=#1, circle through=(#3)] at (#2) {};} ¥def¥qbGcirclB#1#2{¥node [draw, ultra thick, circle through=(#2)] at (#1) {};} ¥def¥qbGcirclBC[#1]#2#3{¥node [draw, ultra thick, color=#1, circle through=(#3)] at (#2) {};} % 点を黒丸で表示する ¥def¥qbGpoint#1{¥fill (#1) circle (1.6pt);} ¥def¥qbGpoints#1#2.{¥qbGpoint#1¥ifnot@nil#2¥qbGpoints#2.}% ¥def¥qbGpointb#1{¥fill (#1) circle (2pt);} ¥def¥qbGpointB#1{¥fill (#1) circle (3pt);} ¥def¥qbGpointo#1{¥tkzDrawPoints[color=<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=archimedes:000207394434&k=black&ic=utf8" class="affiliate-link" target="_blank">black</a>,fill=<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=archimedes:000207394434&k=white&ic=utf8" class="affiliate-link" target="_blank">white</a>,<a href="http://match.seesaa.jp/afr.pl?hid=25&sid=archimedes:000207394434&k=size&ic=utf8" class="affiliate-link" target="_blank">size</a>=8](#1)} ¥def¥qbGpointO#1{¥tkzDrawPoints[color=black,fill=white,size=12](#1)} % 中点/分点を計算する ¥def¥qbGmidPoint#1#2#3{¥coordinate (#3) at ($(#1)!.5!(#2)$);} ¥def¥qbGdivPoint#1#2 #3:#4 #5{¥coordinate (#5) at ($(#1)!.(#3/(#3+#4))!(#2)$);} % 交点 ¥def¥qbGcrossPoint #1#2 #3#4 #5{¥tkzInterLL(#1,#2)(#3,#4)¥tkzGetPoint{#5}} % 垂線の足を求める ¥def¥qbGverticalPoint#1#2#3#4{¥coordinate (#4) at ($(#2)!(#1)!(#3)$);}%BからOAに下ろした垂線の足 % 角の二等分「点」 ¥def¥qbGhalfanglePoint#1#2#3 #4{% ¥coordinate (s) at ($(#1)!1cm!(#2)$);¥coordinate (t) at ($(#1)!1cm!(#3)$); ¥coordinate (u) at ($(s)!.5!(t)$);¥tkzInterLL(#1,u)(#2,#3)¥tkzGetPoint{#4}} % 点の回転 ¥def¥qbGrotPoint#1#2 #3 #4{¥coordinate (#4) at ($(#1)!1!#3:(#2)$);} % 垂直マーク ¥def¥qbGverticalMark#1#2#3{¥draw ($(#2)!8pt!(#1)$)--($(#2)!8pt!(#1)!8pt!90:(#2)$)--($(#2)!8pt!(#3)$);} % 角の表示 ¥def¥qbGangleMarkFC[#1,#2]#3#4#5{¥tkzMarkAngle[fill= #2,size=#1cm,opacity=.5](#5,#4,#3)} ¥def¥qbGangleMarkFCs([#1,#2]#3#4#5#6){¥qbGangleMarkFC[#1,#2]#3#4#5¥ifnot@nil#6¥qbGangleMarkFCs(#6)}% % 角度のラベル ¥def¥qbGangleLabel#1#2#3(#4){¥tkzLabelAngle[pos = 1](#1,#2,#3){$#4$}} ¥def¥qbGangleLabelp[#1]#2#3#4(#5){¥tkzLabelAngle[pos = #1](#2,#3,#4){$#5$}}

Tikz/Pgf のラッパー(2) [TikZ/PGF]

TPMT02a.png
さてさて,Tikz/Pgfのラッパーはまぁ着々と進んでいるわけですが, 一方で色々気になる事もあり, 今日はCarpets Theoremがサンプルです。 絨毯定理。知ってますか? って中身は知っていても,名前はねえ。 初耳?でしたよ。ふむふむ。

エッシャー風 [Math]

tikz/pgfはお休み。
今回は使い慣れてきたMetaPostで
所謂エッシャーのSquare Limit

Escher01e.png


こんなんです。
エッシャーのオリジナルを知っている人は
何か違うよねって思うでしょう。
いや、それ以前に Square ちゃうし!!とも。

何か取り敢えず鳥さんの下に二匹の鳥さんで
再帰掛けたらこうなっちゃったわけで
これはこれで面白いかという出来上がりです。

MetaPostでは,pictureというデータ形式があり
まずpathで鳥形の枠の一辺を作って
それを回転させたりひっくり返したりして繋げて cycle にして
用意します。外枠ですね。

で,今度はその外枠を picture にして
そこに新しく path を描き加える!! addto というコマンドです。
これを今回metapostのマニュアルを眺めて使ってみました。
楽チン楽チン。嘴や胴と羽を分ける線など簡単に追加。

で、外枠に色を埋めてそこにpictureで細かい線加えて
そいつをまたpictureにする。
色を埋める部分で三色替えて向き違いを入れて6枚のタイルを用意します。

で後はくるくる回しながら並べるだけ
ちなみにまわしながら小さくするのは zscled (x,y)
複素平面で複素数を掛ける変換と同等なので
回転と拡大縮小が一度に簡単に出来るというわけです

詳しくはお訊ねくださいませ。
メッセージを送る

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。

×

この広告は1年以上新しい記事の更新がないブログに表示されております。