発言者: 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