emath BBS

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

No.3294  解題(2)
発言者: tDB
発言日: 2005 06/23 13:38
発言元: ntchba100244.chba.nt.ftth.ppp.infoweb.ne.jp
正二十面体の描画に続いて,
「切頭」を行いますが,
  切断面が見える・見えない
の2つのケースがあります。まずは「見える」場合からです。

% --- kaidai2.tex -------------------------------
\documentclass[a4j]{jarticle}
\usepackage{emathPk}
\usepackage{emathPs}
\usepackage{showProg}

\setcounter{program}{1}%

\begin{document}
サッカーボールを描画したソースリストの解題(2)です。

前回描画した正二十面体の「切頭」を行います。

切り取る図形は
\begin{jquote}
頂点1を頂点とし\\
頂点1と隣り合う頂点2, 3, 4, 5, 6を結ぶ正五角形を底面
\end{jquote}
とする五角錐を,「頂点1を相似の中心として相似縮小」
した五角錐です。

\begin{showProg}(1,.6667){切頭(1)}{list}
\Rdef(1,3)\Ex%    x軸正方向の単位ベクトル
\Rdef(.2,135)\Ey% y軸正方向の単位ベクトル
\Rdef(1,90)\Ez%   z軸正方向の単位ベクトル
\begin{psZahyou*}[debug,ul=20mm,Ex=\Ex,Ey=\Ey,Ez=\Ez](-1.8,1.8)(-1.7,1.7)(-2,2)
  \calcval{sqrt(5+sqrt(5))/(sqrt(2))}\R
  \calcval{1/(sin($pi/5))}\r
  \calcval{sqrt((\R)*(\R)-(\r)*(\r))}\h
  \iiitenretu{[1]Ai(0,0,\R)n;[2]Aii(\r,0,\h)e}
  \iiitenretu{[12]Axii(0,0,-\R)s;[7]Avii(-\r,0,-\h)w}
  \zRotvec\Aii{72}\Aiii
  \iiiPut\Aiii[s]{3}
  \zRotvec\Aiii{72}\Aiv\iiiPut\Aiv[w]{4}
  \zRotvec\Aiv{72}\Av\iiiPut\Av[n]{5}
  \zRotvec\Av{72}\Avi\iiiPut\Avi[n]{6}
  \zRotvec\Avii{72}\Aviii\iiiPut\Aviii[sw]{8}
  \zRotvec\Aviii{72}\Aix\iiiPut\Aix[se]{9}
  \zRotvec\Aix{72}\Ax\iiiPut\Ax[s]{10}
  \zRotvec\Ax{72}\Axi\iiiPut\Axi[s]{11}
  \iiiDrawline{\Aiv\Av\Avi\Aii}
  \iiiDrawline{\Avii\Aviii\Aix}
  \iiiDrawlines{\Ai\Aii;\Ai\Aiv;\Ai\Av;\Ai\Avi}
  \iiiDrawlines{\Axii\Avii;\Axii\Aviii;\Axii\Aix}
  \iiiDrawlines{\Aiv\Avii\Av;\Av\Aviii\Avi;\Avi\Aix\Aii}
\gsave\setdash{.05,.05}
  \iiiDrawline{\Aii\Aiii\Aiv}
  \iiiDrawline{\Aix\Ax\Axi\Avii}
  \iiiDrawlines{\Aii\Ax\Aiii;\Aiii\Axi\Aiv}
  \iiiDrawlines{\Ai\Aiii;\Axii\Ax;\Axii\Axi}
\grestore
%
  \def\settouhi{.33333}
  \def\settou#1#2#3#4#5#6{%
    \Sub{1}\settouhi\settouhii
    \edef\stA{\csname A\romannumeral #1\endcsname}%
    \iiiBunten\stA{\csname A\romannumeral #2\endcsname}\settouhi\settouhii\stB
    \iiiBunten\stA{\csname A\romannumeral #3\endcsname}\settouhi\settouhii\stC
    \iiiBunten\stA{\csname A\romannumeral #4\endcsname}\settouhi\settouhii\stD
    \iiiBunten\stA{\csname A\romannumeral #5\endcsname}\settouhi\settouhii\stE
    \iiiBunten\stA{\csname A\romannumeral #6\endcsname}\settouhi\settouhii\stF
    \begin{EMpscolor}{red}
      \iiiTakakkei{\stB\stC\stC\stD\stE\stF}
    \end{EMpscolor}
  }%
%
  \setlinejoin{2}
  \settou{1}{2}{3}{4}{5}{6}%
\end{psZahyou*}
\end{showProg}

このリストのうち,はじめの1〜30行は,正二十面体を描画する部分で
解題(1)で取り上げました。

「切頭」は,複数の個所で行われますから,その描画をサブルーティンに仕立てました。

まず,縮小比を
\begin{jquote}
\begin{verbatim}
31:  \def\settouhi{.33333}
\end{verbatim}
\end{jquote}
としました。以下,この値を$t$と表記します。

サブルーティンは
\begin{jquote}
\begin{verbatim}
32:  \def\settou#1#2#3#4#5#6{%
\end{verbatim}
\end{jquote}
から始まり,43行目までの部分です。引数は
\begin{jquote}
\begin{verbatim}
#1 : 「切頭」を行う頂点
#2〜#6 : #1と隣り合う正二十面体の頂点
\end{verbatim}
\end{jquote}
で,上のリストでは,このサブルーティンを
\begin{jquote}
\begin{verbatim}
46:    \settou{1}{2}{3}{4}{5}{6}
\end{verbatim}
\end{jquote}
として呼び出しています。サブルーティンで実行していることの説明です。
\begin{jquote}
\begin{verbatim}
33:    \Sub{1}\settouhi\settouhii
34:    \edef\stA{\csname A\romannumeral #1\endcsname}%
35:    \iiiBunten\stA{\csname A\romannumeral #2\endcsname}\settouhi\settouhii\stB
\end{verbatim}
\end{jquote}
で,頂点\verb+#1+と\verb+#2+を結ぶ辺を$t:(1-t)$に内分する点\verb+\stB+を求めています。
同様に
\begin{jquote}
\begin{verbatim}
36:    \iiiBunten\stA{\csname A\romannumeral #3\endcsname}\settouhi\settouhii\stC
37:    \iiiBunten\stA{\csname A\romannumeral #4\endcsname}\settouhi\settouhii\stD
38:    \iiiBunten\stA{\csname A\romannumeral #5\endcsname}\settouhi\settouhii\stE
39:    \iiiBunten\stA{\csname A\romannumeral #6\endcsname}\settouhi\settouhii\stF
\end{verbatim}
\end{jquote}
で,他の稜の内分点を求め
\begin{jquote}
\begin{verbatim}
40:    \begin{EMpscolor}{red}
41:      \iiiTakakkei{\stB\stC\stC\stD\stE\stF}
42:    \end{EMpscolor}
\end{verbatim}
\end{jquote}
それらの内分点を赤線で結んで,切断面を描画しています。

続いて,切り取られた部分を白塗りし,切断面を塗りつぶすこととなりますが,
その前に,ここで取り上げた頂点1の「切頭」と頂点2のそれとでは,状況が異なりますから,
それを見ておく必要があります。
\end{document}

▼関連発言

3284:サッカーボール [tDB] 06/22 09:27
 ├3286:解題(1) [tDB] 06/22 14:47
 │└3291:Re:解題(1) [田中徹] 06/22 21:01
 │ └3292:program.sty [tDB] 06/22 21:34
 ├3293:サッカーボール(修正版) [tDB] 06/23 11:13
 ├3294:解題(2) [tDB] 06/23 13:38
 └3299:解題(3) [tDB] 06/24 15:52<-last

Pass 保存


CGIROOM