emath saloon (Read Only)

新規発言一覧最新記事過去一覧検索HOME

No.644  Re:球の描画(その2)
発言者: 田中徹
発言日: 2008 04/24 10:16
> リンクから「ギャラリー」を拝見させていただきました.

なかなか tDBさん作 と重複しないように作ろうとすると
何十年もかかりそうで、更新をサボっています。Orz.

> その中にある「球の描画(その2)」の書き方が気になりました.
> どのようなソースになっているか知りたいのですが
> 教えていただけないでしょうか?

この saloon No.326 球擬きというマクロにしてあります。
現在では [debug] オプションでなく [remake] オプションがよいかもしれません。
No.323 の話題のため複数個描画しているので時間がかかります。
適当に間引いて確認してください。

また No.326 にも書いてありますが、
グラデーションを確認するには
> Ps のお約束事で恐縮ですが
> dviout では荒く見えるので PDF または PS を作成して骨を拾ってやってください。
と ps ファイルの変換も必要です。

> 他にも「パスカルの三角形」など参考にさせていただきたいのが
> たくさんあります.

次のソースは tDB さんの short-pascal.tex (出所は失念) です。

斜交座標、ループ処理、二項係数関数と
興味深いものが(さりげなく)ちりばめられています。

\documentclass[a4j]{jarticle}
\usepackage{emathPa}
\usepackage{showexample}

\makeatletter
\def\NikouKeisuu#1#2#3{%
% #1 個から #2 個を取り出す場合の数を #3 の制御綴りに返す.
\IMul{#2}{2}\NK@tmp
\ifnum\NK@tmp >#1\relax\ISub{#1}{#2}\NK@k\NikouKeisuu{#1}{\NK@k}#3\relax
\else
\Cfor{\edef#3{1}\edef\NK@n{#1}\edef\NK@i{0}}{\NK@i<#2}{\Decr\NK@n}\do{%
\Incr\NK@i
\IMul{#3}\NK@n#3\relax
\IDiv{#3}\NK@i#3\relax
}%
\fi
}
%
\def\PascalTriangle#1{%
\Div{#1}{2}\PT@x
\Mul{#1}{.867}\PT@y
\begin{zahyou*}[Ueyohaku=1ex,Sitayohaku=1ex](-\PT@x,\PT@y)(-\PT@y,0)
\Rdef(1,-120)\PT@Ex
\Rdef(1,-60)\PT@Ey
\def\O@@{(0,0)}%
\IAdd{#1}{1}\PT@NN
\Put\O@@{%
\begin{azahyou}\PT@Ex\PT@Ey
% メッシュ
\Ifor\PT@i{0}{\PT@NN}\Do{%
\ISub{#1}{\PT@i}\PT@j
\azDrawline{(0,\PT@i)(\PT@j,\PT@i)}%
\azDrawline{(\PT@i,0)(\PT@i,\PT@j)}%
}%
% 二項係数の配置
\Ifor\PT@n{1}{\PT@NN}\Do{%
\IAdd\PT@n{1}\PT@np
\Ifor\PT@k{0}\PT@np\Do{%
\ISub\PT@n\PT@k\PT@x
\NikouKeisuu{\PT@n}{\PT@k}\PT@nCk
\azPut{(\PT@x,\PT@k)}(0,0)[c]{%
\colorbox{white}{\PT@nCk}}%
}%
}%
\end{azahyou}}%
\end{zahyou*}}
\makeatother

\begin{document}
\begin{boxnote}
\begin{verbatim}
\def\PascalTriangle#1{%
\Div{#1}{2}\PT@x
\Mul{#1}{.867}\PT@y
\begin{zahyou*}[Ueyohaku=1ex,Sitayohaku=1ex](-\PT@x,\PT@y)(-\PT@y,0)
\Rdef(1,-120)\PT@Ex
\Rdef(1,-60)\PT@Ey
\def\O@@{(0,0)}%
\IAdd{#1}{1}\PT@NN
\Put\O@@{%
\begin{azahyou}\PT@Ex\PT@Ey
% メッシュ
\Ifor\PT@i{0}{\PT@NN}\Do{%
\ISub{#1}{\PT@i}\PT@j
\azDrawline{(0,\PT@i)(\PT@j,\PT@i)}%
\azDrawline{(\PT@i,0)(\PT@i,\PT@j)}%
}%
% 二項係数の配置
\Ifor\PT@n{1}{\PT@NN}\Do{%
\IAdd\PT@n{1}\PT@np
\Ifor\PT@k{0}\PT@np\Do{%
\ISub\PT@n\PT@k\PT@x
\NikouKeisuu{\PT@n}{\PT@k}\PT@nCk
\azPut{(\PT@x,\PT@k)}(0,0)[c]{%
\colorbox{white}{\PT@nCk}}%
}%
}%
\end{azahyou}}%
\end{zahyou*}}
\end{verbatim}
\end{boxnote}

$n=7$として動かしてみます.

\begin{showEx}(.34,.6){n=7}
\unitlength=10mm\relax
\PascalTriangle{7}
\end{showEx}

\verb+\PascalTriangle+は,\textsf{zahyou, azahyou}環境を用いています.
設計では,\verb+\unitlength=10mm+としていましたが,\verb+\PascalTriangle+
内では\verb+\unitlength+はいじっていません.
このマクロを呼ぶ前に設定する必要があります.
小さめにして,文字サイズも小さくしてみます.

\begin{showEx}(.34,.6){n=10}
\unitlength=8mm\relax
\footnotesize
\PascalTriangle{10}
\end{showEx}
\end{document}


▼関連発言

643:球の描画(その2) [lovesugar] 04/24 08:07
 └644:Re:球の描画(その2) [田中徹] 04/24 10:16
  └645:Re[2]:球の描画(その2) [lovesugar] 04/24 15:14
   └646:Re[3]:球の描画(その2) [田中徹] 04/24 18:00
    └647:Re[4]:球の描画(その2) [lovesugar] 04/24 19:53
     └648:Re[5]:球の描画(その2) [田中徹] 04/24 21:49
      └649:Re[6]:球の描画(その2) [lovesugar] 04/24 21:58
       └650:Re[7]:球の描画(その2) [田中徹] 04/24 22:40
        └651:Re[8]:球の描画(その2) [lovesugar] 04/24 23:50<-last

Pass 保存


CGIROOM