diff options
Diffstat (limited to 'Master/texmf-dist/doc/support/ketcindy/source/ketmanual/KeTCindyReferenceJ.tex')
-rw-r--r-- | Master/texmf-dist/doc/support/ketcindy/source/ketmanual/KeTCindyReferenceJ.tex | 11512 |
1 files changed, 6519 insertions, 4993 deletions
diff --git a/Master/texmf-dist/doc/support/ketcindy/source/ketmanual/KeTCindyReferenceJ.tex b/Master/texmf-dist/doc/support/ketcindy/source/ketmanual/KeTCindyReferenceJ.tex index 58a7dfdd22e..937c5a10cc1 100644 --- a/Master/texmf-dist/doc/support/ketcindy/source/ketmanual/KeTCindyReferenceJ.tex +++ b/Master/texmf-dist/doc/support/ketcindy/source/ketmanual/KeTCindyReferenceJ.tex @@ -7,4210 +7,5234 @@ \usepackage[dvipdfmx,bookmarks=false,colorlinks=true,linkcolor=blue]{hyperref} \setmargin{20}{20}{15}{25} \usepackage{setspace} - +\usepackage{comment} +\setcounter{tocdepth}{3} \begin{document} -\title{\ketcindy リファレンスマニュアル} +\title{\ketcindy 関数リファレンス} \author{\ketcindy\ Project Team} \maketitle +\begin{center} - 第3.2版 -\end{center} +\hypertarget{index}{} \tableofcontents \newpage +\section{平面の図形とグラフ} -\section{\ketcindy について} -\subsection{システムの構成} -\ketcindy は,Cinderella での作図データをScilab版 \ketpic に渡し,\LaTeX ファイルを作成するためのスクリプトライブラリである。Cinderella によるインタラクティブな作図機能と,CindyScript によるプログラミングにより,\LaTeX 文書の挿入図を効率よく作成することができる。また,R,Maxima,Risa/Asirなどの数式処理ソフトと連携して計算を行うことができる。 +%設定・定義 ================================== -\input{Fig/concept} +\subsection{設定・定義} - Cinderellaで作図した図のデータは,Scilabのファイル(拡張子 sci)に書き出される。これをScilabで処理して\TeX ファイルを作成する( Scilab版 \ketpic)。できた\TeX ファイルを,本文中に inputコマンド で挿入すれば図が表示される。\\ - CinderellaとScilabやその他のソフトウェアとの連携には,バッチファイル(Macではシェルファイル)を用いている。(概念図の両方向矢印) バッチファイルは kc.bat,シェルファイルは kc.sh で,KeTCindy が目的に応じてこれらのファイルを書き出し,プラグイン KetCindyPlugin.jar でそれらを実行する手順になっている。\\ - \\ -\subsection{Cindyscriptのスロットの概念} -CindyscriptはCinderellaのプログラミング言語で,スクリプトエディタで記述する。スクリプトエディタは,「スクリプト」メニューの「Cindyscript」を選択して開くか,Ctrl+9 (Windows) / ⌘+9 (Mac) で開く。\\ - スクリプトエディタの左方に並んでいるフォルダアイコンのメニュー風のものを「スロット」といい,Cindyscriptの実行タイミングによりスクリプトを書き分けることができる。通常は Initialzation スロットと Draw スロットを使う。\\ - Initialzation スロットは,スクリプトを実行すると最初に一度だけ実行される。従って,関数定義や変数の初期設定などを書く。ひな形やサンプルの cdy ファイルではここに KETlib というページがあり,パス名の設定やライブラリの読み込みなど,KeTCindyの初期設定に関する記述がある。\\ - Draw スロットは,Cinderellaの画面上でなにか操作が行われるたびに実行される。通常はここにスクリプトを書く。ひな形のcdyファイルでは,Ketinit() などが記述された figures ページが用意されている。\\ - \\ - \includegraphics[bb=0 0 1076 392 , width=10cm]{Fig/slot.png}\\ - \\ - 1つのスロットに複数のページを作ることができる。KETlib以外に初期設定のスクリプトを書く場合は,Initialzation スロットに新しいページを作るのがよい。\\ +\subsubsection{環境設定} +\begin{description} -\subsection{プロットデータ} -プロットデータ(Plot Data) とは,関数のグラフや幾何要素を描くデータのことであり,KeTCindyの処理の中核をなしている。本マニュアルでは PD と略すことがある。たとえば曲線は,描画範囲を分割して線分の集まりとして描画しており,このときのプロットデータはそれらの線分の端点のリストである。\\ - プロットデータの名称はKeTCindyが自動的に命名する。その命名規則は次の通りである。\\ -\\ -・名称の頭部は,プロットデータを作成する関数ごとに決まっている。\\ -・第1引数に name が与えられる場合,name を頭部に付加する。\\ - 例:\verb|Listplot("1",[[0,0],[1,2]]);| のとき,sg1\\ -・関数によっては,第1引数の name を略すことができる。この場合,引数で用いられた点の名前を頭部に付加する。\\ - 例:\verb|Listplot([A,B,C]);| のとき,sgABC\\ - \\ - プロットデータを生成したときは,Cindyscriptエディタのコンソールにその名称を表示する。上の例では,\\ - \verb|generate Listplot sgABC|\\ -と表示される。プロットデータを操作する関数では,このPDの名称を用いる。\\ - プロットデータの内容を知りたい場合は,Cindyscriptの\\ - println(プロットデータ名)\\ -でコンソールに表示することができる。\\ - プロットデータは,Cindyscriptによるプログラムで作成してそれをKeTCindyで利用することもできる。Listplot()の例を参照のこと。ただし,要素の数が大きいとScilabでエラーとなるので,1つのプロットデータの要素は200程度とするのがよい。これより多い場合は分割する。\\ +\vspace{\baselineskip} +\hypertarget{ketinit}{} +\item[関数] Ketinit(options) +\item[機能] \ketcindy を初期化する。平面図形ではDrawスロットに,空間図形ではInitialization スロットの冒頭に記述する必要がある。 +\item[説明] option 作業サブフォルダ,縦方向の倍率と描画領域を設定する。\\ +\phantom{option }通常は不要で,\verb|Ketinit()| だけでよい。\\ -\subsection{Cinderellaの作図ツール} - \\ -\includegraphics[bb=0 0 27 21 , width=0.6cm]{Cindytool/move.png} 動かすモード(選択モード)にする:標準状態\\ -\includegraphics[bb=0 0 27 21 , width=0.6cm]{Cindytool/single-add.png} 点を加える\\ -\includegraphics[bb=0 0 27 21 , width=0.6cm]{Cindytool/multi-add-line.png} 直線を加える\\ -\includegraphics[bb=0 0 27 21 , width=0.6cm]{Cindytool/segment.png} 線分を加える\\ -\includegraphics[bb=0 0 27 21 , width=0.6cm]{Cindytool/middle.png} 中点を加える\\ -\includegraphics[bb=0 0 27 21 , width=0.6cm]{Cindytool/intersection.png} 交点を加える\\ -\includegraphics[bb=0 0 27 21 , width=0.6cm]{Cindytool/multi-add-parallel.png} 平行線を加える\\ -\includegraphics[bb=0 0 27 21 , width=0.6cm]{Cindytool/multi-add-perp.png} 垂線を加える\\ -\includegraphics[bb=0 0 27 21 , width=0.6cm]{Cindytool/bisector.png} 角の二等分線を加える\\ -\includegraphics[bb=0 0 27 21 , width=0.6cm]{Cindytool/multi-add-circle.png} 円を加える\\ -\includegraphics[bb=0 0 27 21 , width=0.6cm]{Cindytool/circle-by-radius.png} 半径つき円を加える\\ -\includegraphics[bb=0 0 27 21 , width=0.6cm]{Cindytool/ellipse-by-foci.png} 焦点と通る点で決まる楕円\\ -\includegraphics[bb=0 0 27 21 , width=0.6cm]{Cindytool/hyperbola-by-foci.png} 焦点と通る点で決まる双曲線\\ -\includegraphics[bb=0 0 27 21 , width=0.6cm]{Cindytool/parabola-by-foci.png} 焦点と準線で決まる放物線\\ -\includegraphics[bb=0 0 27 21 , width=0.6cm]{Cindytool/polygon.png} 多角形を加える\\ -\includegraphics[bb=0 0 27 21 , width=0.6cm]{Cindytool/angle-mark.png} 角に印をつける\\ -\includegraphics[bb=0 0 27 21 , width=0.6cm]{Cindytool/angle.png} 角度を測る\\ -\includegraphics[bb=0 0 27 21 , width=0.6cm]{Cindytool/delete.png} 選択した要素を消去する\\ -\includegraphics[bb=0 0 27 21 , width=0.6cm]{Cindytool/select-points.png} 点をまとめて選択する\\ -\includegraphics[bb=0 0 27 21 , width=0.6cm]{Cindytool/select-lines.png} 線分をまとめて選択する\\ - \\ -設定メニューから「上のツールバーのカスタマイズ」を選び,「すべて表示」にすると現れるツール\\ -\includegraphics[bb=0 0 27 21 , width=0.6cm]{Cindytool/mirror.png} 鏡映\\ -\includegraphics[bb=0 0 27 21 , width=0.6cm]{Cindytool/polar-of-point.png} 点の極線を描く\\ - \\ -画面ツール(下のツールバー)\\ -\includegraphics[bb=0 0 27 21 , width=0.6cm]{Cindytool/translate-view.png} 原点を移動する\\ -\includegraphics[bb=0 0 27 21 , width=0.6cm]{Cindytool/zoom-in.png} 矩形領域を画面サイズに拡大\\ -\includegraphics[bb=0 0 27 21 , width=0.6cm]{Cindytool/zoom-out.png} 画面を矩形領域サイズに縮小\\ -\includegraphics[bb=0 0 27 21 , width=0.6cm]{Cindytool/snap.png} 軸と方眼を表示し格子点にスナップする\\ +【例】 -\subsection{用語解説} -インシデント\\ - 点が曲線上に乗っている状態を表す。\\ -インスペクタ\\ - 幾何要素の属性などを管理するウィンドウ。\\ -幾何要素 \\ - Cinderellaの作図ツールで作図した点や直線などの要素\\ -幾何点 \\ - 幾何要素としての点。マウスドラッグで動かすことができる。\\ -固定点\\ - マウスドラッグで移動することのできない点\\ -コンソール\\ - スクリプトエディタの右下のエリア。\\ -自由点\\ - マウスドラッグで任意に動かすことのできる点。\\ -スロット \\ - Cindyscriptで,スクリプトを書くとき,実行タイミングによりに分類するもの\\ -スナップ \\ - マウスポイントが格子点の近くに来ると格子点上にぴったり移動する。\\ - Cinderellaの画面の下方ツールのうち,磁石アイコンによりこのモードになる。\\ +\verb|Ketinit()| :サブフォルダ\verb|"fig"|,倍率1,描画領域 $-5 \leq x \leq 5 , -5 \leq y \leq 5$ -\newpage -%======================= -\section{定数と変数} -KeTCindy は Cindyscript で記述されている。CindyScriptでは,変数名は大文字と小文字を区別するが,関数名は大文字小文字を区別しない。Cindyscriptのマニュアルでは組み込み関数名はすべて小文字で表記されている。例示されたスクリプトでは,変数も小文字である。そこで,KeTCindyでは,組み込みの変数名・関数名と区別しやすいように,次の規則により名前を付けている。\\ - \\ - ・グローバルな変数はすべて大文字か,大文字で始まるものとする。\\ - ・局所変数は小文字で,関数定義の冒頭で regional() により局所変数として宣言する。\\ - ・関数名は大文字で始まる。\\ - \\ - なお,CindyScriptは関数型プログラミング言語であり,命令はすべて関数を用いて行われるが,本マニュアルでは,文脈により「コマンド」という表現も用いる。\\ - \\ -{\bf 定数} \\ - つぎのものがCindyScriptに予約されており,小文字で表されている。\\ +\verb|Ketinit("")| : サブフォルダはcindyファイルと同じ -\begin{tabbing} -12345678\=\kill - pi \>:円周率。Scilabには \% pi で書き出される。\\ - i \> :虚数単位。Scilabには \% i で書き出される。\\ -\end{tabbing} - 一般のプログラミングでは変数 i をループ変数としてよく使うが,CindyScript では i は予約定数と考え,変数として用いないことを勧める。ただし,変数としてまったく使えないわけではなく,変数として用いた後,必要があれば \verb|i=complex([0,1])| を実行することにより虚数単位として再定義することができる。\\ - \\ -{\bf 予約変数}\\ - KeTCindy が内部的に使用する予約変数がある。そのうち次のものはユーザーが値を変更または設定することができる。設定は Initalization スロットの「KETlib」ページでおこなうが,Fhead とTexparent は Draw スロットでもよい。\\ -\begin{tabbing} -1234567890123\=45678989012345678901234567890123\=\kill - Fhead \>書き出されるファイル名の頭部\\ - Texparent \>親プロセスのファイル名\\ - Dirhead \>パスの頭部\\ - Dirlib \>ライブラリ ketlib のパス\\ - Dirbin \>ketbin のパス\\ - Dirwork \>作業ディレクトリのパス\\ - Shellfile \>シェルファイル名\\ -\end{tabbing} - 以下の予約変数は,ライブラリが使用するグローバル変数であるので,ユーザーはこれらの変数名を使ってはいけない。なお,変数は大文字小文字を区別するので,小文字で書く分には支障はない。したがって,ユーザーが作るプログラムでは,すべて小文字か,先頭だけが大文字の変数を使うことを勧める。\\ - \\ -ADDAXES, ArrowlineNumber, ArrowheadNumber, BezierNumber,\\ -COM0thlist, COM1stlist, COM2ndlist, Dq, FUNLIST,\\ -Fnamesc ,Fnamescibody,Fnameout,Fnametex,GDATALIST,\\ -GLIST, GCLIST, GOUTLIST, KCOLOR, KETPICCOUNT, \\ -KETPICLAYER, LETTERlist, LFmark, MilliIn, PenThick, \\ -PenThickInit, POUTLIST, SCALEX, SCALEY, SCIRELIST, \\ -SCIWRLIST, TenSize, TenSizeInit, ULEN, XMAX, XMIN, YaSize,\\ -YaThick, YMAX, YMIN, VLIST +\verb|Ketinit(2)| : 倍率2,描画領域 $-5 \leq x \leq 5 , -5 \leq y \leq 5$ -\newpage +\verb|Ketinit(2,[-2,3],[-2,4])| : 倍率2,描画領域 $-2 \leq x \leq 3 , -2 \leq y \leq 4$ -%設定・定義 ================================== -\section{関数リファレンス} -\subsection{設定・定義} +\vspace{\baselineskip} +描画領域(TeXに出力する領域)は制御点SW(左下)とNE(右上)を対角とする矩形領域。描画領域を指定すると,制御点がなければその位置に作り,すでに存在する場合は何もしない。作成された制御点はドラッグして描画領域を変更することができる。倍率は,Setscaling(倍率)を実行するのと同じ。ただし,Cinderellaで作図した幾何要素に対しては無効。(\hyperlink{setscaling}{Setscaling()}の項参照) -\begin{description} +%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -\hypertarget{addax}{} -\item[関数] Addax(0または1) -\item[機能] 座標軸を書くかどうかを定める -\item[説明] ScilabのClosefile() の引数に対応する。\\ - 引数が0のとき座標軸を書かない(デフォルトは1) -\begin{verbatim} - Listplot([B,A,C]); - Letter([A,"ne","A",B,"se","B",C,"se","C"]); -\end{verbatim} - \\ - \input{Fig/addax1} -\begin{verbatim} - Listplot([B,A,C,B]); - Letter([A,"ne","A",B,"sw","B",C,"se","C"]); - Addax(0); -\end{verbatim} - \input{Fig/addax2}\\ -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} - \\ -\hypertarget{addcolor}{} -\item[関数] Addcolor(描画コマンド , カラーコード) -\item[機能] 描画コマンドで描かれる線を指定色で描く -\item[説明] 描画コマンドはダブルクウォートでくくって文字列とする。描画コマンド内にダブルクウォートがある場合は,シングルクウォートにする。optionのある描画コマンドでoptionを指定しない場合は,必ず空リストをoptionとして書く。描画色は,RGBまたはCMYK。描画色は画面と図版の両方に有効。\\ - \\ - 例:\verb|Addcolor("Plotdata('2','x^2','x',[])",[1,1,0]);|\\ - \\ - \\ -\hypertarget{colorcode}{} -\item[関数] Colorcode(文字1,文字2, カラーコード) -\item[機能] 文字1から文字2へカラーコードを変換する。戻り値は変換されたコード。 -\item[説明] 文字は,"rgb","cmyk","hsv"のいずれか。\\ - \\ -例:\verb|Colorcode("rgb","cmyk",[1,0,0]); |\\ - RGBコードの[1,0,0]をCMYKに変換したコードを返す\\ - \verb|Colorcode("cmyk","rgb",[0,1,1,0]);|\\ - CMYKコードの[0,1,1,0]をRGBに変換したコードを返す\\ - \verb|Colorcode("rgb","hsv",[1,0,0]);|\\ - RGBコードの[1,0,0]をHSVに変換したコードを返す\\ - \\ - \\ -\hypertarget{deffun}{} -\item[関数] Deffun(関数名 , 定義のリスト) -\item[機能] 関数を定義する -\item[説明] 関数定義は,CindyScript の関数定義 f(x):=式 でもできるが,Deffun()を使うことにより,Scilab 側に渡すファイルに\\ - function 定義式 endfunction;\\ - が記述されるので,Scilab側でこの関数を利用することができる。目的に応じて使い分けるとよい。\\ - 式のリストには if文を用いた場合分けの関数式を記述することもできる。\\ - \\ -例:$f(x)=\dfrac{1}{x^2+1}$ を定義し,グラフを描いてx=1 における微分係数を求める。 +\vspace{\baselineskip} +\hypertarget{setfiles}{} +\item[関数] Setfiles(filename) +\item[機能] 出力するファイル名の設定 +\item[説明] 出力するTexのファイル名を指定する。 + +出力するファイル名は 初期設定では,作図しているCinderellaのファイル名。 + +たとえば,triangle.cdy で作図して出力すると,triangle.tex ができる。 + +これに対し,triangle.cdy で作図しているときに,grav.tex で出力したい場合は + +\hspace{10mm} \verb|Setfiles("grav");| + +とすると,grav.tex ができる。 + +\vspace{\baselineskip} +\hypertarget{setparent}{} +\item[関数] Setparent(filename) +\item[機能] Parent ボタンで出力するファイル名の設定 +\item[説明] Figpdf() を使ってParent ボタンで出力するTexのファイル名を指定する。 + +Parent ボタンで出力するファイル名は 初期設定がないので,指定する必要がある。 + +たとえば,triangle.cdy で作図しているときに,図サイズの grav.pdf を作る場合, + +\hspace{10mm} \verb|Setparent("grav");| + +とすると,図のTeXファイル triangle.tex と PDFを作る grav.tex ができ,ここから grav.pdf ができる。 + +\vspace{\baselineskip} +\hypertarget{changework}{} +\item[関数] Changework(パス名) +\item[機能] 作業ディレクトリを指定(変更)する +\item[説明] 作業ディレクトリは, 初期設定では,現在作図しているファイルのあるフォルダ(ディレクトリ)の fig フォルダである。これを変更する。 + +\vspace{\baselineskip} +\hypertarget{addpackage}{} +\item[関数] Addpackage(パッケージ名) +\item[機能] TeXのパッケージを追加する +\item[説明] プレビュー用のTeXソースにパッケージを追加する。 + +\vspace{\baselineskip} + 【例】emath パッケージを追加する。 + +\hspace{10mm} \verb|Addpackage("emath"); | + + または + +\hspace{10mm} \verb|Addpackage(["emath"]); | + + により, + プレビュー用のTeXのプリアンブルに + +\hspace{10mm} \verb| \usepackage{emath}| + +が追加されて,emath のコマンドが利用できる。 + +\vspace{\baselineskip} +注)初期設定では,次のパッケージを利用している。 \begin{verbatim} - Deffun("f(x)",["regional(y)","y=1/(x^2+1)","y"]); - Plotdata("1","f(x)","x"); - coeff=Derivative("f(x)","x",1); -\end{verbatim} - 点Aを作図しておくと,点Aをドラッグしたとき常に曲線上に乗せ,その点での\\ - 接線を引くことができる。 + ketpic, ketlayer, amsmath, amssymb, graphicx, color + \end{verbatim} + +\vspace{\baselineskip} +\hypertarget{usegraphics}{} +\item[関数] Usegraphics("pict2e") +\item[機能] TeXのグラフィクスパッケージを \verb|"pict2e"| に変更する +\item[説明] デフォルトのパッケージは \verb|"tpic"| であるが,これを\verb|"pict2e"| に変更する。 + + +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} + +\end{description} +\newpage +%-----------------描画設定・定義-------------------------------------- +\subsubsection{描画設定・定義} + +\vspace{\baselineskip} +\begin{description} +\hypertarget{addax}{} +\item[関数] Addax(0または1) +\item[機能] 座標軸の表示 +\item[説明] 引数が1のとき座標軸を描き,0のとき描かない。ただし,描画面には座標軸は表示されない。 +初期設定は1で,座標軸を描かない場合のみ \verb|Addax(0)| とすればよい。 + +\vspace{\baselineskip} +【例】三角形を描く + +左図が 初期設定(座標軸表示) Addax(0) をつけると右図になる。 + \begin{verbatim} - A.xy=[A.x,f(A.x)]; - coeff=Derivative("f(x)","x",A.x); - Lineplot("1",[A,[A.x+1,A.y+coeff]]); + Listplot([B,A,C]); + Letter([A,"ne","A",B,"se","B",C,"se","C"]); \end{verbatim} - \input{Fig/deffun}\\ - 例:$f(x)=\left\{\begin{array}{l}1 (x\geq 0)\\ -1 (x<0)\\ \end{array}\right.$ を定義する。 +\vspace{\baselineskip} +\hspace{10mm} \input{Fig/addax1} \input{Fig/FigE} + + +\hypertarget{setax}{} +\item[関数] Setax() +\item[機能] 座標軸の書式を設定する。 +\item[説明] Cinderellaの描画面には反映されない。(座標軸は描かれない) + +引数はリストで与え,要素は順番に + +1. 軸の形状(直線は "l" ,矢印は "a") 初期設定は直線 + +2. 横軸名 初期設定は $x$ + +3. 横軸名の位置 + +4. 縦軸名 初期設定は$y$ + +5. 縦軸名の位置 + +6. 原点名 初期設定はO + +7. 原点名の位置 + +それぞれダブルクウォートでくくる。 + +7つの引数のうちn番目だけを指定する場合は,[n,"内容"]で指定できる。 + +また,後方は 初期設定なら省略できる。 + +\vspace{\baselineskip} +【例】座標軸の先端を矢印にし,原点の北西にOを書く。 + +\hspace{10mm} \verb|Setax(["a","","","","","","nw"]);| + +【例】原点の北西にOを書く。 + +\hspace{10mm} \verb|Setax([7,"nw"]);| + +【例】先端を矢印にし,横軸を$\theta$,縦軸を$x$にして矢じりの左側に書く。 + +\hspace{10mm} \verb|Setax(["a","\theta","","x","w"]);| + +\vspace{\baselineskip} +\hspace{10mm}\input{Fig/setax(theta)} + + +\vspace{\baselineskip} +\hypertarget{drwxy}{} +\item[関数] Drwxy(), Drwxy(options) +\item[機能] 指定する手順で座標軸を描く +\item[説明] 座標軸は 初期設定では最後に描かれるが,座標軸上に白抜きの点を表示するなど,先に描くことが必要な場合に用いる。描画面には座標軸は表示されない。 + +options は次のリストである。\\ +\hspace*{10mm}["Origin=",\ "Xrng=",\ "Yrng="] + +【例】点$(-\pi,\ 0)$と$(\pi,\ 0)$を白抜きの点で表示する。 \begin{verbatim} - Deffun("f(x)",["regional(y)","if(x>=0,y=1,y=-1)","y"]); + Setax([7,"se"]); + Setpt(5); + Drwpt([-pi,0],0); + Drwxy(); + Plotdata("1","sin(x)","x",["dr","Num=200"]); + Drwpt([pi,0],0); \end{verbatim} - if 文はネストすることができる。 + + このスクリプトでは,Drwpt([-pi,0],0); を実行したのち座標軸を描き,次に,$y=\sin x$ のグラフを描いてから Drwpt([pi,0],0);を実行するので,点($-\pi$,0) の上を座標軸が通り,点($\pi$,0)は座標軸とグラフの上を通るので白抜きになる。\\ + +\begin{center} \input{Fig/drwxy}\end{center} + +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} + +\vspace{\baselineskip} +\hypertarget{definecolor}{} +\item[関数] Definecolor(色名 , 定義のリスト) +\item[機能] 色名を定義する +\item[説明] ユーザー命名の色名を定義する。定義リストは RGBまたはCMYKのリスト + +各色0〜1の範囲で指定する。定義した色名は,Setcolor(color,options) で使うことができる。 + +なお,\ketcindy では,68色を色名で使うことができる。色の名称は\hyperlink{colorcodelist}{カラーコード一覧} 参照。 + +\vspace{\baselineskip} + 【例】暗い紫色を darkmaz の名称で定義して使う。 \begin{verbatim} - Deffun("f(x)",["regional y","if(x>1,y=1, - if(x>-1,y=x,y=-1))","y"]); + Definecolor("darkmaz",[0.8,0,0.8]); + Setcolor("darkmaz"); \end{verbatim} - \\ -\hypertarget{defvar}{} -\item[関数] Defvar(文字列) -\item[機能] 変数を定義する -\item[説明] 変数の定義をScilabと共有する。また,ScilabのAssignリストに追加する。\\ - \\ - 例:\verb|Defvar("const=3");|\\ - \\ - 複数の変数を定義するときはリストにする。\\ - \\ - 例:\verb|Defvar([“a”,3,”b”,1]);|\\ - \\ -\hypertarget{drwxy}{} -\item[関数] Drwxy() -\item[機能] 座標軸を描く -\item[説明] 座標軸はデフォルトでは最後に描かれるが,座標軸上に白抜きの点を表示するなど,先に描くことが必要な場合に用いる。\\ +\vspace{\baselineskip} +\hypertarget{setcolor}{} +\item[関数] Setcolor(color,options) +\item[機能] 描画色の設定 +\item[説明] 引数colorはカラーコードまたは色の名称。 + +カラーコードはRGBまたはCMYKをリストで与える。各色0〜1。 + +色の名称は\hyperlink{colorcodelist}{カラーコード一覧} の68色が指定できる。 -例:点$(-\pi,\ 0)$と$(\pi,\ 0)$を白抜きの点で表示する。 + +\vspace{\baselineskip} +【例】 Cinderellaの描画ツールとCindyScriptで線分AB,ACを60°の角をなすように描いておき,点DとEを弧の両端になるように設定して \begin{verbatim} - Setax([7,"se"]); - Setpt(8); - Drwpt([-pi,0],0); - Drwxy(); - Plotdata("1","sin(x)","x",["dr","Num=300"]); - Drwpt([[pi,0],0]); + Setcolor([1,0,0]); + Circledata([A,D],["Rng=[0,pi/3]"]); + Arrowhead(E,[-1,0.8],[2,1]); \end{verbatim} +を実行すると,矢じりつきの弧を赤で表示することができる。 + +1行目は,\verb|Setcolor("red");| でもよい。 +座標軸を描く場合は,このあと \verb|Setcolor("black")| で黒に戻しておかないと,座標軸が赤で表示されてしまうので要注意。 - このスクリプトでは,Drwpt([-pi,0],0); を実行したのち座標軸を描き,次に,$y=\sin x$ のグラフを描いてから Drwpt([pi,0],0);を実行するので,点($-\pi$,0) の上を座標軸が通り,点($\pi$,0)は座標軸とグラフの上を通るので白抜きになる。\\ -\input{Fig/drwxy} - \\ - \\ -\hypertarget{fontsize}{} -\item[関数] Fontsize(記号) -\item[機能] フォントサイズを設定する -\item[説明] 次に Fontsize() を実行するまで有効\\ - 記号は,"t" , "ss" , "f", "s" , "n" , "la", "La", "LA", "h" , "H"\\ - -例:小さい方からいくつか表示する。 -\begin{verbatim} - Ptsize(2); - Drawpoint([A,B,C,D,E,F,G]); - Fontsize("t"); Letter([A,"s2","A"]); - Fontsize("ss"); Letter([B,"s2","B"]); - Fontsize("s"); Letter([C,"s2","C"]); - Fontsize("la"); Letter([D,"s2","D"]); - Fontsize("La"); Letter([E,"s2","E"]); - Fontsize("h"); Letter([F,"s2","F"]); - Fontsize("H"); Letter([G,"s2","G"]); -\end{verbatim} - \input{Fig/fontsize} - -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -\newpage -\hypertarget{ketinit}{} -\item[関数] Ketinit(options) -\item[機能] \ketcindy を初期化する -\item[説明] opution 縦方向の倍率と描画領域を設定\\ +\vspace{\baselineskip} +\hspace{20mm} \includegraphics[width=3.5cm,bb=0 0 161 134]{Fig/setcolor.pdf} - 例:\verb|Ketinit()| :倍率1,描画領域 $-5 \leq x \leq 5 , -5 \leq y \leq 5$(デフォルト)\\ - \verb|Ketinit(2)| : 倍率2,描画領域 $-5 \leq x \leq 5 , -5 \leq y \leq 5$\\ - \verb|Ketinit(2,[-2,3],[-2,4])| : 倍率2,描画領域 $-2 \leq x \leq 3 , -2 \leq y \leq 4$\\ +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} - 描画領域(TeXに出力する領域)は制御点SW(左下)とNE(右上)を対角とする矩形領域。描画領域を指定すると,制御点がなければその位置に作り,すでに存在する場合は何もしない。作成された制御点はドラッグして描画領域を変更することができる。\\ - 倍率は,Setscaling(倍率)を実行するのと同じ。ただし,Cinderellaで作図した幾何要素に対しては無効。(Setscaling()の項参照)\\ +\vspace{\baselineskip} +\hypertarget{deffun}{} +\item[関数] Deffun(関数名 , 定義のリスト) +\item[機能] 関数を定義する +\item[説明] 関数定義は,CindyScript の関数定義 f(x):=式 でもできるが,Deffun()を使うことにより,Rでこの関数を利用することができる。目的に応じて使い分けるとよい。 -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +式のリストには if文を用いた場合分けの関数式を記述することもできる。 -\hypertarget{ptsie}{} -\item[関数] Ptsize(n) , Setpt(n) -\item[機能] 表示する点の大きさを設定する。 -\item[説明] Ptsize() と Setpt() は同じである。デフォルトは1\\ - Ptsize()はCindyScript風の語法,Setpt() は \ketpic 風の語法\\ - 全体の点の大きさを設定する。点の大きさを個々に変えたい場合は,sizeオプションを用いる。\\ +\vspace{\baselineskip} +【例】 +$f(x)=\dfrac{1}{x^2+1}$ を定義し,グラフを描く。 -例:1から4までの点の大きさ\\ - あらかじめ,Cinderellaの作図ツールで点A,B,C,Dを作図しておく。 \begin{verbatim} - Pointdata("1",A,["size=1"]); - Pointdata("2",B,["size=2"]); - Pointdata("3",C,["size=3"]); - Pointdata("4",D,["size=4"]); +Deffun("f(x)",["regional(y)","y=1/(x^2+1)","y"]); +Plotdata("1","f(x)","x"); \end{verbatim} -\input{Fig/pointsize}\\ +\vspace{\baselineskip} +\hspace{20mm}\scalebox{0.9}{\input{Fig/deffun01}} + + +\vspace{\baselineskip} + 【例】$f(x)=\left\{\begin{array}{l}1 (x\geq 0)\\ -1 (x<0)\\ \end{array}\right.$ を定義してグラフを描く。 -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -\newpage -\hypertarget{setax}{} -\item[関数] Setax() -\item[機能] 座標軸の書式を設定する。 -\item[説明] Scilabのみで実行する。Cinderellaの描画面に反映されない。\\ -引数は順番に\\ - 1. 軸の形状(直線は "l" ,矢印は "a")デフォルトは直線\\ - 2. 横軸名 デフォルトは $x$ \\ - 3. 横軸名の位置\\ - 4. 縦軸名 デフォルトは$y$\\ - 5. 縦軸名の位置\\ - 6. 原点名 デフォルトはO\\ - 7. 原点名の位置\\ -それぞれダブルクウォートでくくる。\\ -7つの引数のうちn番目だけを指定する場合は,[n,"内容"]で指定できる。\\ -また,後方はデフォルトなら省略できる。\\ - - 例:座標軸の先端を矢印にし,原点の北西にOを書く。\\ - \verb|Setax(["a","","","","","","nw"]);|\\ - - 例:原点の北西にOを書く。\\ - \verb|Setax([7,"nw"]);|\\ - - 例:先端を矢印にし,横軸をθ,縦軸を$x$にして矢じりの左側に書く。\\ - \verb|Setax(["a","θ","","x","w"]);|\\ - \\ - \input{Fig/setax_theta} - \\ - -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -\newpage -\hypertarget{definecolor}{} -\item[関数] Definecolor(色名 , 定義のリスト) -\item[機能] 色名を定義する -\item[説明] ユーザー命名の色名を定義する。定義リストは RGBまたはCMYKのリスト\\ - 各色0〜1の範囲で指定する。定義した色名は,Setcolor(color,options) で使うことができる。なお,KeTCindyでは,68色を色名で使うことができる。次の Setcolor(color,options) 参照)\\ - \\ - 例:暗い紫色を darkmaz の名称で定義して使う。 \begin{verbatim} - Definecolor("darkmaz",[0.8,0,0.8]); - Setcolor("darkmaz"); + Deffun("f(x)",["regional(y)","if(x>=0,y=1,y=-1)","y"]); + Plotdata("1","f(x)","x",["Dis=1","Num=100"]; \end{verbatim} -\hypertarget{setcolor}{} - \\ - \\ -\item[関数] Setcolor(color,options) -\item[機能] 描画色の設定 -\item[説明] 引数colorはカラーコードまたは色の名称。\\ - カラーコードはRGBまたはCMYKをリストで与える。各色0〜1。\\ - 色の名称は次頁の68色が指定できる。ただし,Cinderellaの画面には色は反映されない。\\ - colorに色の名称を用いた場合は,option として,透明度を0〜1の数で指定できる。1が最も濃く,0は結果として色塗りをしない。\\ - \\ -例 Cinderellaの描画ツールとCindyScriptで線分AB,ACを60°の角をなすように描いておき,点DとEを弧の両端になるように設定して -\begin{verbatim} - Setcolor([1,0,0]); - Circledata([A,D],["Rng=[0,pi/3]"]); - Arrowhead(E,[-1,0.8],[2,1]); -\end{verbatim} - を実行すると,矢じりつきの弧を赤で表示することができる。\\ - 1行目は,\verb|Setcolor("red");| でもよい。\\ - ただし,Cinderellaの描画面では着色されない。\\ - 描画面でも着色したい場合は,オプション \verb|"Color=[R,G,B]"| を用いる。\\ - 上の例の場合, -\begin{verbatim} - Circledata([A,D],["Rng=[0,pi/3]","Color=[1,0,0]"]); - Arrowhead(E,[-1,0.8],[2,1,"Color=[1,0,0]"]); -\end{verbatim} - とすれば,描画面でも赤で表示される。\\ - - \includegraphics[width=3.5cm,bb=0 0 161 134]{Fig/setcolor.pdf} - \\ - \\ -\scalebox{0.9}{\input{Fig/colortable1-34}} -\newpage - \\ - \\ - \\ -\scalebox{0.9}{\input{Fig/colortable35-68}} - \\ - \\ -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -\newpage +\vspace{\baselineskip} +\hspace{20mm}\scalebox{0.9}{\input{Fig/deffun02}} + + if 文はネストすることができる。 +\begin{verbatim} + Deffun("f(x)",["regional y","if(x>1,y=1,if(x>-1,y=x,y=-1))","y"]); +\end{verbatim} + +\vspace{\baselineskip} +\hspace{20mm}\scalebox{0.9}{\input{Fig/deffun03}} + + +\vspace{\baselineskip} +\hypertarget{defvar}{} +\item[関数] Defvar(文字列) +\item[機能] 変数を定義する +\item[説明] 変数の定義をRと共有する。 + +【例】 \verb|Defvar("const=3");| + +\vspace{\baselineskip} + 複数の変数を定義するときはリストにする。 + +【例】 \verb|Defvar([“a”,3,”b”,1]);| + +\vspace{\baselineskip} +\hypertarget{fontsize}{} +\item[関数] Fontsize(記号) +\item[機能] フォントサイズを設定する +\item[説明] 次に Fontsize() を実行するまで有効\\ + 記号は,"t" , "ss" , "f", "s" , "n" , "la", "La", "LA", "h" , "H"\\ + +【例】作図ツールの「点を加える」で,A〜Gの点をとっておく。小さい方からいくつか表示する。 +\begin{verbatim} + Ptsize(2); + Drawpoint([A,B,C,D,E,F,G]); + Fontsize("t"); Letter([A,"s2","A"]); + Fontsize("ss"); Letter([B,"s2","B"]); + Fontsize("s"); Letter([C,"s2","C"]); + Fontsize("la"); Letter([D,"s2","D"]); + Fontsize("La"); Letter([E,"s2","E"]); + Fontsize("h"); Letter([F,"s2","F"]); + Fontsize("H"); Letter([G,"s2","G"]); +\end{verbatim} +\input{Fig/fontsize} + +\vspace{\baselineskip} +\hypertarget{setpt}{} +\hypertarget{ptsize}{} +\item[関数] Ptsize(n) , Setpt(n) +\item[機能] 表示する点の大きさを設定する。 +\item[説明] Ptsize() と Setpt() は同じである。 初期設定は1 + +全体の点の大きさを設定する。点の大きさを個々に変えたい場合は,sizeオプションを用いる。 + +\vspace{\baselineskip} +【例】1から4までの点の大きさ + +あらかじめ,Cinderellaの作図ツールで点A,B,C,Dを作図しておく。 +\begin{verbatim} + Pointdata("1",A,["Size=1"]); + Pointdata("2",B,["Size=2"]); + Pointdata("3",C,["Size=3"]); + Pointdata("4",D,["Size=4"]); +\end{verbatim} +\hspace{10mm}\input{Fig/pointsize} + \hypertarget{setmarklen}{} -\item[関数] Setmarklen(数) -\item[機能] 座標軸の目盛の長さを設定する -\item[説明] Htickmark() , Vtickmark() で座標軸に目盛を入れるとき,その長さを設定する。 \\ - ⇒ \hyperlink{htickmark}{Htickmark([横座標 , 方向 , 文字])}\\ +\item[関数] Setmarklen(数) +\item[機能] 座標軸の目盛の長さを設定する +\item[説明] \hyperlink{htickmark}{Htickmark()} , Vtickmark() で座標軸に目盛を入れるとき,その長さを設定する。 +\vspace{\baselineskip} \hypertarget{setorigin}{} -\item[関数] Setorigin(座標) -\item[機能] 描画する座標軸の原点を設定(移動)する -\item[説明] 描画する座標軸の原点を引数の座標とする。座標は点の識別名でもよい。\\ +\item[関数] Setorigin(座標) +\item[機能] 描画する座標軸の原点を設定(移動)する。座標系は変化しない。 +\item[説明] 描画する座標軸の原点を引数の座標とする。座標は点の識別名でもよい。 + +\vspace{\baselineskip} +【例】原点を (3,2) として座標軸を描く。 - 例:原点を (3,2) として座標軸を描く。\\ - \verb|Setorigin([3,2]);|\\ - 原点を点Aの位置にして座標軸を描く。\\ - \verb|Setorigin(A);| \\ +\hspace{10mm} \verb|Setorigin([3,2]);| - 注意:座標軸とともに,原点のO,軸名なども移動するが,座標系が変更される\\ - わけではない。\\ +原点を点Aの位置にして座標軸を描く。 - 例:原点は(3,2)に移動するが,スクリプトではもとの座標系を使う。 +\hspace{10mm} \verb|Setorigin(A);| + +\vspace{\baselineskip} + 【例】原点は(3,2)に移動するが,スクリプトではもとの座標系を使う。 \begin{verbatim} - Setorigin([3,2]); - Listplot([A,B,C,A]); - Ptsize(3); - Drawpoint([1,1]); - Letter([[1,1],"s2","P"]); + Setorigin([3,2]); + Listplot([A,B,C,A]); + Ptsize(3); + Drawpoint([1,1]); + Letter([[1,1],"s2","P"]); \end{verbatim} - 左が実行時のCinderellaの画面,右が\TeX の結果。\\ + 左が実行時のCinderellaの画面,右が\TeX の結果。\\ + +\hspace{10mm} \includegraphics[bb=0 0 227 205 , width=4cm]{Fig/setorigin.pdf} \input{Fig/setorigin} - \includegraphics[bb=0 0 227 205 , width=4cm]{Fig/setorigin.png} \input{Fig/setorigin}\\ - \\ +\vspace{\baselineskip} \hypertarget{setpen}{} -\item[関数] Setpen(数) -\item[機能] 線の太さを設定する\\ - \\[-5mm] -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} - \\ -\hypertarget{setpt}{} -\item[関数] Setpt(数) -\item[機能] 表示する点の大きさを設定する\\ +\item[関数] Setpen(数) +\item[機能] 線の太さの初期値を設定する + +\verb|Listplot()| などの描画関数のオプション \verb|dr| で,個々の太さは指定できる。 +\vspace{\baselineskip} \hypertarget{setscaling}{} -\item[関数] Setscaling(倍率) -\item[機能] 縦方向の倍率を設定する -\item[説明] 2次関数の応用問題などでは,グラフが縦に大きくなる場合があり,$y$軸方向のスケーリングを変えることがよくある。次のスクリプトは,$f(x)=-x^2+10x$ のグラフを縦軸方向を半分にして描くものである。\\ +\item[関数] Setscaling(倍率) +\item[機能] 縦方向の倍率を設定する。倍率は実数またはリスト。実数の場合は縦方向,リストの場合は[横方向,縦方向]の指定となる。 +\item[説明] 2次関数の応用問題などでは,グラフが縦に大きくなる場合があり,$y$軸方向のスケーリングを変えたいことがよくある。次のスクリプトは,$f(x)=-x^2+10x$ のグラフを縦軸方向を半分にして描くものである。 + \begin{layer}{150}{0} -\putnotese{80}{0}{\input{Fig/setscaling}} +\putnotese{80}{5}{\input{Fig/setscaling}} \end{layer} - \\ -\begin{verbatim} - Setscaling(0.5); - A.xy=[0,25/4]; - B.xy=[5/2,25/4]; - C.xy=[5/2,0]; - Listplot([A,B],["do"]); - Listplot([C,B],["do"]); - Plotdata("1","-2*x^2+10*x","x"); - Letter([[5,0],"s2w","5",[0,25/2],"w2", - "$\frac{25}{2}$",C,"s4","$\frac{5}{2}$"]); -\end{verbatim} -% \input{Fig/setscaling}\\ - ここで,点A,Bの座標が -\begin{verbatim} - A.xy=[0,25/4]; - B.xy=[5/2,25/4]; -\end{verbatim} -となっていることに注意されたい。$y$座標をあらかじめ半分にしている。すなわち,Cinderellaで作図した幾何要素に対してはSetscalingは無効である。これは,Putpoint関数を用いて点の位置を決めても同じである。\\ - たとえば,次のスクリプトでは,Cinderellaの画面上では2本の線分が点Bでつながるが,書き出された\TeX の図では離れてしまう。 -\begin{verbatim} - Setscaling(0.5); - Putpoint("A",[0,2]); - Putpoint("B",[2,2]); - Listplot([A,B]); - Listplot("1",[[0,0],[2,2]]); -\end{verbatim} - \\ - \\ -%\newpage +\begin{verbatim} + Setscaling(0.5); + A.xy=[0,25/4]; + B.xy=[5/2,25/4]; + C.xy=[5/2,0]; + Listplot([A,B],["do"]); + Listplot([C,B],["do"]); + Plotdata("1","-2*x^2+10*x","x"); + Letter([[5,0],"s2w","5",[0,25/2],"w2", + "$\frac{25}{2}$",C,"s4","$\frac{5}{2}$"]); +\end{verbatim} + ここで,点A,Bの座標が +\begin{verbatim} + A.xy=[0,25/4]; + B.xy=[5/2,25/4]; +\end{verbatim} +となっていることに注意されたい。$y$座標をあらかじめ半分にしている。すなわち,Cinderellaで作図した幾何要素に対してはSetscalingは無効である。これは,Putpoint関数を用いて点の位置を決めても同じである。 + +たとえば,次のスクリプトでは,Cinderellaの画面上では2本の線分が点Bでつながるが,書き出された\TeX の図では離れてしまう。 +\begin{verbatim} + Setscaling(0.5); + Putpoint("A",[0,2]); + Putpoint("B",[2,2]); + Listplot([A,B]); + Listplot("1",[[0,0],[2,2]]); +\end{verbatim} + +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} + +\vspace{\baselineskip} \hypertarget{setunitlen}{} -\item[関数] Setunitlen(文字列) -\item[機能] 単位長を設定する。デフォルトは 1cm\\ - この関数は,スクリプトの初めの方に書くのがよい。\\ - \\ +\item[関数] Setunitlen(文字列) +\item[機能] 単位長を設定する。 初期設定は 1cm。 + +この関数は,スクリプトの初めの方に書くのがよい。 + +【例】Setunitlen("8mm") + +\vspace{\baselineskip} \hypertarget{setwindow}{} -\item[関数] Setwindow() -\item[機能] 出力する描画領域を設定する\\ -\item[説明] 出力する描画領域は,通常は2点SWとNEを対角とする矩形領域である。 -この2点をドラッグすることによりビジュアルに描画領域を決められる。\\ -しかし,これとは別に出力範囲を設定したい場合にこの関数を用いる。\\ -また,表を作成したときは,表の範囲が出力範囲として優先される(Tabledata()を実行したとき)ので,表外に図を描いた場合は,最後にこの関数で出力範囲を指定して書き出す。\\ - \\ +\item[関数] Setwindow() +\item[機能] 出力する描画領域を設定する +\item[説明] 出力する描画領域は,通常は2点SWとNEを対角とする矩形領域である。 -\hypertarget{slider}{} -\item[関数] Slider(名称,位置1,位置2) -\item[機能] スライダを作成する -\item[説明] 名称は "A-C-B" の形で,端点をA,B,スライダ点をCとしたスライダを作る。\\ - 端点A,Bの位置を,位置1,位置2で指定する。 +この2点をドラッグすることによりビジュアルに描画領域を決められる。 + +しかし,これとは別に出力範囲を設定したい場合にこの関数を用いる。 + +また,表を作成したときは,表の範囲が出力範囲として優先される(Tabledata()を実行したとき)ので,表外に図を描いた場合は,最後にこの関数で出力範囲を指定して書き出す。 + +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -例:端点をA,Bとし,スライダの点をCとして,Aの位置を[0,2],Bの位置を[8,2]としてスライダを作る。 -\begin{verbatim} - Slider("A-C-B",[0,2],[8,2]); -\end{verbatim} - スライダにより取得したい値は,点Cの座標(たとえば C.x)を利用する。 - \\ -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} \end{description} \newpage -%第5節================================= +%=========== 描画 ====================== \subsection{描画} +\subsubsection{書式とオプション} + +描画関数は曲線などを作図する関数である。 + +基本的な書式は + +\hspace{20mm} 関数名(name , 点リストなど , options); + +である。 + +nameは,プロットデータの名称で,関数ごとに決められた頭部のあとに付けられる。たとえば,線分を描く Listplot() でできるプロットデータは,頭部が"sg"であり,nameを"1"とすれば,"sg1" という名称のプロットデータができる。name指定は不要の場合もあり,その場合は \ketcindy が自動的に名称を作成する。 + +点リストなどには,点の座標,点の識別名,複数の点のリスト,複数の点を示す文字列などがあり,関数によって異なる。点はCinderellaで作図した幾何要素の点を利用できる。 + +optionsは,線種・表示する文字列・解像度・出力の有無などを指定するオプション群。 + + 線種はつぎの4通り。 初期設定は実線。 -描画関数は曲線などを作図する関数である。\\ - 基本的な書式は\\ - 関数名(name , 点リストなど , options);\\ -であるが,nameの不要なものもある。\\ - nameは,プロットデータの名称を指定するもので,関数ごとに決められた頭部のあとに付けられる。nameが不要の場合は \ketcindy が自動的に名称を作成する。\\ - 点リストなどは,点の座標,点の識別名,複数の点のリスト,複数の点を示す文字列などがあり,関数によって異なる。点はCinderellaで作図した幾何要素の点を利用できる。\\ - \\ - optionsは,線種・表示する文字列・解像度・出力の有無などを指定するオプション群。 \begin{tabbing} -1234567890123\=\kill - 線種はつぎの4通り。デフォルトは実線。\\ - "dr, n" \>太さnの実線で描く。Scilab のファイルに Drwline() を出力する。\\ - "da,m,n" \>破線を描く。Scilab のファイルに Dashline() を出力する。\\ - \> mは破線の長さ,nは破線の間隔 (m,nは省略可)\\ - \>m,n オプションはCinderellaの描画面には反映されない。\\ - "id,m,n" \>ギャップからはじまる破線を描く。Scilab のファイルに Invdashline() を出力する。\\ - "do,m,n" \>点線で描く。Scilab のファイルに Dottedline() を出力する。\\ - \>mは点の間隔,nは太さ (m,nは省略可)\\ - 描画色指定は,RGBまたはCMYKのリストで指定するか,色名を用いる。\\ - 例:\verb|"Color=[0,0.7,0]"| で暗い緑になる。\\ - 出力の有無は\\ - "notex" \>Cinderella画面上で補助線として用いた図形をScilabに出力しない\\ - "nodisp" \>Cinderella画面上にも出力しない\\ - - "nodisp"は画面上にも,Scilabへのデータにも出力されないが,プロットデータは作成され,\\ - それを戻り値とするので,プロットデータだけを利用したい場合に有効である。\\ - 例 \verb|pdata=Circledata([A,B],["nodisp"]);|\\ - として,プロットデータ pdata を処理する。\\ +1234\=5678901234567\=\kill + \> "dr, n" \>太さnの実線で描く。\\ + \> "da,m,n" \>破線を描く。\\ + \> \> mは破線の長さ,nは破線の間隔 (m,nは省略可)\\ + \> \>m,n オプションはCinderellaの描画面には反映されない。\\ + \> "id,m,n" \>ギャップからはじまる破線を描く。\\ + \> "do,m,n" \>点線で描く。\\ + \> \>mは点の間隔,nは太さ (m,nは省略可) \end{tabbing} -\newpage +描画色指定は,RGBまたはCMYKのリストで指定するか,色名を用いる。 + +\hspace{10mm}【例】\verb|"Color=[0,0.7,0]"| で暗い緑になる。 + +出力の有無は +\begin{tabbing} + 1234\=567890123\=\kill + \> "notex" \>Cinderella画面上の図形を出力しない\\ + \> "nodisp" \>Cinderella画面上にも出力しない + \end{tabbing} + + "nodisp"は画面上にも,Rへのデータにも出力されないが,プロットデータは作成されるので,プロットデータだけを利用したい場合に有効である。 + +\hspace{10mm}【例】 \verb|pdata=Circledata([A,B],["nodisp"]);| + +として,後にプロットデータ pdata を利用する。 + +その他,次のようなオプションがある。 +\begin{tabbing} + 1234\=567890123\=\kill + \> "Size=n" \>点の大きさ,線の太さの指定\\ + \> "Num=n" \>曲線の場合の分割数(プロットデータの個数+1)\\ +\end{tabbing} + +%=========== 点・直線 ====================== +\subsubsection{点・線分・直線} \begin{description} -\hypertarget{anglemark}{} -\item[関数] Anglemark(点リスト , options) -\item[機能] 点リスト[A,B,C]で示された角に弧の形状の角の印をつける。 -\item[説明] optionsは次の通り。\\ - 数値 角の印の大きさ。デフォルトは1\\ - 線種 "dr, n" , "da,m,n" , "do,m,n"\\ - "Expr=文字" : 文字を入れる\\ - "Expr=位置 , 文字" : 位置を指定して文字を入れる。位置は頂点からの距離。\\ +\vspace{\baselineskip} +\hypertarget{pointdata}{} +\item[関数] Pointdata(name , 点リスト , options) +\item[機能] 点のデータを作成する。 +\item[説明] 与えられた座標の点データを作成する。オプションは"Size=","Color="。 + +\vspace{\baselineskip} +【例】 -例:三角形の内角に印をいれ,文字を書き込む。 +(1) 座標指定で2つの点データを作る。 + +\hspace{10mm} \verb|Pointdata("1",[[1,2],[-2,3]]);| + +(2) 作図した点A,Bについて,点データを作る。 + +\hspace{10mm} \verb|Pointdata("1",[A,B]);| + +\hspace{5mm}A,Bが作図されていない場合は作成されない。 + +\hspace{5mm}Cinderellaの描画面上では既存の点A,Bに黒の点が重なって表示される。 + +(3) Aの位置に大きさ4で点を作る。 + +\hspace{10mm} \verb|Pointdata("1",A,["size=4"]);| + +(4) 点データを作り,TeXにオプション0(白抜き)で描く + +\hspace{10mm} \verb|Pointdata("1",[A,B],[0]);| + +(5) 点データを作るが,TeXには出力しない + +\hspace{10mm} \verb|Pointdata("1",[[3,4],[5,6]],["notex"]);| + +(6) 点データを作るが,TeXには出力せず画面上にも表示しない。 + +\hspace{10mm} \verb|Pointdata("1",[[3,4],[5,6]],["nodisp"]);| + +(7) 節点を明示した木を描く \begin{verbatim} - Listplot([A,B,C,A]); - Letter([A,"n1","A",B,"w1","B",C,"e1","C"]); - Anglemark([B,A,C]); - Anglemark([C,B,A],["Expr=\theta"]); - Anglemark([A,C,B],[2,"dr,3","Expr=2,\alpha"]); + Ptsize(3); + Pointdata("1",[[1,2],[3,4],[5,2]]); + Listplot("1",[[0,0],[1,2],[3,4],[5,2],[4,0]]); + Listplot("2",[[1,2],[2,0]]); + Listplot("3",[[5,2],[6,0]]); \end{verbatim} - \input{Fig/anglemark} + + \begin{center} \input{Fig/pointdata} \end{center} -※角の印には平行四辺形の形状のものもある。Paramark() を参照のこと。\\ +注) 幾何点の有無など,付録の「\hyperlink{mkpttable}{点の作図についての比較表}」を参照のこと。 -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -\hypertarget{arrowdata}{} -\item[関数] Arrowdata(name,[始点 , 終点] , options) -\item[機能] 2点間を結ぶ矢線を描く。プロットデータ名の頭部は ar -\item[説明] name は,座標を数値で与えるときに必要。幾何要素の識別名で与えるときはなくてもよい。\\ - optionsは矢じりの形状などの指定で\\ - [ 矢じりの大きさ, 開き角, 矢じり位置, 線種,線の表示色] - のリストで与える。\\ - 開き角は60分法で与える。ただし,° はつけない。5未満の時は18°の倍数指定とする。\\ - 矢じり位置は,線分の長さを1とした始点からの距離。\\ - ただし,Cinderellaの画面上には全ては反映されない。たとえば,太さ指定をしても太さは同じ。\\ - - 例:線分ABを矢線にする。\\ - \verb|Arrowdata([A,B]);|\\ - 始点が(2,0) , 終点が(4,3) ,開き角45°,EFの中点に矢じりの先端\\ - \verb|Arrowdata("1",[[2,0],[4,3]],[1,45,0.5]);|\\ - 大きさ2,太さ2\\ - \verb|Arrowdata([C,D],[2,1,1,"dr,2"]);|\\ - 破線で太さ0.5\\ - \verb|Arrowdata([E,F],["da,0.5"]);|\\ - 少し間が空いて太い点線で,Cinderellaの画面上では赤で表示する。\\ - \verb|Arrowdata([G,H],[2,1,"do,2,3","color-$>$[1,0,0]"]);| \\ - - \input{Fig/arrowdata}\\ -\\ +\vspace{\baselineskip} +\hypertarget{drwpt}{} +\item[関数] Drwpt(点,option), Drawpoint(点,options) +\item[機能] 点を表示する +\item[説明] 座標または幾何点の識別名を与えて点を表示する。これだけではCinderellaの描画面には描かれないので,描画面にも表示するにはCinderellaの作図ツールで作図するか,Pointdata() または Putpoint() を用いる。 -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +複数の点の場合は座標または識別名はリストで与える。 + +optionに数字 0 を入れると,白抜きで表示する。なお白抜きの場合は,Ptsize()で点の大きさを少し大きめにとるとよい。 + +可読性を高めるときはDrawpointを推奨する。 + +\vspace{\baselineskip} +【例】座標(1,1)と(4,3)に点を表示する。Cinderellaの描画面には描かれない。 + +\hspace{10mm} \verb|Drwpt([[1,1],[4,3]]);| + +\vspace{\baselineskip} +【例】Cinderellaで点A,B,Cを作図しておき,\TeX で表示する。 + +\hspace{10mm} \verb|Drwpt([A,B,C]); | + +\vspace{\baselineskip} +【例】線分ABの右端(B)を白抜きで表示する -\hypertarget{arrowhead}{} -\item[関数] Arrowhead(点 , 方向 , options) , Arrowhead(点 , プロットデータ,options) -\item[機能] 点に矢じりだけを描く -\item[説明] 指定された位置に,指定された方向を向いた矢じりだけを描く。\\ - 点は座標または幾何要素名。方向は原点から見て座標[a,b]の方向。\\ - optionsは [大きさ,矢じりの開き角,形状と位置] のリスト。\\ - 矢じりの開き角は60分法で片側半分の角。\\ - 形状は, "f" :塗りつぶしの三角形(デフォルト)または " l " : ラインのみ。\\ - 位置は,"t"(デフォルト)または "c" , "b"\\ - "t" は矢じりの先端が終点に一致,"c" は三角形の中心が終点と一致,"b" は終点が矢じりの底辺にのる。\\ - プロットデータを指定したときは,曲線上の点に矢じりをつける。\\ - 曲線には向きがあり,それによって矢じりの向きが決まる。" Invert(プロットデータ) " とすると反対向きの矢じりになる。\\ - 曲線の向きとは,曲線を描くときの順序で,プロットデータの順序でもある。invert() はこのプロットデータを逆順にするものである。\\ - -例: - -\vspace{-8mm} -\hspace{6mm} \begin{layer}{150}{0} -\putnotese{0}{0}{点 A が下図の位置のとき} -\putnotese{0}{8}{\input{Fig/ForRef-Arrowhead-1}} -\putnotese{40}{0}{(ア) Arrowhead(A,[-1,1]);} -\putnotese{40}{7}{(イ) Arrowhead([1,1],[-1,1],[2,60]);} -\putnotese{40}{14}{(ウ) Arrowhead(A,[-1,1],[2,30,"b"]);} -\putnotese{40}{21}{(エ) Arrowhead([1,1],[-1,1],[2,20,"lc"]);} +\putnotese{50}{8}{ \input{Fig/drawpoint}} \end{layer} +\begin{verbatim} + Ptsize(5); + Listplot([A,B]); + Drawpoint(B,0); +\end{verbatim} + +※ Drawpoint([A,B],0); とすれば,両端が白抜きになる。 + +\vspace{\baselineskip} +{\bf 点の表示方法} + +点を表示する関数はいくつかある。Cinderellaの描画面上に単に点を表示するもの,幾何点を作るもの,TeXに出力するためのもの,と少しずつ意味が異なる。 + +付録の「\hyperlink{mkpttable}{点の作図についての比較表}」を参照のこと。 + +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} + +\vspace{\baselineskip} +\hypertarget{putpoint}{} +\item[関数] Putpoint(点名 , 座標1 ,座標2 ) +\item[機能] 点を作る +\item[説明] 識別名が点名の点を,既存でなければ座標1に作る。既存ならば座標2に移動する。Texには出力されない。 + +\vspace{\baselineskip} +【例】点Aを作る。 + +(1,1) に固定点Aを作る。 この点は動かすことができない。 + +\hspace{10mm} \verb|Putpoint("A",[1,1]);| + + (1,1)に自由点を作るには次のようにする。 + +\hspace{10mm} \verb|Putpoint("A",[1,1],[A.x,A.y]);| + + この点は座標2の効果により,自由点となり,ドラッグして動かすことができる。 + +\vspace{\baselineskip} +注)点名は半角アルファベットとする。数字や漢字でもCinderellaでは点ができるが,Rでエラーとなる。 + +\vspace{\baselineskip} +\hypertarget{putintersect}{} +\item[関数] Putintersect(点名 , PD1 , PD2 , [No] ) +\item[機能] 2曲線の交点を作る +\item[説明] PD1,PD2は2曲線のプロットデータ名。作成される点は幾何点。 + +描画範囲に交点が1つだけのとき,第4引数がなくても交点が作られる。 + +描画範囲に2つ以上の交点がある場合,第4引数を省略するとコンソールに交点の座標のリストと,「Choose point number 」というガイドが表示される。そこで,引数のNoとして,その番号を指定すると,その点が作られる。この関数で作成されるのは幾何点だけなので,\TeX の図に点として明示するためにはPointdata()で書き出す。 + +次の例は,3次曲線と直線の交点を3つとも取ったものである。 -\vspace{2mm} -\hspace{6mm} \begin{layer}{150}{0} -\putnotese{0}{0}{\input{Fig/ForRef-Arrowhead-ya1}} -\putnotese{95}{55}{D の座標がわかれ} -\putnotese{95}{60}{ば,それでもよい} -\putnotese{12}{27}{(ア)} -\putnotese{42}{27}{(イ)} -\putnotese{72}{27}{(ウ)} -\putnotese{102}{27}{(エ)} -\putnotese{0}{30}{\input{Fig/ForRef-Arrowhead-2}} -\putnotese{30}{30}{\input{Fig/ForRef-Arrowhead-3}} -\putnotese{60}{30}{\input{Fig/ForRef-Arrowhead-4}} -\putnotese{90}{30}{\input{Fig/ForRef-Arrowhead-5}} +\putnotese{80}{5}{ \input{Fig/putintersect}} \end{layer} -\vspace{56mm} -\hspace{6mm} +\begin{verbatim} + Plotdata("1","x^3-4*x","x",["Num=200"]); + Plotdata("2","1/2*x+1","x"); + Putintersect("P","gr1","gr2",1); + Putintersect("Q","gr1","gr2",2); + Putintersect("R","gr1","gr2",3); + Pointdata("1",[P,Q,R],["size=4"]); +\end{verbatim} + 交点が存在しない場合は,「No intersect point」がコンソールに表示される。 + +\vspace{\baselineskip} +\hypertarget{putoncurve}{} +\item[関数] PutonCurve(点の名前, プロットデータ, options) +\item[機能] 曲線上に点を乗せる。 +\item[説明] 点が存在しない場合は新たに作る。すでにその点が存在する場合は,その点の$x$座標を使う。初期値の$x$座標の 初期設定は 0。 + +optionsは,$x$座標の範囲をリストで与える。 + +\vspace{\baselineskip} +【例】アステロイド上の動点P をとる。 +\begin{verbatim} + Paramplot("1","[2*cos(t)^3,2*sin(t)^3]","t=[0,2*pi]"); + PutonCurve("P","gp1",[-1,1]); +\end{verbatim} +点Pがアステロイド上にでき,この点はドラッグするとアステロイド上を $-1 \leq x\leq 1$ の範囲で動かすことができる。ただし,-1,1の付近はy座標の判断の関係でぴったりはいかない。 + + \begin{center} \input{Fig/putoncurve.tex} \end{center} + +%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} + +\vspace{\baselineskip} +\hypertarget{putonline}{} +\item[関数] PutonLine(点名 , 座標1 ,座標2 ) +\item[機能] 直線上に点を作る +\item[説明] 座標1,座標2を通る直線上に点名の点を作る。できた点は直線に対してインシデントとなる。 + +\vspace{\baselineskip} +【例】 点A,\ Bを通る直線上に点Pをとる。 + + \verb|PutonLine("P",A,B);| + +\vspace{\baselineskip} +\hypertarget{putonseg}{} +\item[関数] PutonSeg(点名 , 座標1 ,座標2 ) +\item[機能] 線分上に点を作る +\item[説明] 座標1,座標2を通る線分上に点名の点を作る。できた点は線分に対してインシデントとなる。 + +\vspace{\baselineskip} +【例】 点A,\ Bを通る線分上に点Pをとる。 + + \verb|PutonSeg("P",A,B);| + +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} + +\vspace{\baselineskip} +\hypertarget{reflectpoint}{} +\item[関数] Reflectpoint(点,対称点または対称軸) +\item[機能] 点の鏡映の座標を返す。 +\item[説明] 点を指定された点または軸に関して対称移動した点の座標を返す。対称軸は[ 点1, 点2 ]で指定 + +\vspace{\baselineskip} +【例】点A〜Fを作図しておき,C〜FをAの鏡映の位置に配置する。 + \begin{layer}{150}{0} -\putnotese{0}{0}{曲線 crBC 上の点 D が} -\putnotese{0}{5}{下図のようなとき} -\putnotese{0}{7}{\input{Fig/ForRef-Arrowhead-6}} -\putnotese{16}{22}{crBC} -\putnotese{40}{0}{(オ) Arrowhead(D,"crBC");} -\putnotese{40}{7}{(カ) Arrowhead(D,"crBC",[2]);} -\putnotese{40}{14}{(キ) Arrowhead(D,"crBC",[2,30,"l"]);} -\putnotese{40}{21}{(ク) Arrowhead(D,"Invert(crBC)");} +\putnotese{70}{10}{ \input{Fig/reflectpoint}} \end{layer} -\vspace{3mm} -\hspace{6mm} +\hspace{5mm} CはBに関してAと対称な点 + +\hspace{5mm} Dは点(2,3)に関してAと対称な点 + +\hspace{5mm} Eは点(1,0) に関して (-1,1) と対称な点 + +\hspace{5mm} Fは直線CEに関してAと対称な点 + +\begin{verbatim} + C.xy=Reflectpoint(A,B); + D.xy=Reflectpoint(A,[[2,3]]); + E.xy=Reflectpoint([-1,1],[[1,0]]); + F.xy=Reflectpoint(A,[C,E]); + Lineplot([C,E],["do"]); +\end{verbatim} + +\vspace{\baselineskip} +注)鏡映はCinderellaの作図ツールでも作成することができる。場合によってはCinderellaで作図する方が簡明である。 + +%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +\vspace{\baselineskip} +\hypertarget{rotatepoint}{} +\item[関数] Rotatepoint(点 ,角度 , 中心) +\item[機能] 点の位置を回転する +\item[説明] 点を,中心で示された点の周りに回転した座標を返す。角度は弧度法で与える + +\vspace{\baselineskip} +【例】点A〜Eは作図しておき,C〜Eをそれぞれの位置に配置する。 + \begin{layer}{150}{0} -\putnotese{12}{27}{(オ)} -\putnotese{42}{27}{(カ)} -\putnotese{72}{27}{(キ)} -\putnotese{102}{27}{(ク)} -\putnotese{0}{28}{\input{Fig/ForRef-Arrowhead-7}} -\putnotese{30}{28}{\input{Fig/ForRef-Arrowhead-8}} -\putnotese{60}{28}{\input{Fig/ForRef-Arrowhead-9}} -\putnotese{90}{28}{\input{Fig/ForRef-Arrowhead-10}} +\putnotese{75}{10}{ \input{Fig/rotatepoint}} \end{layer} +\begin{spacing}{1.5} +点CはAを,Bに関して$\dfrac{2}{3}\pi $だけ回転した点 + +点Dは点(5,2)を,Bに関して$\dfrac{\pi}{3}$ だけ回転した点 +\end{spacing} +点Eは点(3,0)をAに関して $-\dfrac{\pi}{4} $だけ回転した点 -\vspace{70mm} -\hypertarget{bezier}{} -\item[関数] Bezier(名前,節点リスト,制御点リスト,[オプション] ) -\item[機能] 単独のベジエ曲線を描く -\item[説明] 制御点は,各区間に対して,3次の場合2個,2次の場合1個のリストで与える。 +\begin{verbatim} + C.xy=Rotatepoint(A,2*pi/3,B); + D.xy=Rotatepoint((5,2),pi/3,B); + E.xy=Rotatepoint([3,0],-pi/4,A); +\end{verbatim} +注)図の点線は位置関係を示すためのもの。 - [ [F,G] , [H], ... ] +点名や座標は,実際にはLetter()関数で記述する。 -オプション +\vspace{\baselineskip} +\hypertarget{scalepoint}{} +\item[関数] Scalepoint(点,比率ベクトル,中心) +\item[機能] 点の位置の拡大・縮小を行う +\item[説明] 点を,指定された中心を原点とする座標系で,比率ベクトルの分だけ拡大・縮小した位置の座標を返す。 -"Num=..." : 節点間の分割数(分点数 $-1$)を指定できる。(デフォルトは10) +\vspace{\baselineskip} +【例】点A〜Fは作図ツールで適当な位置にとっておく。 -\vspace{5mm} +点Dを,点Aを原点を中心に横に3倍,縦に2倍した位置に置く。 + +点Eを,点Aを点Bを中心に横に3倍,縦に2倍した位置に置く。 + +点Fを,点Aを原点を中心にベクトル$\overrightarrow{OC} $で示された比率の位置に置く。 +\begin{verbatim} + D.xy=Scalepoint(A,[3,2],[0,0]); + E.xy=Scalepoint(A,[3,2],B); + F.xy=Scalepoint(A,C.xy,[0,0]); + Arrowdata("1",[[0,0],C]); + Pointdata("1",[A,B,C,D,E,F],["size=2"]); + Letter([A,"e2","A("+A.x+","+A.y+")"]); + Letter([B,"e2","B("+B.x+","+B.y+")"]); + Letter([C,"e2","C("+C.x+","+C.y+")"]); + Letter([D,"e2","D("+D.x+","+D.y+")"]); + Letter([E,"e2","E("+E.x+","+E.y+")"]); + Letter([F,"e2","F("+F.x+","+F.y+")"]); +\end{verbatim} +\vspace{\baselineskip} +\begin{center} \input{Fig/scalepoint} \end{center} + +点A,B,Cをドラッグすると,インタラクティブにD,E,F の位置が変わる。 + +\vspace{\baselineskip} +\hypertarget{translatepoint}{} +\item[関数] Translatepoint(点 , 移動ベクトル) +\item[機能] 点を平行移動する +\item[説明] 点を移動ベクトルで示された分だけ平行移動した点の座標を返す + +\vspace{\baselineskip} +【例】点A〜Dは作図しておく。 + +点Cを点Aを$x$軸方向に2 , $y$軸方向に3 + +だけ平行移動した点にする。 + +点Dを点Aをベクトル$\overrightarrow{OB} $だけ + +平行移動した点にする。 +\begin{verbatim} + C.xy=Translatepoint(A,[2,3]); + D.xy=Translatepoint(A,B.xy); +\end{verbatim} + +\hspace{20mm} \input{Fig/translatepoint} + +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} + +\hypertarget{arrowdata}{} +\item[関数] Arrowdata(name,[始点 , 終点] , options) +\item[機能] 2点間を結ぶ矢線を描く。 +\item[説明] name は,座標を数値で与えるときに必要。幾何要素の識別名で与えるときはなくてもよい。 + +optionsは矢じりの形状などの指定で + +\hspace{10mm} [ 矢じりの大きさ, 開き角, 矢じり位置, 線種,線の表示色] -例: +のリストで与える。 + +開き角は60分法で与える。ただし,° はつけない。5未満の時は18°の倍数指定とする。 + + 矢じり位置は,線分の長さを1とした始点からの距離。 + +ただし,Cinderellaの画面上には全ては反映されない。たとえば,太さ指定をしても画面上では太さは同じ。 + + トリミング : "Cutend=m" または "Cutend=[m,n]" +右辺が数のときは両端をmだけカットする。リストのときは始点をm,終点をnだけカットする。 + +\vspace{\baselineskip} +【例】線分ABを矢線にする。 + +\hspace{10mm} \verb|Arrowdata([A,B]);| + +始点が(2,0) , 終点が(4,3) ,開き角45°,EFの中点に矢じりの先端 + +\hspace{10mm} \verb|Arrowdata("1",[[2,0],[4,3]],[1,45,0.5]);| + +大きさ2,太さ2 + +\hspace{10mm} \verb|Arrowdata([C,D],[2,1,1,"dr,2"]);| + +破線で太さ0.5 + +\hspace{10mm} \verb|Arrowdata([E,F],["da,0.5"]);| + + 少し間が空いて太い点線で,Cinderellaの画面上では赤で表示する。 + +\hspace{10mm} \verb|Arrowdata([G,H],[2,1,"do,2,3","Color=[1,0,0]"]);| + +\hspace{20mm} \input{Fig/arrowdata} + +【例】2つの円を矢線で結ぶ。 + \begin{layer}{150}{0} -\putnotese{50}{15}{bz1} -\putnotese{60}{-15}{\input{Fig/checkbe1}} +\putnotese{75}{0}{ \input{Fig/trimarrow}} \end{layer} +\hspace{20mm} + +\begin{verbatim} + Circledata("1",[A,A.xy+[0.5,0]]); + Circledata("2",[B,B.xy+[0.7,0]]); + Arrowdata([A,B],["Cutend=[0.5,0.7]"]); + Letter([A,"c","A",B,"c","B"]); +\end{verbatim} + Cinderellaの作図ツールで2点ABをとっておく。 -2次ベジエ曲線 +円A,Bの半径が同じ(たとえば0.5)であれば,\verb|Arrowdata([A,B],["Cutend=0.5"]);| でよい。 -Bezier("1",[A,B],[C]); +%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +\vspace{\baselineskip} +\hypertarget{arrowhead}{} +\item[関数] Arrowhead(点 , 方向 , options) , Arrowhead(点 , プロットデータ,options) +\item[機能] 点に矢じりだけを描く +\item[説明] 指定された位置に,指定された方向を向いた矢じりだけを描く。 -\vspace{20mm} +点は座標または幾何要素名。方向は原点から見て座標[a,b]の方向。 + +optionsは [大きさ,矢じりの開き角,形状と位置] のリスト。 + +矢じりの開き角は60分法で片側半分の角。 + +形状は, "f" :塗りつぶしの三角形( 初期設定)または " l " : ラインのみ。 + +ただし,塗りつぶし矢じりは画面上では塗りつぶしにならない。 +位置は,"t"( 初期設定)または "c" , "b" +\begin{tabbing} +1234\=567890123\=\kill + \>"t" は矢じりの先端が終点に一致\\ + \>"c" は三角形の中心が終点と一致\\ + \>"b" は終点が矢じりの底辺にのる。 +\end{tabbing} +プロットデータを指定したときは,曲線上の点に矢じりをつける。 + +曲線には向きがあり,それによって矢じりの向きが決まる。" Invert(PD) " とすると反対向きの矢じりになる。 + +曲線の向きとは,曲線を描くときの順序で,プロットデータの順序でもある。invert() はこのプロットデータを逆順にするものである。 + +\vspace{\baselineskip} + +【例】 + +\vspace{\baselineskip} +%\hspace{6mm} +\begin{layer}{150}{0} +\putnotese{0}{0}{点 A が右図の位置のとき} +\putnotese{80}{8}{\input{Fig/ForRef-Arrowhead-1}} +\putnotese{0}{7}{(ア) Arrowhead(A,[-1,1]);} +\putnotese{0}{14}{(イ) Arrowhead([1,1],[-1,1],[2,60]);} +\putnotese{0}{21}{(ウ) Arrowhead(A,[-1,1],[2,30,"b"]);} +\putnotese{0}{28}{(エ) Arrowhead([1,1],[-1,1],[2,20,"lc"]);} +\putnotese{0}{38}{(ア)} +\putnotese{30}{38}{(イ)} +\putnotese{60}{38}{(ウ)} +\putnotese{90}{38}{(エ)} +\putnotese{0}{45}{ \input{Fig/ForRef-Arrowhead-2}} +\putnotese{30}{45}{ \input{Fig/ForRef-Arrowhead-3}} +\putnotese{60}{45}{ \input{Fig/ForRef-Arrowhead-4}} +\putnotese{90}{45}{ \input{Fig/ForRef-Arrowhead-5}} +\end{layer} + +\vspace{75mm} +%\hspace{6mm} \begin{layer}{150}{0} -\putnotese{50}{20}{bzc} -\putnotese{60}{-10}{\input{Fig/checkbe2}} +\putnotese{0}{0}{曲線 crBC 上の点 D が右図のようなとき} +\putnotese{80}{8}{ \input{Fig/ForRef-Arrowhead-6}} +\putnotese{96}{22}{crBC} +\putnotese{0}{7}{(オ) Arrowhead(D,"crBC");} +\putnotese{0}{14}{(カ) Arrowhead(D,"crBC",[2]);} +\putnotese{0}{21}{(キ) Arrowhead(D,"crBC",[2,30,"l"]);} +\putnotese{0}{28}{(ク) Arrowhead(D,"Invert(crBC)");} +\putnotese{0}{38}{(オ)} +\putnotese{30}{38}{(カ)} +\putnotese{60}{38}{(キ)} +\putnotese{90}{38}{(ク)} +\putnotese{0}{45}{ \input{Fig/ForRef-Arrowhead-7}} +\putnotese{30}{45}{ \input{Fig/ForRef-Arrowhead-8}} +\putnotese{60}{45}{ \input{Fig/ForRef-Arrowhead-9}} +\putnotese{90}{45}{ \input{Fig/ForRef-Arrowhead-10}} \end{layer} -3次ベジエ曲線 +\vspace{70mm} -Bezier("c",[A,B],[C,D]); +\vspace{\baselineskip} +\hypertarget{lineplot}{} +\item[関数] Lineplot(name , 2点のリスト , options) +\item[機能] 2点のリストで示された点を結ぶ直線を描く。 +\item[説明] 2点のリストは座標または幾何要素の名前で与える。 -\vspace{20mm} +options は次の通り。 + +線種 "dr, n" , "da,m,n" , "do,m,n" + + "+" 半直線を描く。 + +"dr" , "da" , "do" と "+" はリストにして両方指定することができる。 + +点のリストが,座標ではなく幾何要素名のリストの場合は,nameは省略できる。 + +いくつか例を示す。 + +\vspace{\baselineskip} +各座標を結ぶ直線を引く + +\hspace{5mm} \verb|Lineplot("1",[[0,0],[1,2]])| + +Cinderellaの描画ツールで2点A,Bをとっておき,直線ABを引く + +\hspace{5mm} \verb|Lineplot([A,B]);| + +optionの働きの例 +\begin{tabbing} +1234\=56789012345678901234567890123456789\=\kill + \> \verb|Lineplot([A,B],["dr,0.5","+"]);| \>Aを端点とする半直線を引く\\ + \> \verb|Lineplot([C,D],["dr,2"]);| \>直線CDを太さ2で描く\\ + \> \verb|Lineplot([E,F],["da"]);| \>直線EFを破線で描く\\ + \> \verb|Lineplot([G,H],["do"]);| \>直線GHを点線で描く +\end{tabbing} +結果は,次図左上から。 + +\vspace{\baselineskip} +\hspace{20mm} \input{Fig/lineplot} + +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} + +\vspace{\baselineskip} +\hypertarget{listplot}{} +\item[関数] Listplot(name , 点のリスト , options) +\item[機能] 点のリストで示された点を結ぶ。 +\item[説明] 点のリストは座標または幾何要素名のリストで与える。点が,座標ではなく幾何要素名の場合は,nameは省略可 + +プロットデータの名前は,"sg" に引数の name を付加したものとなる。 + + options は次の通り。 + +線種 "dr, n" , "da,m,n" , "do,m,n" + +トリミング : "Cutend=m" または "Cutend=[m,n]" + +数のときは両端をmだけカットする。リストのときは始点をm,終点をnだけカットする。 + +\begin{tabbing} +1234567890123456789012345678901234\=\kill + optionsの使用例\\ + \verb|Listplot([A,B]);| \>線分ABを描く。太さは 初期設定。\\ + \verb|Listplot([C,D],["dr,2"]);| \>線分CDを描く。太さ2\\ + \verb|Listplot([E,F],["da"]);| \>線分EFを破線で描く\\ + \verb|Listplot([G,H],["da,3,1"]);| \>線分GHを破線で描く。線を長く\\ + \verb|Listplot([K,L],["da,1,3"]);| \>線分KLを破線で描く。間隔を空ける\\ + \verb|Listplot([M,N],["do"]);| \>線分MNを点線で描く。\\ + \verb|Listplot([O,P],["do,3"]);| \>線分OPを点線で描く。間隔を空ける\\ + \verb|Listplot([Q,R],["do,3,3"]);| \>線分QRを点線で描く。間隔を空けて太く\\ +結果は次図左から。 +\end{tabbing} + \begin{center} \input{Fig/listplot3}\end{center} + +【例】三角形を描く。 + + Cinderellaの作図ツールで三角形ABCを描いておく。あるいは,単に3点A,B,Cをとるだけでもよい。 \begin{layer}{150}{0} -\putnotese{50}{20}{bz3} -\putnotese{60}{-10}{\input{Fig/checkbe3}} +\putnotese{75}{0}{ \input{Fig/listplot1}} \end{layer} +\hspace{20mm} -つなげる +\begin{verbatim} + Addax(0); + Listplot([A,B,C,A]); +\end{verbatim} -Bezier("3",[A,B,C],[[D],[E,F]]); +点の位置は座標で指定してもよい。 -\vspace{20mm} +その場合は name が必要。 +\hspace{10mm} \verb|Listplot("1",[[0,0],[2,0],[1,2],[0,0]]);| + +\vspace{\baselineskip} +【例】2つの円を線分で結ぶ。 + \begin{layer}{150}{0} -\putnotese{50}{20}{bzS} -\putnotese{60}{5}{\input{Fig/checkbe4}} +\putnotese{75}{0}{ \input{Fig/trimseg}} \end{layer} +\hspace{20mm} + +\begin{verbatim} + Circledata("1",[A,A.xy+[0.5,0]]); + Circledata("2",[B,B.xy+[0.7,0]]); + Listplot([A,B],["Cutend=[0.5,0.7]"]); + Letter([A,"c","A",B,"c","B"]); +\end{verbatim} + Cinderellaの作図ツールで2点ABをとっておく。 -D,B,E を1直線上にとると,滑らかにつながる +円A,Bの半径が同じであれば,\verb|Listplot([A,B],["Cutend=0.5"]);| でよい。 -Bezier("S",[A,B,C],[[D],[E,F]]); +\vspace{\baselineskip} +プロットデータは点の座標のリストである。したがって,プロットデータを自作してListplot()で表示することができる。 -\vspace{25mm} +\vspace{\baselineskip} +【例】有限フーリエ級数展開 + \[\cfrac{\pi}{2}+\sum_{n=0}^{30} \cfrac{1-(-1)^n}{n}\sin nx\] + +次のようにCindyscriptで関数を定義し,プロットデータpd を作って引数に渡す。 +\begin{verbatim} + f(x):=( + s=pi/2; + repeat(30,n,s=s+(1-(-1)|^n)/n*sin(n*x)); + ); + pd=apply(0..200,t, + x=-2*pi+t*4*pi/200; + [x,f(x)]; + ); + Listplot("1",pd); + Expr([[-2*pi,-0.5],"s","-2\pi",[-pi,-0.5],"s","-\pi",[pi,-0.5],"s", + "\pi",[2*pi,-0.5],"s","2\pi",[0,pi],"w2","\pi"]); +\end{verbatim} + +\vspace{\baselineskip} +\hspace{20mm}\input{Fig/fourier} + +\vspace{\baselineskip} + リストの長さには制限がある。たとえば,タートルグラフィクスを用いたシェルピンスキーのギャスケットでは200くらいずつのリストに分割する。 + + \hspace{20mm}\scalebox{0.9}{ \input{Fig/listplot2}} +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} + +\vspace{\baselineskip} +\hypertarget{mksegments}{} +\item[関数] Mksegments() +\item[機能] すべての幾何線分のPD を作成 +\item[説明] Cinderellaの「線分を加える」ツールで描いたすべての線分をそのままプロットデータとする。たとえば,線分ABを作ると,プロットデータsgABが作成される。その後,インスペクタで点Bの識別名を変更(たとえばQに)すると,プロットデータ名も変更される。線分はすでに描かれていてもよい。 + +\vspace{\baselineskip} +【例】等比数列の例題 + +三角形の各辺の中点を結んでできる三角形を次々に作っていく,等比数列の図を描く。 + +まず「線分を加える」ツールで三角形ABCを描く。 + +「中点を加える」ツールで各辺の中点を取り,「線分を加える」ツールで中点を結ぶ。 + +これを繰り返す。\verb|Mksegments()| を書いておけば,\verb|Listplot([A,B,C]| などを書かなくても,作図ができた時点で,図のデータができる。 + +\includegraphics[bb=0.00 0.00 438.02 327.02,width=5cm]{Fig/gpro01.pdf} \input{Fig/gpro02} + +\vspace{\baselineskip} +\hypertarget{framedata}{} +\item[関数] Framedata(name , リスト,options) +\item[機能] 矩形を描く +\item[説明] リストの形は2通り。 + +その1:[中心 ,横 , 縦] で,矩形を描く。横,縦は中心からの距離。 + +その2:2点のリスト。点が座標でなく名称のときはnameは省略できる。 + +点の座標は点の名前でもよい。点を座標で与える場合はnameは省略できない。 + +リストを省略した場合は,描画範囲と同一の矩形を描く。 + +その2のタイプでは,option として,"center" または "corner" がある。"center" のときは,中心と対角点( 初期設定),"corner" のときは2点を対角点として解釈する。 + +以下にいくつか例を示す +\begin{tabbing} +1234567890123456789012345678901234\=\kill + \verb|Framedata("1");| \> 描画範囲(SW,NE)と同一の矩形を描く\\ + \verb|Framedata("2",[[0,0],2,2]);| \> 原点を中心とする縦横幅4の正方形を描く\\ + \verb|Framedata("3",[A,1.5,1.2]);| \> 点Aを中心とする横3,縦2.4の矩形を描く。(図左)\\ + \verb|Framedata([B,C]);| \> 点Bを中心,点Cを頂点とする矩形を描く。(図中央)\\ + \verb|Framedata([D,E],["corner"]); | \> 点D,Eを対角点とする矩形を描く。(図右) + \end{tabbing} +\begin{center}\includegraphics[bb=0.00 0.00 348.15 106.16,width=12cm]{Fig/Framedata.pdf}\end{center} + +矩形の角を丸めたい場合は,Framedata()ではなく,\hyperlink{ovaldata}{Ovaldata()}を使うとよい。 + +\vspace{\baselineskip} +\hypertarget{polygonplot}{} +\item[関数] Polygonplot(name , 点リスト , 整数,options) +\item[機能] 2点を半径とする円に内接する正多角形を描く。 +\item[説明] 点リストを[A,B] とすると,Aを中心とする半径ABの円周上に点をとって正多角形を描く。ただし円は描かない。A,B は座標でもよい。 + +点リストが座標ではなく作図してある点の名称のとき,オプションに "Geo=y" をつけると,頂点の幾何点を作る。幾何点の名称はBに番号を付けたものとなる。整数でない数を指定した場合は,きちんと閉じない折れ線が描かれる。 + +\vspace{\baselineskip} +【例】点リストとoptionの違いによる作図と,TeXの図を示す。 + +\begin{verbatim} + Addax(0); + Polygonplot("1",[[-4,1],[-4,3]],7); + Polygonplot("2",[A,B],7); + Polygonplot("3",[C,D],7,["Geo=y"]); +\end{verbatim} + +\hspace{10mm}\includegraphics[bb=0.00 0.00 541.03 175.01,width=10cm]{Fig/polygonplot2.pdf} + +\hspace{10mm}\input{Fig/polygonplot1} + + +円に内接する形でなく,与えられた線分ABを1辺とする正多角形を描くには次のようにする。 + +線分ABは,Cinderellaの作図ツールなどで描かれているものとする。ただし,線分でなく,両端の点が与えられているだけでもよい。Cindyscriptで点A,Bが複素平面上にあるものとして,多角形の頂点の位置を計算する。 + +\vspace{\baselineskip} +【例】ABを1辺とする正五角形を描く。 + +\begin{verbatim} + n=5; + pti=[complex(A),complex(B)]; + th=2*pi/n; + repeat(n-2,s, + z1=pti_s; + z2=pti_(s+1); + z=z2+(z2-z1)*(cos(th)+i*sin(th)); + pti=append(pti,z); + ); + pt=apply(pti,gauss(#)); + pt=append(pt,A.xy); + Listplot("1",pt); +\end{verbatim} +ptiは,各頂点に対応する複素数のリスト,ptが各頂点の座標のリストである。 + +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} + +\end{description} +\newpage +% ====== 曲線 ============== +\subsubsection{曲線} +\begin{description} + +\hypertarget{bezier}{} +\item[関数] Bezier(名前,節点リスト,制御点リスト,[オプション] ) +\item[機能] ベジェ曲線を描く +\item[説明] 制御点は,各区間に対して,3次の場合2個,2次の場合1個のリストで与える。 + +オプションは + +"Num=n" : 節点間の分割数(分点数 $-1$)を指定できる。 ベジェ曲線とスプライト曲線の関数は節点間が短い場合が多いので初期設定は10になっている。Plotdata()などと違い,大きい数(200など)を指定すると,全体の分割数が増大して描画時間がかかるようになってしまうので注意。 + +\vspace{\baselineskip} +【例】 \begin{layer}{150}{0} -\putnotese{16}{27}{bzname} -\putnotese{15}{10}{\input{Fig/checkbe7}} +\putnotese{60}{-10}{\scalebox{0.9}{ \input{Fig/checkbe1}}} \end{layer} -全て同じ次数の場合,次のようにしてもよい. +2次ベジェ曲線 -Bezier("name", [A,B,C,D], [E,F,G,H,K,L] ); +Bezier("1",[A,B],[C]); -\vspace{30mm} +\vspace{20mm} \begin{layer}{150}{0} -\putnotese{50}{20}{bz1a} -\putnotese{60}{5}{\input{Fig/checkbe5}} +\putnotese{60}{-10}{\scalebox{0.9}{\input{Fig/checkbe2}}} \end{layer} -オプション +3次ベジェ曲線 -Bezier("1a",[A,B,C],[[D],[E,F]],["Num=3"]); +Bezier("2",[A,B],[C,D]); -\vspace{30mm} +\vspace{20mm} \begin{layer}{150}{0} -\putnotese{50}{20}{bzd5e} -\putnotese{60}{5}{\input{Fig/checkbe6}} +\putnotese{60}{-10}{\scalebox{0.9}{ \input{Fig/checkbe3}}} \end{layer} -Bezier("d5e",[A,B,C],[[D],[E,F]],["Num=200","da"]); +%ベジェ曲線をつなげる -\vspace{35mm} +%Bezier("3",[A,B,C],[[D],[E,F]]); + +%\vspace{20mm} +%\begin{layer}{150}{0} +%\putnotese{60}{5}{ \input{Fig/checkbe4}} +%\end{layer} + +%D,B,E を1直線上にとると,滑らかにつながる +節点を増やす。2次と3次。 + +Bezier("3",[A,B,C],[[D],[E,F]]); + +\vspace{20mm} + +全て同じ次数の場合,次のようにしてもよい. + +Bezier("4", [A,B,C,D], [E,F,G,H,K,L] ); \begin{layer}{150}{0} -\putnotese{20}{32}{bz1} -\putnotese{15}{15}{\input{Fig/checkbe8}} +\putnotese{20}{2}{\input{Fig/checkbe7}} \end{layer} +\vspace{35mm} + +オプションの例 + +Bezier("5",[A,B,C],[[D],[E,F]],["Num=3"]); + +\hspace{20mm}\input{Fig/checkbe5} + +Bezier("6",[A,B,C],[[D],[E,F]],["Num=40","da"]); + +\hspace{20mm}\input{Fig/checkbe6} + Numを(ベクトルとして)区間ごとに与えることもできる。 Bezier("1", [A,B,C,D], [E,F,G,H,K,L] , [ "Num=[2,3,4]"]); -\vspace{30mm} - -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +\hspace{10mm} \input{Fig/checkbe8} +%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +\vspace{\baselineskip} \hypertarget{beziersmooth}{} -\item[関数] Beziersmooth(名前,節点リスト,[オプション] ) -\item[機能] 節点間を3次ベジエ曲線でスムーズに結んだ曲線を描く -\item[説明] 節点をはさむ制御点は1直線上にとる(したがって,1つは半自由点で,直線上しか動けない)。 +\item[関数] Beziersmooth(名前,節点リスト,[オプション] ) +\item[機能] 節点間を3次ベジェ曲線でスムーズに結んだ曲線を描く +\item[説明] 節点をはさむ制御点は1直線上にとる(したがって,1つは半自由点で,直線上しか動けない)。 制御点は自動的に配置される。その後,節点や制御点を動かして,描きたいものにする。 -例: +\vspace{\baselineskip} +【例】 \begin{layer}{150}{0} \putnotese{70}{25}{bz1} -\putnotese{40}{-5}{\input{Fig/checksm1}} +\putnotese{40}{-5}{ \input{Fig/checksm1}} \end{layer} Beziersmooth("1",[A,B,C,D]); \vspace{20mm} +その後,節点や制御点を動かして,描きたいものにする。ただし,C2p は C1q と B を通る直線上しか動けない。C3p は C2q と C を通る直線上しか動けない。 \begin{layer}{150}{0} \putnotese{70}{35}{bz1} -\putnotese{40}{10}{\input{Fig/checksm2}} +\putnotese{40}{10}{ \input{Fig/checksm2}} \end{layer} -その後,節点や制御点\\ -を動かして,描きたい\\ -ものにする。ただし,\\ -C2p は C1q と B を通\\ -る直線上しか動けない。\\ -C3p は C2q と C を通\\ -る直線上しか動けない。 - -\vspace{10mm} - +\vspace{40mm} +\vspace{\baselineskip} \hypertarget{beziersym}{} -\item[関数] Beziersym(名前,節点リスト,[オプション] ) -\item[機能] 節点間を3次ベジエ曲線でスムーズに結んだ曲線を描く -\item[説明] 節点をはさむ制御点は節点に関し対称(片方は表示されず,動かせない)。 +\item[関数] Beziersym(名前,節点リスト,[オプション] ) +\item[機能] 節点間を3次ベジェ曲線でスムーズに結んだ曲線を描く +\item[説明] 節点をはさむ制御点は節点に関し対称(片方は表示されず,動かせない)。 制御点は自動的に配置される。その後,節点や制御点を動かして描きたいものにする。 -例: +【例】 \begin{layer}{150}{0} \putnotese{70}{20}{bz1} -\putnotese{40}{-5}{\input{Fig/checksy1}} +\putnotese{40}{10}{ \input{Fig/checksy1}} +\putnotese{0}{5}{Beziersym("1",[A,B,C,D]);} +\putnotese{0}{15}{C2p と C3p は表示されない} \end{layer} -Beziersym("1",[A,B,C,D]);\\ -C2p と C3p は表示され\\ -ない。 +\vspace{50mm} -\vspace{10mm} +その後,節点や制御点を動かして,描きたいものにする。 + +C2p と C3p は表示されず,動かせない。 +\begin{center} \input{Fig/checksy2} \end{center} + +\vspace{\baselineskip} +\hypertarget{mkbeziercrv}{} +\item[関数] Mkbeziercrv(名前, [節点リスト,制御点リスト] のリスト,options ) +\item[機能] 複数のベジェ曲線を描く +\item[説明] [節点リスト,制御点リスト] が1つの場合は,Bezier()と同じ。 + +\vspace{\baselineskip} +【例】ベジェ曲線を2つ描く。 + +\verb|Mkbeziercrv("5",[[[A,B,C],[[D],[E,F]]],[[G,H,K,L],[[M],[N,O],[P]]]]);| + + \input{Fig/checkmc1} + +%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +\vspace{\baselineskip} +\hypertarget{mkbezierptcrv}{} +\item[関数] Mkbezierptcrv(節点リストptlist,[オプション] ) +\item[機能] ベジェ曲線を描く +\item[説明] 制御点は,自動的に配置される。 + +複数の場合は [ ptlist1, ptlist2.... ] + +名前は,A から順に自動的につける。 + +オプション + +"Deg=...” 次数指定ができる。( 初期設定は3次) + +"Num=..." 各区間の区間数(分点数ー1)を指定できる。( 初期設定は10) + +\vspace{5mm} + +【例】 \begin{layer}{150}{0} -\putnotese{70}{30}{bz1} -\putnotese{40}{0}{\input{Fig/checksy2}} +\putnotese{50}{15}{bzA} +\putnotese{50}{-5}{ \input{Fig/checkb8}} \end{layer} -その後,節点や制御点\\ -を動かして,描きたい\\ -ものにする。\\ -C2p と C3p は表示さ\\れず,動かせない。 - \\ -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +\verb|Mkbezierptcrv([A,B,C]);| -\hypertarget{bowdata}{} -\item[関数] Bowdata(点リスト , options) -\item[機能] 弓形を描く -\item[説明] 点リストで与えられた2点を結ぶ弓形を描く。\\ - 2点を反時計回りに回る方向に弓形を描く。\\ - optionsは,[曲がり , 空白サイズ , 文字, 線種]\\ - 曲がり は弧の曲がり具合の指定。デフォルトは1\\ - 空白サイズ は中央にあける空白の大きさ\\ - 文字は,"Expr=文字" \\ - また,"Expr=位置 , 文字" で位置を指定して文字を入れる。位置はe,w,n,s,c\\ - -例 三角形ABCの各辺に弓形マークをつけ記号を入れる。 -\begin{verbatim} - Listplot([A,B,C,A]); - Letter([A,"n1","A",B,"w1","B",C,"e1","C"]); - Bowdata([A,B]); - Bowdata([B,C],[1,"Expr=s3,a"]); - Bowdata([C,A],[2,1.2,"Expr=10","da"]); -\end{verbatim} - \input{Fig/bowdata}\\ - - 以上が基本。これに加え,文字を回転して表示する方法がある。\\ - ただし,Cinderellaの画面には反映されない。\\ - 文字をを回転するには次のように書く。\\ - "Exprrot=微小移動 , 文字"\\ - 微小移動は t , n ,u \\ - t は線分方向の微小移動。移動量は数字をつける。正負が可。\\ - n は線分と垂直方向の微小移動\\ - u は上下反転\\ - t , n , u は組み合わせることができる。 - 以下にいくつか例を示す。 -\begin{verbatim} - Bowdata([B,A],[1,1,"Exprrot=a"]); - Bowdata([D,C],[1,1,"Exprrot=t3,a"]); - Bowdata([F,E],[1,1,"Exprrot=t-3,a"]); - Bowdata([H,G],[1,1,"Exprrot=n3,a"]); - Bowdata([L,K],[1,1,"Exprrot=u,a"]); - Bowdata([N,M],[1,1,"Exprrot=t3u,a"]); -\end{verbatim} - \input{Fig/bowdata2}\\ - - -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +\vspace{25mm} + +\begin{layer}{150}{0} +\putnotese{50}{15}{bzA} +\putnotese{60}{-10}{ \input{Fig/checkb11}} +\end{layer} + +その後,節点や制御点を動かして, + +描きたいものにする。 + +\vspace{30mm} + +\begin{layer}{150}{0} +\putnotese{80}{25}{bzA} +\putnotese{50}{-5}{\input{Fig/checkb9}} +\end{layer} + +\verb|Mkbezierptcrv([A,B,C],["Deg=2"]);| +Deg=2 とすると2次になる。 + +制御点は各区間に1個ずつできる。 + +\vspace{20mm} + +\begin{layer}{150}{0} +\putnotese{20}{45}{bzA} +\putnotese{80}{45}{bzB} +\putnotese{0}{10}{ \input{Fig/checkb10}} +\end{layer} + +複数の場合は [ ptlist1, ptlist2.... ] + +\verb|Mkbezierptcrv([[A,B,C],[D,E,F,G]]);| + +\vspace{40mm} + + \vspace{\baselineskip} \hypertarget{bspline}{} -\item[関数] Bspline(名前,制御点リスト,[オプション] ) -\item[機能] 2次B-spline曲線を描く -\item[説明] 節点は自動的に計算され,表示されない\\ +\item[関数] Bspline(名前,制御点リスト,[オプション] ) +\item[機能] 2次B-spline曲線を描く +\item[説明] 節点は自動的に計算され,表示されない + + \vspace{\baselineskip} +【例】\verb|Bspline("1",[A,B,C,D,E])| + +これは, \verb|Bezier("1",[A,(B+C)/2,(C+D)/2,E],[B,C,D])| と同じ。曲線の名前が bz1 ではなくbzb1 となる。 +通常のB-spline曲線の端の制御点の代わりに,端点を動かせるようにしている。 -例:\verb|Bspline("1",[A,B,C,D,E]);|\\ - \verb|Bezier("1",[A,(B+C)/2,(C+D)/2,E],[B,C,D]);|\\ - と同じ。曲線の名前が bz1 ではなくbzb1 となる。\\ - 通常のB-spline曲線の端の制御点の代わりに,端点を動かせるようにしている。\\ - \input{Fig/checkbs1} + \begin{center} \input{Fig/checkbs1}\end{center} +【例】\verb|Bspline("1",[A,B,C,D,A]);| -例:\verb|Bspline("1",[A,B,C,D,A]);|\\ - リストの最初と最後が同じ場合は閉曲線になる。\\ - \verb|Bezier("1",[(D+A)/2,(A+B)/2,(B+C)/2,(C+D)/2,(D+A)/2],[A,B,C,D]);| と同じ。\\ - \\ - \input{Fig/checkbs2} - \\ - 参照:\hyperlink{ospline}{Ospline:大島のスプラインを描く} \\ +リストの最初と最後が同じ場合は閉曲線になる。 + + \verb|Bezier("1",[(D+A)/2,(A+B)/2,(B+C)/2,(C+D)/2,(D+A)/2],[A,B,C,D]);| + + と同じ。 + + \begin{center} \input{Fig/checkbs2}\end{center} +参照:\hyperlink{ospline}{Ospline:大島のスプラインを描く} + +\vspace{\baselineskip} \hypertarget{crspline}{} -\item[関数] CRspline(名前,節点リスト,[オプション] ) -\item[機能] 単独のCatmull-Rom スプライン曲線を描く +\item[関数] CRspline(名前,節点リスト,[オプション] ) +\item[機能] 単独のCatmull-Rom スプライン曲線を描く \item[説明] - 自由点は,節点のみで,制御点は節点から作られ移動はできない。\\ - オプションに,通常のオプションのほか,次の2つが使える。\\ - "size-$>$n" 画面上での線の太さを指定する。\\ - "pointsize-$>$n" 制御点の大きさを指定する。0のとき非表示となる。\\ - -例:\verb|CRspline("3",[A,B,C,D]);|\\ - \input{Fig/checkCR} - \\ +自由点は,節点のみで,制御点は節点から作られ移動はできない。 + +オプションに,通常のオプションのほか,次が使える。 + +\verb|size ->n| : 画面上での線の太さを指定する。 + +【例】\verb|CRspline("1",[A,B,C,D]);| + +\hspace{20mm} \input{Fig/checkCR} + +\vspace{\baselineskip} +\hypertarget{ospline}{} +\item[関数] Ospline(名前,制御点リスト,[オプション] ) +\item[機能] 大島のspline曲線を描く +\item[説明] 制御点を通るスプライン曲線を描く + +リストの最初と最後が同じ場合は閉曲線になる。 + +\vspace{\baselineskip} +【例】\verb|Ospline("1",[A,B,C,D,E]);| \verb|Ospline("1",[A,B,C,D,A]);| + + \input{Fig/ospline1} \input{Fig/ospline2} + +\vspace{\baselineskip} + スプライン曲線については次も参照されたい:\hyperlink{bspline}{Bspline:Bスプラインを描く} + + +\vspace{\baselineskip} \hypertarget{circledata}{} -\item[関数] Circledata(name,リスト,options) -\item[機能] 円または多角形を描く。 -\item[説明] 中心の点と,円周上の1点,または3点をリストで与えて円を描く。\\ - プロットデータの名前は,"cr" に引数の name を付加したものとなる。\\ - 中心と円周上の点を,座標ではなく幾何要素名で指定する場合は name は省略可。\\ - optionsは以下のものをリストで与える。省略した場合は実線で円が描かれる。 +\item[関数] Circledata(name,リスト,options) +\item[機能] 円または多角形を描く。 +\item[説明] 中心の点と,円周上の1点,または3点をリストで与えて円を描く。 + +中心と円周上の点を,座標ではなく幾何要素名で指定する場合は name は省略可。 + +optionsは以下のものをリストで与える。省略した場合は実線で円が描かれる。 \begin{tabbing} -1234567890123456789012\=\kill - "Rng=[$θ_1,θ_2$]" \>角$θ_1$から$θ_2$の範囲の弧を描く。角は弧度法で与える。\\ - "Num=分割数" \>円を描くときの分割数。値が小さい場合は多角形になる。\\ - 線種 \>"dr, n" , "da,m,n" , "do,m,n"\\ +1234\=567890123456789012\=\kill + \> "Rng=[$\theta_1,\theta_2$]" \>角$\theta_1$から$\theta_2$の範囲の弧を描く。角は弧度法で与える。\\ + \> "Num=分割数" \>円を描くときの分割数。値が小さい場合は多角形になる。\\ + \> 線種 \>"dr, n" , "da,m,n" , "do,m,n" +\end{tabbing} +\begin{tabbing} +1234\=56789012345678901234567890\=\kill + +【例】いろいろな円を描く。\\ + \>原点中心,半径2の円 \> \verb|Circledata("1",[[0,0],[2,0]]);|\\ + \>A中心,半径ABの円 \> \verb|Circledata([A,B]);|\\ + \>A中心,半径2の円 \> \verb|Circledata("1",[A,A+[2,0]]);|\\ + \>3点A,B,Cを通る円 \> \verb|Circledata([A,B,C]);|\\ + \>下図左より,オプションに "dr,2" , "da" , "do" をつけた場合。 +\end{tabbing} +\hspace{10mm} \input{Fig/circledata1} +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} + + \verb|Circledata([A,B,C]);| で,3点A,B,Cを通る円を描いたとき,できた円の中心は \verb|Pointdata("1",[crABCcenter]);| で作図できる。 + +\vspace{\baselineskip} +【例】A中心,半径AB,中心角60°の弧を描く。 + +\hspace{10mm} \verb|Circledata([A,B],["Rng=[0,pi/3]"]); | + +\vspace{\baselineskip} +【例】A中心,半径AB,中心角60°の扇型を描く。点A,B,Cを適当に取っておく。 + +\begin{verbatim} + th=arctan2(B-A); + C.xy=Rotatepoint(B,pi/3,A); + Circledata([A,B],[Assign("Rng=[th,th+pi/3]","th",th)]); + Listplot([B,A,C]); + Letter([A,"s","A",B,"e","B",C,"nw","C"]); +\end{verbatim} + +\begin{center} +\includegraphics[bb=0.00 0.00 180.01 177.01,width=4cm"] {Fig/circledata3.pdf}\hspace{12mm} \input{Fig/circledata2} +\end{center} + +1行目は,ABが$x$軸となす角を arctan2 関数 によって求めている。 + +\vspace{\baselineskip} +【例】弧を太く描く + + \verb|Circledata([C,D],["dr,3","Rng=[0,pi/3]"]);| + + 円はNが大きな値の正N多角形として描いている。optionの ["Num=数値"] によってその細かさを指定できる。Nの値が小さければ正多角形が描けることになる。 + +\vspace{\baselineskip} +【例】A中心,半径ABの円と,その円に内接する正六角形 +\begin{verbatim} + Circledata("1",[A,B]); + Circledata("2",[A,B],["Num=6"]); +\end{verbatim} +ここで,同じ[A,B]を使うため,nameを付与して区別する必要がある。(下図左) + +また,頂点の位置を変えるのであれば,Rng= オプションを使う。(下図右) + + \verb|Circledata("2",[A,B],["Num=6","Rng=[pi/6,13/6*pi]"]);| + +\hspace{10mm} \input{Fig/circledata4} +\hspace{5mm} \input{Fig/circledata5} + +%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} + +\vspace{\baselineskip} +\hypertarget{mkcircles}{} +\item[関数] Mkcircles() +\item[機能] すべての幾何円のPD を作成 +\item[説明] Cinderellaの「円を加える」ツール(3種類いずれでも)で描いたすべての円をそのままプロットデータとする。たとえば,中心A,円周上の点をBとした円を作ると,プロットデータcrABが作成される。その後,インスペクタで点Bの識別名を変更(たとえばQに)すると,プロットデータ名も変更される。円はすでに描かれていてもよい。 + +\vspace{\baselineskip} +\hypertarget{ellipseplot}{} +\item[関数] Ellipseplot(name,点リスト ,定義域, options) +\item[機能] 焦点と通る点を与えて楕円を描く。 +\item[説明] 点リストで2つの焦点と通る点を与える。点はCinderellaの幾何点が使える。 + + また,通る点のかわりに,焦点からの距離の和を実数で与えることもできる。 + + 実際には,媒介変数表示$x=a \cos \theta,y=b \sin \theta$ を,回転・平行移動して描いている。定義域はこのときの$t$の定義域で,省略も可能。省略したときの初期値は[-5,5] + +\vspace{\baselineskip} +【例】点A,Bを焦点とする楕円を描く。 + +\verb|Ellipseplot("1",[A,B,C]);| 点Cを通る楕円を描く。 + +\verb|Ellipseplot("1",[A,B,4]);| 焦点からの距離の和が4である楕円を描く。 + +\verb|Ellipseplot("1",[A,B,C],"[0,pi]");| 楕円の半分を描く。 + +\vspace{\baselineskip} +【例】Cinderellaの作図ツールを使う + +作図ツールに,焦点と通る点で楕円を描くもの,点の極線を描くツールがある。(モードメニュー / 直線 / 点の極線)これを利用すると,楕円上にとった点をインシデントにできるので,インタラクティブに図を変更することができる。このCinderellaの作図機能と合わせて,一方の焦点から出た光が楕円上で反射して他方の焦点に至る,という図を次のようにして描くことができる。 + +まず,3つの点,焦点A,Bと通る点Cを適当な位置に作図する。次に「焦点と通る点で決まる楕円」ツールを選び,点A,B,Cを順に指定すると,楕円が描かれる。 + +モードメニューの「直線」から「点の極線」を選び,点Cと楕円を順に指定すると接線が引かれる。 + +「垂線を加える」ツールを用いて,点Cで垂線,すなわち法線を引く。(下図) + +「点を加える」ツールを用いて,接線,法線上に適当に点を取る。(D,Eとなったとする) + +次のスクリプトを書いて実行すると,楕円に関して入射角と反射角が等しくなるように光が反射する様子を図にすることができる。 + +\vspace{\baselineskip} +\begin{layer}{150}{0} +\putnotese{75}{5}{ \includegraphics[bb=0 0 272.01 240.01, width=5cm]{Fig/ellipsecindy.pdf}} +\end{layer} +\hspace{50mm} + +\begin{verbatim} + Ellipseplot("1",[A,B,C]); + Lineplot([C,D]); + Lineplot([C,E]); + Arrowdata([A,C]); + Arrowdata([C,B]); + Anglemark([A,C,B]); + Expr([A,"s2","F_1",B,"s2","F_2"]); +\end{verbatim} +\vspace{\baselineskip} + \begin{center} \input{Fig/ellipseplot1}\end{center} + + また,接線,法線を描かず,この楕円上に点D,E,・・をとり(個数は任意)次のスクリプトを書けば,何本かの光線が一方の焦点を出て他方の焦点に集まる様子を描くことができる。 + +\begin{layer}{150}{0} + \putnotese{70}{0}{\scalebox{0.9}{ \input{Fig/ellipseplot2}}} +\end{layer} +\begin{verbatim} + Ellipseplot("1",[A,B,C]); + Listplot([A,C,B]); + Listplot([A,D,B]); + Listplot([A,E,B]); + Expr([A,"s2","F_1",B,"s2","F_2"]); +\end{verbatim} +\vspace{10mm} + +\hypertarget{hyperbolaplot}{} +\item[関数] Hyperbolaplot(name,点リスト ,定義域, options) +\item[機能] 焦点と通る点を与えて双曲線を描く。 +\item[説明] 点リストで2つの焦点と通る点を与える。点はCinderellaの幾何点が使える。 + +また,通る点のかわりに,焦点からの距離の差を実数で与えることもできる。 + +実際には,ハイパボリック関数を用いた媒介変数表示 $x=\cosh t,y=\sinh t$を回転・平行移動している。 + +optionとして,"Asy=線種" を与えると,漸近線を指定した線種で表示する。 初期設定では漸近線は非表示。 + +\vspace{\baselineskip} +【例】点A,Bを焦点とする双曲線を描く。 + +\verb|Hyperbolaplot("1",[A,B,C]);| 点Cを通る双曲線を描く。 + +\verb|Hyperbolaplot("1",[A,B,2]);| 焦点からの距離の差が2の双曲線を描く。 + +\verb|Hyperbolaplot("1",[A,B,C],["Asy=do"]);| 漸近線を点線で描く。 + +\vspace{\baselineskip} +\hspace{20mm} \scalebox{0.9}{\input{Fig/hyper1}} +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} + +\vspace{\baselineskip} +\hypertarget{parabolaplot}{} +\item[関数] Parabolaplot(name,点リスト ,定義域, options) +\item[機能] 点リスト[A,B,C]で示された焦点,準線で決まる放物線を描く。 +\item[説明] 焦点Aと準線BCで決定する放物線を描く。 + + 実際には,2次関数 $y=x^2$のグラフを回転・平行移動して描いており,定義域は,$y=x^2$での定義域と考えてよい。定義域は省略することもできる。省略したときの初期値は[-5,5] + +\vspace{\baselineskip} +【例】点Aを焦点,直線BCを準線とする放物線を描く + +\hspace{10mm}\verb|Parabolaplot("1",[A,B,C]); | + +定義域を $-4 \leq x \leq 4$ とする。 + +\hspace{10mm} \verb|Parabolaplot("1",[A,B,C],"[-4,4]");| + +点(0,1)を焦点,直線$y=-1$を準線とする放物線を描く + +\hspace{10mm} \verb|Parabolaplot("1",[[0,1],[-1,-1],[1,-1]]);| + +\vspace{\baselineskip} +【例】放物線上の2点で引かれた接線と放物線で囲まれた領域を斜線で描く。 + +Cinderellaの作図ツールに,焦点と準線で放物線を描くものがある。また,点の極線を描くツールがある。(モードメニュー / 直線 / 点の極線)これを利用すると,放物線上にとった点をインシデントにできるので,インタラクティブに図を変更することができる。このCinderellaの作図機能と合わせて,次の手順で図を描く。 + +まず,焦点A(0,1)と準線$y=-1$:BCを作図する。次に「焦点と準線で決まる放物線」ツールを選び,点Aと直線BCを指定すると,放物線が描かれる。方程式では$y=\dfrac{1}{4}x^2$の放物線である。 + +次に,放物線上に点D,Eをとる。Cinderellaの作図機能を用いているので,この2点は放物線上だけを動かすことができる。(インシデント) + +モードメニューの「直線」から「点の極線」を選び,点Dと放物線,点Eと放物線を順に指定すると接線が引かれる。その交点に点を取る。 + +\vspace{\baselineskip} +\begin{center} \includegraphics[bb=0 0 482.02 413.02 , width=6cm]{Fig/parabolaplot.pdf} \end{center} + +\vspace{\baselineskip} + 以上で作図ができたので,次のスクリプトを書いて実行する。 +\begin{verbatim} + Parabolaplot("1",[A,B,C]); + Lineplot([D,F]); + Lineplot([E,F]); + Hatchdata("1",["iii"],[["gr1para","s"],["lnEF","n"],["lnDF","n"]]); +\end{verbatim} + +これで,次図ができる。このあと,文字などは適当に追加する。 + +\vspace{\baselineskip} +\begin{center} \input{Fig/parabolaplot}\end{center} + +なお,Cinderellaの作図ツールで放物線を描かず,焦点Aと準線上の点B,Cだけを用意して,次のスクリプトで描くこともできる。 +\begin{verbatim} + Parabolaplot("1",[A,B,C]); + Putoncurve("D","gr1para"); + Putoncurve("E","gr1para"); + Tangentplot("1","gr1para","x="+D.x); + Tangentplot("2","gr1para","x="+E.x); + Hatchdata("1",["iii"],[["gr1para","s"],["lntn1","n"],["lntn2","n"]]); +\end{verbatim} + +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} + +%\vspace{\baselineskip} +\hypertarget{ovaldata}{} +\item[関数] Ovaldata(name, 点リスト,options) +\item[機能] 角を丸くした矩形を描く +\item[説明] 中心と対角の1点を指定し,角を丸くした矩形を描く + +optionsは,角の落とし具合と線種など。 初期設定は0.2 + +\vspace{\baselineskip} +【例】いくつかの例を示す。 +\begin{verbatim} + Ovaldata("1", [A,B]); + Ovaldata("2", [C,D],[0]); + Ovaldata("3", [E,F],[1,"dr,3"]); + Ovaldata("4", [G,H],[1.5,"da"]); +\end{verbatim} +\begin{center} \input{Fig/ovaldata}\end{center} + +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +%\newpage +\end{description} +% ====== 関数のグラフ ============== +\subsubsection{関数のグラフ} +\begin{description} + +\vspace{\baselineskip} +\hypertarget{plotdata}{} +\item[関数] Plotdata(name , 式 , 変数と定義域 , options) +\item[機能] 関数のグラフを描く。プロットデータの名前は,gr +\item[説明] 式で表された関数のグラフを,指定された定義域で描く。 + +式,定義域は " " でくくって文字列とする。定義域はx=に続いてリストで指定。 + +options は次の通り。 +\begin{tabbing} +12345678901234567890123\=\kill + 線種 \>"dr, n" , "da,m,n" , "do,m,n"\\ + "Num=数値" \>描画時の分割数\\ + "Dis=数値" \>値が指定数値以上ジャンプする場合は不連続点とみなす。\\ + "Exc=数値リスト \>リストで示された点は除外する。\\ + "Exc=関数" \>関数の零点は除外する。\\ + "Color=RGB" \>色指定。RGBはCMYKでもよい。 \end{tabbing} -例:原点中心,半径2の円を描く \verb|Circledata("1",[[0,0],[2,0]]);|\\ - A中心,半径ABの円 を描く \verb|Circledata([A,B]);|\\ - A中心,半径2の円 を描く \verb|Circledata([A,A+[2,0]]);|\\ - 3点A,B,Cを通る円を描く \verb|Circledata([A,B,C]);|\\ - この場合,できた円の中心を \verb|Pointdata("1",[crABCcenter]);| で\\ - 作図できる。\\ - 下図左より,A中心,半径ABの円 を\\ - 太さ2の実線で描く \verb|Circledata([A,B],["dr,2"]);|\\ - 破線で描く \verb|Circledata([A,B],["da"]);|\\ - 点線で描く \verb|Circledata([A,B],["do"]);|\\ - \\ -\input{Fig/circledata1} - \\ -例:A中心,半径AB,中心角60°の弧を描く。\\ - \verb|Circledata([A,B],["Rng=[0,pi/3]"]); |\\ - このとき,扇型を描くのであれば,2本の半径を引く必要がある。そのためには,Aが原点,Bがx軸上にあれば,点A,B以外にもうひとつ点Cをとり,その位置を CindyScript を用いて -\begin{verbatim} - C.xy=|A,B|*[cos(pi/3),sin(pi/3)] -\end{verbatim} - で指定し,扇型ができたのを確かめてから,\verb|Listplot([B,A,C])| を付加すればよい。\\ -\\ - \input{Fig/circledata2}\\ -\\ - 辺ABが$x$軸と平行でない場合は,角の範囲は0からではなく,ABが$x$軸となす角から始める必要があり,ちょっとした工夫が必要である。中心Aが原点でない場合も含め,次のようなスクリプトで実現できる。\begin{verbatim} - th=arctan2(B.xy-A.xy); - str="Rng=["+text(th+0)+","+text(th+pi/3)+"]"; - C.xy=A.xy+|A,B|*[cos(th+pi/3),sin(th+pi/3)]; - Circledata([A,B],[str]); - Listplot([B,A,C]); -\end{verbatim} -1行目は,ABが$x$軸となす角を arctan2 関数 によって求めている。\\ -2行目は引数の文字列を作っている。th+0 , th+pi/3 により弧度法にしている。ここで,+0 が必要である。\\ -\\ - \input{Fig/circledata3}\\ -\\ -複数のオプションをリストで与えることもできる。\\ + 【例】2次関数 $f(x)=x^2-2x$ のグラフを定義域指定なしで描く。 + +\hspace{10mm} \verb|Plotdata("1","x^2-2*x","x");| -例:弧を太く描く\\ - \verb|Circledata([C,D],["dr,3","Rng=[0,pi/3]"]);|\\ +\vspace{\baselineskip} +\hspace{20mm} \scalebox{0.9}{\input{Fig/plotdata1}} - 円はNが大きな値の正N多角形として描いている。optionの ["Num=数値"] によってその細かさを指定できる。Nの値が小さければ正多角形が描けることになる。\\ -例:A中心,半径ABの円と,その円に内接する正六角形 + \verb|Plotdata("1","x^2-2*x","x",["Color=[1,0,0]"]);| + +とすると赤で描かれる。 + +\vspace{\baselineskip} + 【例】三角関数 $2\sin \left(2x-\dfrac{\pi}{4} \right)$ のグラフを,定義域 $0 \leq x \leq 2 \pi$で描く。 + +\hspace{10mm} \verb|Plotdata("3","2*sin(2*x-pi/4)","x=[0,2*pi]");| + +\vspace{\baselineskip} +\hspace{20mm} \input{Fig/plotdata2} + +%\vspace{\baselineskip} + CindyScript では,plot( 式 , 定義域 ); で描くが, \ketcindy を用いるときは,CindyScript のplot 関数のかわりに,このPlotdata を使えばよい。 + +軸に数字を入れるのであれば,Letter() を用いる。 + +\vspace{\baselineskip} +optionsの使用例 +\begin{tabbing} +1234\=567890123456789012345678901234567890123456\=\kill + \> \verb|Plotdata("1","sin(x)+3","x");| \> 初期設定\\ + \> \verb|Plotdata("2","sin(x)+2","x",["dr,2"]);| \> 同じく,太さ2で描く\\ + \> \verb|Plotdata("3","sin(x)+1","x",["da"]);| \> 同じく,破線で描く\\ + \> \verb|Plotdata("4","sin(x)","x",["do"]);| \> 同じく,点線で描く + \end{tabbing} +結果は次図上から。 + +\vspace{\baselineskip} +\hspace{20mm} \scalebox{0.9}{\input{Fig/plotdata3}} + +Num=分割数の指定 + +グラフの描画は,区間を分割して関数値をとり,各点を結ぶという通常の方法によっている。Nの指定はこの分割数の指定である。 初期設定は50。思うような結果が得られない場合はこの値を大きく指定するとよい。下図左は 初期設定,右は Num=200。 + +\vspace{\baselineskip} +\hspace{20mm}\scalebox{0.8}{ \input{Fig/plotdata4}} + +不連続点の指定 + +Dis オプションにより,値がジャンプする不連続点を線で結ばないようにする。Numオプションと合わせて使うと効果が上がる。 + +\vspace{\baselineskip} + 【例】$f(x)=$tan$x$ のグラフは,そのままではあたかも漸近線が描かれたようになるが,これは,不連続点の前後をそのまま結んでいるためである。(下図左) \begin{verbatim} - Circledata("1",[A,B]); - Circledata("2",[A,B],["Num=6"]); + Plotdata("1","tan(x)","x",["Num=200","Dis=50"]); \end{verbatim} - \input{Fig/circledata4}\\ -ここで,同じ[A,B]を使うため,nameを付与して区別する必要がある。\\ -また,頂点の位置を変えるのであれば,Rng= オプションを使う。\\ - \verb|Circledata("2",[A,B],["Num=6","Rng=[pi/6,13/6*pi]"]);|\\ - \input{Fig/circledata5}\\ -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +のように,"Dis" オプションを使えば余分な線が描かれなくなる。(下図右) -\hypertarget{crosspoint}{} -\item[関数] Crosspoint(name , PD1 ,PD2 , 範囲) -\item[機能] 2曲線の交点を作る -\item[説明] 曲線1と曲線2の範囲にある交点を作る。曲線1と曲線2はプロットデータの名称。\\ -範囲は,交点が存在する範囲を指定する。\\ +\vspace{\baselineskip} +\hspace{20mm} \input{Fig/plotdatatan1}\hspace{20mm} \input{Fig/plotdatatan2} -例:3次曲線の接線がその曲線と交わる点を求める。\\ -2点A,Bを作図ツールで適当なところにとり,次のスクリプトで3次曲線を描く。 +\vspace{\baselineskip} +【例】ガウス記号 [$x$] で表される関数(床関数 : floor())のグラフ。 \begin{verbatim} - f(x):=x^3-4*x; - g(x):=d(f(#),A.x)*(x-A.x)+A.y; - A.y=f(A.x); - B.y=g(B.x); - Plotdata("1","f(x)","x"); - Lineplot([A,B]); + Plotdata("1","floor(x)","x",["Num=100","Dis=0.9"]); + Ptsize(3); + Drwxy(); + repeat(7,s,start -> -2, + Drwpt([s+1,s],0); + ); \end{verbatim} -1行目と2行目で3次曲線とその接線を定義し,点A,Bをその上に乗せている。\\ -Plotdata() と Lineplot() により,3次曲線と接線のプロットデータができる。\\ -それぞれの名称はコンソールに出力される。3次曲線は gr1 , 接線は lnAB である。\\ -また,図を見て,交点のある場所を確認して範囲を決める。\\ -プロットデータ名と範囲を用いて次のスクリプトを追加する。\\ - \verb|Crosspoint("C",gr1,lnAB,[1,2]);|\\ +\hspace{40mm}\input{Fig/plotdata5} -これで,交点Cが新たに作られる。\\ -必要に応じ,Letter関数で点の名前を表示すると次のようになる。\\ -\\ - \input{Fig/crosspoint}\\ - \\ -交点が存在しない場合,PD1の端点に点が作られる。\\ -2曲線の交点を作るのに,\hyperlink{putintersect}{Putintersect(点名,PD1,PD2)} 関数を用いることもできる。\\ -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +\vspace{\baselineskip} + 関数に文字係数がついており,文字係数の値を変化させながらグラフを描くには,Assign を使うか,Defvar で変数を定義する。 + +\vspace{\baselineskip} + 【例】直線 $y=bx-b^2$ の係数$b$を変化させて描き,包絡線をうかびあがらせる。 +\begin{verbatim} + repeat(50,t, + cb=t/5-5; + Plotdata(text(t),Assign("b*x-b^2","b",cb),"x"); + ); +\end{verbatim} +\begin{layer}{150}{0} +\putnotese{80}{0}{\input{Fig/assign}} +\end{layer} + +または +\begin{verbatim} + Defvar("b"); + repeat(50,t, + b=t/5-5; + Plotdata(text(t),"b*x-b^2","x"); + ); +\end{verbatim} + +\vspace{\baselineskip} +\hypertarget{implicitplot}{} +\item[関数] Implicitplot(name,式,xの定義域,yの定義域, options) +\item[機能] 陰関数のグラフを描く。 +\item[説明] 陰関数の式を与えてグラフを描く。式,定義域とも文字列。 + +options は,"r","m","Wait=n" が指定できる。Wait の初期値は10。 + +"r","m"に関しては,オプションなしのとき + + i) データファイルがなければ,新しく作る + + ii) データファイルが既にあればそれを読み込む + +"m" のとき,強制的にデータファイルを作り直す。 + +"r" のとき,すでにあるデータファイルを読み込む。 + +\vspace{\baselineskip} +【例】楕円を描く。 +\begin{verbatim} + Implicitplot("1","x^2-x*y+2*y^2=4","x=[-3,3]","y=[-2,2]"); +\end{verbatim} + +\vspace{\baselineskip} +\hspace{20mm}\input{Fig/implicit1} + +\vspace{\baselineskip} \hypertarget{deqplot}{} -\item[関数] Deqplot(name,式,変数名,初期値,options) -\item[機能] 微分方程式の解曲線を描く -\item[説明] 微分方程式と初期値を与えて解曲線を描く。\\ - \\ -例:$y''=-y$で,初期値が$x=0$のとき$y=1,y'=0$ の解曲線\\ +\item[関数] Deqplot(name,式,変数名,初期値,options) +\item[機能] 微分方程式の解曲線を描く +\item[説明] 微分方程式と初期値を与えて解曲線を描く。 - \verb|Deqplot("1","y``=-y","x",0, [1,0]); |\\ +\vspace{\baselineskip} +【例】$y''=-y$で,初期値が$x=0$のとき$y=1,y'=0$ の解曲線 - \input{Fig/deqplot1}\\ + \verb|Deqplot("1","y``=-y","x",0, [1,0]); | + +注) \verb|`| はバッククウォート。ここからカットアンドペーストするときは注意。 -例:$y'=y*(1-y)$で,$x=0$のとき,$y=0.5$の解曲線\\ +\vspace{\baselineskip} +\hspace{20mm} \input{Fig/deqplot1} - \verb|Deqplot("2","y`=y*(1-y)","x",0, 0.5,["Num=100"]);| \\ +\vspace{\baselineskip} +【例】$y'=y*(1-y)$で,$x=0$のとき,$y=0.5$の解曲線 + + \verb|Deqplot("2","y`=y*(1-y)","x",0, 0.5,["Num=100"]);| + +\vspace{\baselineskip} +\hspace{20mm} \input{Fig/deqplot2} - \input{Fig/deqplot2}\\ +\vspace{\baselineskip} -例:$[x,y]'=[x(1-y),0.3y(x-1)]$で,変数は$t$,$t=0$(区間の左端)のときの$x, y$の値が1と0.5 であるときの解曲線 +【例】$[x,y]'=[x(1-y),0.3y(x-1)]$で,変数は$t$,$t=0$(区間の左端)のときの$x, y$の値が1と0.5 であるときの解曲線 \begin{verbatim} - Deqplot("3","[x,y]`=[x*(1-y),0.3*y*(x-1)]","t=[0,20]", - [1,0.5],["Num=200"]); + Deqplot("3","[x,y]`=[x*(1-y),0.3*y*(x-1)]","t=[0,20]", + [1,0.5],["Num=200"]); \end{verbatim} - \\ - \input{Fig/deqplot3}\\ - \\ - なお,この例では,Cinderellaの画面上の図は誤差が大きくて正確な図にはならないが,\TeX に出力する図は正確な図になる。解像度を上げる(Numの数を大きくする)ことにより,Cinderellaの画面上の図も正確な図に近づく。\\ -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +\vspace{\baselineskip} +\hspace{20mm} \input{Fig/deqplot3} -\hypertarget{drwpt}{} -\item[関数] Drwpt(点,option), Drawpoint(点,options) -\item[機能] 点を表示する -\item[説明] 座標または幾何点の識別名を与えて点を表示する。これだけではCinderellaの描画面には描かれないので,描画面にも表示するにはCinderellaの作図ツールで作図するか,Pointdata() または Putpoint() を用いる。\\ - 複数の点の場合は座標または識別名はリストで与える。\\ - optionに数字 0 を入れると,白抜きで表示する。なお白抜きの場合は,Ptsize()で点の大きさを少し大きめにとるとよい。\\ - 可読性を高めるときはDrawpointを推奨する。\\ +\vspace{\baselineskip} +\hypertarget{paramplot}{} +\item[関数] Paramplot(name , 式 , 変数と定義域,options) +\item[機能] 媒介変数表示の曲線を描く。 +\item[説明] 式は""でくくった媒介変数表示のリストで与える。 + +定義域も " " でくくって文字列とし,t=に続いてリストで指定する。 + +options は線種が有効 -例:座標(1,1)と(4,3)に点を表示する。Cinderellaの描画面には描かれない。\\ - \verb|Drwpt([[1,1],[4,3]]);|\\ +\vspace{\baselineskip} +【例】サイクロイド曲線を描く。 -例:Cinderellaで点A,B,Cを作図しておき,\TeX で表示する。\\ - \verb|Drwpt([A,B,C]); |\\ +\hspace{10mm} \verb|Paramplot("1","[t-sin(t),1-cos(t)]","t=[0,2*pi]");| -例:線分ABの右端(B)を白抜きで表示する +\vspace{\baselineskip} +\hspace{20mm} \input{Fig/paramplot1} + +\vspace{\baselineskip} +【例】optionsの使用例。左から, 初期設定,太線,破線,点線の楕円 \begin{verbatim} - Ptsize(5); - Listplot([A,B]); - Drawpoint(B,0); + Paramplot("1","[2*cos(t)-5,sin(t)]","t=[0,2*pi]"); + Paramplot("2","[2*cos(t),sin(t)]","t=[0,2*pi]",["dr,2"]); + Paramplot("3","[2*cos(t)+5,sin(t)]","t=[0,2*pi]",["da"]); + Paramplot("4","[2*cos(t)+10,sin(t)]","t=[0,2*pi]",["do"]); \end{verbatim} - \\ - \input{Fig/drawpoint}\\ -※ Drawpoint([A,B],0); とすれば,両端が白抜きになる。\\ -\\ -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +\begin{center} \input{Fig/paramplot2} \end{center} + +%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} + +\vspace{\baselineskip} +\hypertarget{polarplot}{} +\item[関数] Polarplot(name , 式 , 変数と定義域,options) +\item[機能] 極座標表示$r=f(\theta)$の曲線を描く。 + +\vspace{\baselineskip} +【例】カージオイド曲線を描く。 + +\hspace{20mm}\verb|Polarplot("1","2*(1+cos(t))","t=[0,2*pi]",["Num=200"]);| + +\vspace{\baselineskip} +\begin{center}\scalebox{0.9}{\input{Fig/cardioid1}}\end{center} + +\vspace{\baselineskip} +\hypertarget{periodfun}{} +\item[関数] Periodfun(定義式,周期,options) +\item[機能] 周期関数のグラフを描く。戻り値はMaxima形式の式とperiodのリスト。 +\item[説明] 周期関数の式を定義してグラフを描く。 +定義式は,関数式(文字列),区間,分割数のリスト。 + +この関数固有のオプションは "Con=" で,不連続点を線で結ぶか否かと,その時の色。 + 初期設定は破線。結ばない場合は "Con=n",色指定は線種に続いてコンマで区切って指定する。たとえば,"Con=do,Color=red"。 + +周期(描画回数)は,数またはリストで指定する。周期がmのとき,2m+1周期分描かれる。 + + +注意)関数は左右対称な定義域 [-a,a] で定義すること。 + +\vspace{\baselineskip} +【例】矩形関数のグラフ -\hypertarget{drawsegmark}{} -\item[関数] Drawsegmark(name,リスト,options)または Segmark(name,リスト,options) -\item[機能] 線分に印をつける -\item[説明] リストで与えられた2点を端点とする線分に印をつける。印には4種類がある。\\ - optionsは,\\ - Type=n:n=1〜4:印の種類\\ - Width:二本線のときの線の幅\\ - 例:Listplot()で四角形ABCDを描き線分に印をつけた。 \begin{verbatim} - Segmark("1",[A,B],["Type=1"]); - Segmark("2",[B,C],["Type=2","Width=1.5"]); - Segmark("3",[C,D],["Type=3"]); - Segmark("4",[D,A],["Type=4"]); + defL=["0",[-1,0],1,"1",[0,1],1]; + Periodfun(defL, 2,["dr,2"]); + memori=apply(-5..5,x,[x,text(x)]); + memori=flatten(remove(memori,[[0,"0"]])); + Htickmark(memori); + Vtickmark([1,"1"]); \end{verbatim} - \input{Fig/segmark} -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +\hspace{20mm}\input{Fig/periodfun.tex} -\hypertarget{expr}{} -\item[関数] Expr([座標 , 位置 , 文字列]) -\item[機能] \TeX 記法の文字列を与えて数式を書く。 -\item[説明] Letterで文字列の前後に\$ \$をおくのと同じ。\\ - 導関数の記号(シングルクウォート)$'$は,Scilab でのシングルクウォートの使用とぶつかるので,$`$(バッククウォート)を用いる。\\ - 複数の箇所に文字を書く場合は,Letter() と同様,引数をリストにして与える。\\ +\vspace{\baselineskip} +一方を放物線にした場合 +\begin{verbatim} + defL=["0",[-1,0],1,"x^2",[0,1],50]; + Periodfun(defL, 2, ["Con=n","dr,2"]); + memori=apply(-5..5,x,[x,text(x)]); + memori=flatten(remove(memori,[[0,"0"]])); + Htickmark(memori); + Vtickmark([1,"1"]); +\end{verbatim} -例 $f(x)=\dfrac{1}{4} x^2$ とその導関数 $f'(x)=\dfrac{1}{2} x$ の式,軸上に必要な数を入れる。 +\hspace{20mm}\input{Fig/periodfun2.tex} + +\vspace{\baselineskip} +\hypertarget{fourierseries}{} +\item[関数] Fourierseries(name,係数,周期,項数) +\item[機能] フーリエ級数のグラフを描く。 +\item[説明] $a_0+\displaystyle{\sum _{n=1} ^{\infty}(a_n \cos nx + b_n \sin nx)}$ を描く。 +係数は $a_0,a_n,b_n$ のリストで,それぞれの要素は文字列とする。 + +この関数固有のオプションは "Con=y/n" で,不連続点を破線で結ぶか否か。 初期設定は y。 + +矩形波のフーリエ近似のような場合は,オプションとして,["Num=200"](100以上の値を指定)をつけるとよい。 + +\vspace{\baselineskip} +【例】矩形波のフーリエ近似 \begin{verbatim} - Expr([[-3,3],"e","f(x)=\frac{1}{4} x^2",[3,1.5],"s2e2", - "f‘(x)=\frac{1}{2}x",[2,0],"s","2",[0,1],"w","1"]); + Fourierseries("1",["1/2","0","(1-(-1)^n)/(pi*n)"],2,6,["Num=200"]); \end{verbatim} - \\ - \input{Fig/expr}\\ - ※原点Oが線と重なっている。位置をずらすには,Setax() の項を参照のこと。\\ +\begin{center} +\input{Fig/fourierseries.tex} +\end{center} + +\vspace{\baselineskip} +\hypertarget{tangentplot}{} +\item[関数] Tangentplot(name , PD , 位置 , options) +\item[機能] 接線を描く。プロットデータの名前は,lntn +\item[説明] 曲線PDの指定した位置での接線を描く。位置は "x=n" で指定する。 + +使用例は\hyperlink{parabolaplot}{Parabolaplot}の例を参照。 + +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -例 対数関数の定積分の記号および積分値を図に書き込む。\\ - 下図で,定積分の表示の部分は矢線をPQとして, +\end{description} +%\newpage +% ====== 文字 ============== +\subsubsection{文字} +\begin{description} + +\vspace{\baselineskip} +\hypertarget{expr}{} +\item[関数] Expr([座標 , 位置 , 文字列]) +\item[機能] \TeX 記法の文字列を与えて数式を書く。 +\item[説明] Letterで文字列の前後に\$ \$をおくのと同じ。 + +導関数の記号は,$'$(シングルクウォート)を用いる。 + +複数の箇所に文字を書く場合は,Letter() と同様,引数をリストにして与える。 + +\vspace{\baselineskip} +【例】 $f(x)=\dfrac{1}{4} x^2$ とその導関数 $f'(x)=\dfrac{1}{2} x$ の式,軸上に必要な数を入れる。 \begin{verbatim} - Arrowdata(Q,P); - Expr([Q+[0.2,0],"ne","\displaystyle \int_a^b \log x\,dx="+ - text(L.x*(log(L.x)-1)-G.x*(log(G.x)-1)) ]); + Expr([[-3,3],"e","f(x)=\frac{1}{4} x^2",[3,1.5],"s2e2", + "f‘(x)=\frac{1}{2}x",[2,0],"s","2",[0,1],"w","1"]); \end{verbatim} - で表示している。\\ - \verb|L.x*(log(L.x)-1)-G.x*(log(G.x)-1)| は,点L,G(図の$a,b$)をドラッグして\\ - 積分範囲を決めるようにしているので,そこから計算した値。\\ -\\ +\vspace{\baselineskip} + \begin{center} \input{Fig/expr}\end{center} - \input{Fig/intlog} +【例】 対数関数の定積分の記号および積分値を図に書き込む。 +\begin{verbatim} + Expr([Q+[0.2,0],"ne","\displaystyle \int_a^b \log x\,dx="+ + text(L.x*(log(L.x)-1)-G.x*(log(G.x)-1)) ]); +\end{verbatim} + + \verb|L.x*(log(L.x)-1)-G.x*(log(G.x)-1)| は,点L,G(図の$a,b$)をドラッグして + + 積分範囲を決めるようにしているので,そこから計算した値。 + + 矢線は \verb| Arrowdata(Q,P); | で表示している。矢線の始点がQ +\vspace{\baselineskip} +\begin{center} \input{Fig/intlog}\end{center} + +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +\vspace{\baselineskip} \hypertarget{exprrot}{} -\item[関数] Exprrot([座標 , 向き , 文字列]) -\item[機能] \TeX 記法の文字列を与えて傾いた数式を書く。 -\item[説明] 「座標」の位置に,指定された向きで数式を書く。\\ - 向きはベクトルで与える。\\ - 座標,向きとも,Cinderellaで作図した幾何点を用いることができる。\\ - A(1,1),B(3,2),C(0,2) のとき,次の2つのスクリプトは同じ結果になる。 +\item[関数] Exprrot([座標 , 向き , 方向,文字列]) +\item[機能] \TeX 記法の文字列を与えて傾いた数式を書く。 +\item[説明] 「座標」の位置に,指定された向きで数式を書く。 + +向きはベクトルで与える。 + +方向はオプションで, t (ベクトルと同じ向き) と n(ベクトルと垂直な向き) の両方を数字つきで与える。ただし,方向はオプション。 + +座標,向きとも,Cinderellaで作図した幾何点を用いることができる。 + \begin{verbatim} - Exprrot(C,B-A,"\sqrt{3}"); - Exprrot([0,2],[2,1],"\sqrt{3}"); + Exprrot([3,2],[2,-1],"t0n1","\sqrt{3}"); + Exprrot(C,B-A,"\frac{2}{3}"); \end{verbatim} - \\ -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +\vspace{\baselineskip} +\hspace{10mm}\includegraphics[bb=0.00 0.00 181.01 131.01,width=4cm]{Fig/exprrot.pdf} \hspace{10mm} \input{Fig/exprrot} -\hypertarget{ellipseplot}{} -\item[関数] Ellipseplot(name,点リスト ,定義域, options) -\item[機能] 焦点と通る点を与えて楕円を描く。 -\item[説明] 点リストで2つの焦点と通る点を与える。点はCinderellaの幾何点が使える。\\ - また,通る点のかわりに,焦点からの距離の和を実数で与えることもできる。\\ - 実際には,媒介変数表示$x=a \cos \theta,x=b \sin \theta$ を,回転・平行移動して描いている。定義域はこのときの$t$の定義域で,省略も可能。省略したときの初期値は[-5,5]\\ - -例:点A,Bを焦点とする楕円を描く。\\ - \verb|Ellipseplot("1",[A,B,C]);| 点Cを通る楕円を描く。\\ - \verb|Ellipseplot("1",[A,B,4]);| 焦点からの距離の和が4である楕円を描く。\\ - \verb|Ellipseplot("1",[A,B,C],"[0,pi]");| 楕円の半分を描く。\\ - \\ -例:Cinderellaの作図ツールに,焦点と通る点で楕円を描くものがある。また,点の極線を描くツールがある。これを利用すると,楕円上にとった点をインシデントにできるので,インタラクティブに図を変更することができる。このCinderellaの作図機能と合わせて,一方の焦点から出た光が楕円上で反射して他方の焦点に至る,という図を次のようにして描くことができる。\\ - まず,3つの点A,B,Cを作図する。次に「焦点と通る点で決まる楕円」ツールを選び,点A,B,Cを順に指定すると,楕円が描かれる。\\ - - モードメニューの「直線」から「点の極線」を選び,点Cと楕円を順に指定すると接線が引かれる。\\ - 「垂線を加える」ツールを用いて,点Cで垂線,すなわち法線を引く。\\ - 「点を加える」ツールを用いて,接線,法線上に適当に点を取る。(D,Eとなったとする)\\ - 次のスクリプトを書いて実行すると,楕円に関して入射角と反射角が等しくなるように光が反射する様子を図にすることができる。 -\begin{verbatim} - Ellipseplot("1",[A,B,C]); - Lineplot([C,D]); - Lineplot([C,E]); - Arrowdata([A,C]); - Arrowdata([C,B]); - Anglemark([A,C,B]); - Expr([A,"s2","F_1",B,"s2","F_2"]); -\end{verbatim} - \\ - \input{Fig/ellipseplot1}\\ - - また,接線,法線を描かず,この楕円上に点D,E,・・をとり(個数は任意)次のスクリプトを書けば,何本かの光線が一方の焦点を出て他方の焦点に集まる様子を描くことができる。 -\begin{verbatim} - Ellipseplot("1",[A,B,C]); - Listplot([A,C,B]); - Listplot([A,D,B]); - Listplot([A,E,B]); - Expr([A,"s2","F_1",B,"s2","F_2"]); -\end{verbatim} - \\ - \input{Fig/ellipseplot2}\\ - \\ +\vspace{\baselineskip} +\hypertarget{letter}{}\item[関数] Letter([位置, 方向, 文字列]) +\item[機能] 文字列を表示する +\item[説明] 「位置(座標)」と方向で指定された場所に文字を書き込む。 -\hypertarget{framedata}{} -\item[関数] Framedata(name , リスト) -\item[関数] Framedata2(name ,[P1,P2]) -\item[機能] 矩形を描く -\item[説明] 中心の座標,横,縦をリスト[中心 ,横 , 縦]で与え,矩形を描く。横,縦は中心からの距離。\\ - 中心の座標は点の名前でもよい。\\ - 中心を座標で与える場合はnameは省略できない。\\ - 横,縦は,矩形の頂点を示す点にすることもできる。\\ - 中心,横,縦を省略した場合は,描画範囲と同一の矩形を描く\\ - Framedata2() では,対角点(左下P1と右上P2)をリストで与える。\\ - 以下にいくつか例を示す\\ - \verb|Framedata("1");| 描画範囲と同一の矩形を描く\\ - \verb|Framedata("2",[[0,0],2,2]);| 原点を中心とする縦横幅4の正方形を描く\\ - \verb|Framedata("3",[A,3,2]);| 点Aを中心とする横6,縦4の矩形を描く\\ - \verb|Framedata([A,3,2]);| 中心が点の名称の場合はnameは省略できる。\\ - \verb|Framedata([A,B]);| 点Aを中心,点Bを頂点のひとつとする矩形を描く\\ - 矩形の角を丸めたい場合は,Ovaldata(name, 点リスト,options)を使う。\\ - \verb|Framedata2("1",[A,B]);| 点A,Bを対角点とする矩形を描く\\ - \\ +位置(座標)は点の名前で指定することもできる。 -\hypertarget{hyperbolaplot}{} -\item[関数] Hyperbolaplot(name,点リスト ,定義域, options) -\item[機能] 焦点と通る点を与えて双曲線を描く。 -\item[説明] 点リストで2つの焦点と通る点を与える。点はCinderellaの幾何点が使える。また,通る点のかわりに,焦点からの距離の差を実数で与えることもできる。\\ - 実際には,ハイパボリック関数を用いた媒介変数表示 $x=\cosh t,y=\sinh t$を回転・平行移動している。 - optionとして,"Asy=線種" を与えると,漸近線を指定した線種で表示する。デフォルトでは漸近線は非表示。\\ +場所は上下左右を東西南北で表し, n/s/w/e/c の方向で表す。cは中央。 -例:点A,Bを焦点とする双曲線を描く。\\ - \verb|Hyperbolaplot("1",[A,B,C]);| 点Cを通る双曲線を描く。\\ - \verb|Hyperbolaplot("1",[A,B,2]);| 焦点からの距離の差が2の双曲線を描く。\\ - \verb|Hyperbolaplot("1",[A,B,C],["Asy=do"]);| 漸近線を点線で描く。\\ +% \begin{center} \input{Fig/letter4} +指定位置からの距離を,数値で与えることもでき,e2, e3 は e より少し離して置く。 - \input{Fig/hyper1}\\ +複数の文字列をリストの形にして渡すことができる。 -\hypertarget{ospline}{} -\item[関数] Ospline(名前,制御点リスト,[オプション] ) -\item[機能] 大島のspline曲線を描く -\item[説明] 制御点を通るスプライン曲線を描く\\ - リストの最初と最後が同じ場合は閉曲線になる。\\ + 注)導関数の記号$'$は,数式モード(\$ ではさむ)で$'$(シングルクウォート)を用いる。 +\vspace{\baselineskip} +【例】 -例:\verb|Ospline("1",[A,B,C,D,E]);| \verb|Ospline("1",[A,B,C,D,A]);|\\ - \input{Fig/ospline1} \input{Fig/ospline2} - \\ - 参照:\hyperlink{bspline}{Bspline:Bスプラインを描く} \\ +座標 (2,1) の南東にPを表示 -\hypertarget{parabolaplot}{} -\item[関数] Parabolaplot(name,点リスト ,定義域, options) -\item[機能] 点リスト[A,B,C]で示された焦点,準線で決まる放物線を描く。 -\item[説明] 焦点Aと準線BCで決定する放物線を描く。\\ - 実際には,2次関数 $y=x^2$のグラフを回転・平行移動して描いており,定義域は,$y=x^2$での定義域と考えてよい。定義域は省略することもできる。省略したときの初期値は[-5,5]\\ - -例:点Aを焦点,直線BCを準線とする放物線を描く\\ - \verb|Parabolaplot("1",[A,B,C]); |\\ - \verb|Parabolaplot("1",[A,B,C],"[-5,5]");| 定義域を $-5 \leq x \leq 5$ とする。\\ - 点(0,1)を焦点,直線$y=-1$を準線とする放物線を描く\\ - \verb|Parabolaplot("1",[[0,1],[-1,-1],[1,-1]]);|\\ - \\ -例:放物線上の2点で引かれた接線と放物線で囲まれた領域を斜線で描く。\\ - Cinderellaの作図ツールに,焦点と準線で放物線を描くものがある。また,点の極線を描くツールがある。これを利用すると,放物線上にとった点をインシデントにできるので,インタラクティブに図を変更することができる。このCinderellaの作図機能と合わせて,次の手順で図を描く。\\ - まず,焦点A(0,1)と準線$y=1$:BCを作図する。次に「焦点と準線で決まる放物線」ツールを選び,点Aと直線BCを指定すると,放物線が描かれる。方程式では$y=\dfrac{1}{4}x^2$の放物線である。\\ - 次に,放物線上に点D,Eをとる。Cinderellaの作図機能を用いているので,この2点は放物線上だけを動かすことができる。(インシデント)\\ - モードメニューの「直線」から「点の極線」を選び,点Dと放物線,点Eと放物線を順に指定すると接線が引かれる。その交点に点を取る。\\ - \\ - \includegraphics[bb=0 0 964 826 , width=6cm]{Fig/parabolaplot.png}\\ - \\ - 以上で作図ができたので,次のスクリプトを書いて実行する。 -\begin{verbatim} - Parabolaplot("1",[A,B,C]); - Lineplot([D,F]); - Lineplot([E,F]); - Listplot([E,F,D]); - Hatchdata("1",["ii"],[["gr1para","s"],["sgEFD","n"]]); -\end{verbatim} - \\ - これで,次図ができる。このあと,文字などは適当に追加する。\\ - \\ - \input{Fig/parabolaplot} - \\ -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} - \\ -\hypertarget{ovaldata}{} -\item[関数] Ovaldata(name, 点リスト,options) -\item[機能] 角を丸くした矩形を描く -\item[説明] 中心と対角の1点を指定し,角を丸くした矩形を描く\\ - optionsは,角の落とし具合と線種など。デフォルトは0.2 \\ +\hspace{10mm} \verb|Letter([[2,1] ,"se","P"]);| + +点Cを中央としてCを表示 + +\hspace{10mm} \verb|Letter([C ,"c", "C"]);| + +点Aの南西にA,Eの南に数式を表示 + +\hspace{10mm} \verb|Letter([A,"sw","A",E,"s","$ f(x)=\frac{1}{4} x^2 $"]);| + +\vspace{\baselineskip} +\hypertarget{letterrot}{}\item[関数] Letterrot(座標, 方向ベクトル,移動量, 文字列) +\item[機能] 文字列を回転して表示する +\item[説明] 座標で示された位置に,方向ベクトルで指定された向きに回転して文字を書き込む。 + +第3引数は微小移動量で,略すこともできる。 -例:いくつかの例を示す。 \begin{verbatim} - Ovaldata("1", [A,B]); - Ovaldata("2", [C,D],[0]); - Ovaldata("3", [E,F],[1,"dr,3"]); - Ovaldata("4", [G,H],[1.5,"da"]); + Letterrot(C,B-A,"t2n5","AB"); \end{verbatim} - \input{Fig/ovaldata}\\ - \\ -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -\hypertarget{htickmark}{} -\item[関数] Htickmark([横座標 , 方向 , 文字]) -\item[機能] 横軸に目盛を書く。 -\item[説明] Scilabのみで実行する。Cinderellaの描画面には反映されない。引数は位置(横座標),方向,文字。複数点の情報を[ ]内にまとめて記入できる。\\ +移動量を略して + +\hspace{10mm} \verb|Letterrot(C,B-A,"AB");| -例 点$(2,\ 0)$の南西側に$2$を表示する。\\ - \verb|Htickmark([2,"sw","2"]);|\\ +とすることもできる。この場合は,微小な移動はされない。 -例 -5から5までの目盛を打つ。\\ - Cindyscriptのリスト処理を使って,次のように引数のリストを作って渡す。 +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} + +\newpage +\end{description} +% ====== マーキング ============== +\subsubsection{マーキング} +\begin{description} + +\hypertarget{anglemark}{} +\item[関数] Anglemark(name,点リスト , options) +\item[機能] 点リストで示された角に弧の形状の角の印をつける。 +\item[説明] Listplot() などと同様,点リストが点名の場合はnameは省略できる。 + +optionsは次の通り。 + +数値 角の印の大きさ。 初期設定は1 + +線種 "dr, n" , "da,m,n" , "do,m,n" + +"Expr=文字" : 文字を入れる + +"Expr=位置 , 文字" : 位置を指定して文字を入れる。位置は頂点からの距離。 + +\vspace{\baselineskip} +【例】三角形の内角に印をいれ,文字を書き込む。 \begin{verbatim} - memori=apply(-5..5,x,[x,"s",text(x)]); - memori=flatten(remove(memori,[[0,"s","0"]])); - Htickmark(memori); + Listplot([A,B,C,A]); + Letter([A,"n1","A",B,"w1","B",C,"e1","C"]); + Anglemark([B,A,C]); + Anglemark([C,B,A],["Expr=\theta"]); + Anglemark([A,C,B],[2,"dr,3","Expr=2,\alpha"]); \end{verbatim} - 1行目,apply のカッコ内の -5..5 でリスト[-5,-4,-3,-2,-1,0,1,2,3,4,5] ができる。\\ - それを用いて,applyで[数, "s",数の文字] からなるリストができる。text(x) はxを文字にする関数。\\ - 2行目で,このリストから,[0,"s","0"]を除き,リストを平滑化する。\\ - 結果は次のようになる。\\ -\input{Fig/htickmark}\\ +\hspace{20mm}\input{Fig/anglemark} -\hypertarget{vtickmark}{} -\item[関数] Vtickmark([横座標 , 方向 , 文字]) -\item[機能] 縦軸に目盛を書く。 -\item[説明] Htickmarkと同様。縦軸に目盛を書く。\\ +※角の印には平行四辺形の形状のものもある。\hyperlink{paramark}{Paramark()}を参照のこと。 -例:点$(0,\ 1),\ (0,\ 2)$の西側に$1,\ 2$を表示する。\\ - \verb|Htickmark([1,"w","1",2,"w","2"]);|\\ -\\ +\vspace{\baselineskip} +\hypertarget{paramark}{} +\item[関数] Paramark(name,点リスト , options) +\item[機能] 点リストで示された角に平行四辺形の形状の角の印をつける。 +\item[説明] Listplot() などと同様,点リストが点名の場合はnameは省略できる。 -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +optionsは次の通り。 -\hypertarget{implicitplot}{} -\item[関数] Implicitplot(name,式,xの定義域,yの定義域, options) -\item[機能] 陰関数のグラフを描く。 -\item[説明] 陰関数の式を与えてグラフを描く。式,定義域とも文字列。\\ - options は,"r","m","Wait=n" が指定できる。Wait の初期値は10。\\ - "r","m"に関しては,オプションなしまたは,”” のとき\\ - i) データファイルがなければ,新しく作る\\ - ii) データファイルが既にあればそれを読み込む\\ - "m" のとき,強制的にデータファイルを作り直す。\\ - "r" のとき,すでにあるデータファイルを読み込む。\\ - -例:楕円を描いて,中にハッチをかける。 -\begin{verbatim} - Implicitplot("1","x^2+2*y^2=4","x=[-2,2]","y=[-2,2]"); - Hatchdata("1","i",["imp1"]); -\end{verbatim} - 注)ここで,yの定義域は実際より広くとってある。"y=[-1,1]" とすると,上下が欠けた楕円になる。曲線だけならそれでよいが,その場合,閉曲線ではないのでHatchdata() で無用に時間がかかってしまうので要注意。\\ - \\ - -\hypertarget{letter}{}\item[関数] Letter([位置, 方向, 文字列]) -\item[機能] 文字列を表示する -\item[説明] 「位置(座標)」と方向で指定された場所に文字を書き込む。\\ - 位置(座標)は点の名前で指定することもできる。場所は上下左右中央( n/s/w/e/c )の方向で表す。(n/s/w/e は東西南北の記号)\\ - \\ - \input{Fig/letter4}\\ - 指定位置からの距離を,数値で与えることもでき,e2, e3 は e より少し離して置く。\\ - 複数の文字列をリストの形にして渡すことができる。\\ - 注)導関数の記号$'$は,数式モード(\$ ではさむ)で$`$(バッククウォート)を用いる。\\ - -例:座標 (2,1) の南東にPを表示\\ - \verb|Letter([2,1] ,"se","P");|\\ - 点Cを中央としてCを表示\\ - \verb|Letter(C ,"c", "C");|\\ - 点Aの南西にA,Eの南に数式を表示\\ - \verb|Letter([A,"sw","A",E,"s","$ f(x)=\frac{1}{4} x^2 $"]);| \\ - \\ -%\input{Fig/letter3} - -\hypertarget{letterrot}{}\item[関数] Letterrot(座標, 方向ベクトル,移動量, 文字列) -\item[機能] 文字列を回転して表示する -\item[説明] 座標で示された位置に,方向ベクトルで指定された向きに回転して文字を書き込む。\\ - 第3引数は微小移動量で,略すこともできる。\\ - A(1,1),B(3,2),C(0,2) のとき,次のスクリプトは同じ結果になる。 -\begin{verbatim} - Letterrot([0,2],[2,1],2,5,"AB"); - Letterrot([0,2],B-A,2,5,"AB"); - Letterrot(C,B-A,2,5,"AB"); - Letterrot(C,B-A,"t2n5","AB"); -\end{verbatim} - 移動量を略して\\ - \verb|Letterrot(C,B-A,"AB");|\\ - とすることもできる。この場合は,微小な移動はされない。\\ - - -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +数値 角の印の大きさ。 初期設定は1 -\hypertarget{lineplot}{} -\item[関数] Lineplot(name , 2点のリスト , options) -\item[機能] 2点のリストで示された点を結ぶ直線を描く。プロットデータ名の頭部は ln -\item[説明] 2点のリストは座標または幾何要素の名前で与える。\\ - options は次の通り。\\ - 線種 "dr, n" , "da,m,n" , "do,m,n"\\ - "+" 半直線を描く。\\ - "dr" , "da" , "do" と "+" はリストにして両方指定することができる。\\ - 点のリストが,座標ではなく幾何要素名のリストの場合は,nameは省略できる。\\ - いくつか例を示す。\\ - 各座標を結ぶ直線を引く\\ - \verb|Lineplot("1",[[0,0],[1,2]])| \\ - Cinderellaの描画ツールで2点A,Bをとっておき,直線ABを引く\\ - \verb|Lineplot([A,B]);| \\ - optionの働きの例\\ - \verb|Lineplot([A,B],["dr,0.5","+"]);| Aを端点とする半直線を引く\\ - \verb|Lineplot([C,D],["dr,2"]);| 直線CDを太さ2で描く\\ - \verb|Lineplot([E,F],["da"]);| 直線EFを破線で描く\\ - \verb|Lineplot([G,H],["do"]);| 直線GHを点線で描く\\ - 結果は,次図左上から。\\ - - \input{Fig/lineplot}\\ - -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -\newpage +線種 "dr, n" , "da,m,n" , "do,m,n" -\hypertarget{listplot}{} -\item[関数] Listplot(name , 点のリスト , options) -\item[機能] 点のリストで示された点を結ぶ。プロットデータ名の頭部は sg -\item[説明] 点のリストは座標または幾何要素名のリストで与える。点が,座標ではなく幾何要素名の場合は,nameは省略可 \\ - プロットデータの名前は,"sg" に引数の name を付加したものとなる。\\ - options は次の通り。\\ - 線種 "dr, n" , "da,m,n" , "do,m,n" +"Expr=文字" : 文字を入れる + +"Expr=位置 , 文字" : 位置を指定して文字を入れる。位置は頂点からの距離。 + +\vspace{\baselineskip} +\begin{layer}{150}{0} +\putnotese{85}{0}{ \input{Fig/paramark}} +\end{layer} + + +【例】三角形の内角に印をいれ,文字を書き込む。 + +\begin{verbatim} + Listplot([A,B,C,A]); + Paramark([A,B,C]); + Paramark([C,A,B],[3,"Expr=\alpha"]); + Paramark([B,C,A],["dr,2","Expr=2,\theta"]); + +\end{verbatim} + +※角の印には弧の形状のものもある。\hyperlink{anglemark}{Anglemark()} を参照のこと。\\ + +\vspace{\baselineskip} +\hypertarget{bowdata}{} +\item[関数] Bowdata(name,点リスト , options) +\item[機能] 弓形を描く +\item[説明] 点リストで与えられた2点を結ぶ弓形を描く。Listplot() などと同様,点リストが点名の場合はnameは省略できる。 + +2点を反時計回りに回る方向に弓形を描く。 + +optionsは,[曲がり , 空白サイズ , 文字, 線種] + +曲がり は弧の曲がり具合の指定。 初期設定は1 + +空白サイズ は中央にあける空白の大きさ + +文字は,"Expr=文字" + +また,"Expr=微小移動 , 文字" で位置を指定して文字を入れる。 + +微小移動は t n + + t は線分方向の微小移動。移動量は数字をつける。正負が可。 + + n は線分と垂直方向の微小移動 + +\vspace{\baselineskip} + \begin{layer}{150}{0} +\putnotese{85}{5}{ \input{Fig/bowdata}} + \end{layer} + +【例】 三角形ABCの各辺に弓形マークをつけ記号を入れる。 +\begin{verbatim} + Listplot([A,B,C,A]); + Letter([A,"n1","A",B,"w1","B",C,"e1","C"]); + Bowdata([A,B]); + Bowdata([B,C],[1,"Expr=t0n3,a"]); + Bowdata([C,A],[2,1.2,"Expr=10","da"]); +\end{verbatim} + +\vspace{\baselineskip} +これに加え,文字を回転して表示する方法がある。ただし,Cinderellaの画面には反映されない。文字をを回転するには次のように書く。 + +\hspace{10mm}"Exprrot=微小移動 , 文字" + + 微小移動の最後にr をつけると,上下反転する。 + +以下にいくつか例を示す。 +\begin{verbatim} + Bowdata([B,A],[1,1,"Exprrot=a"]); + Bowdata([D,C],[1,1,"Exprrot=t3n0,a"]); + Bowdata([F,E],[1,1,"Exprrot=t-3n0,a"]); + Bowdata([H,G],[1,1,"Exprrot=t0n3,a"]); + Bowdata([L,K],[1,1,"Exprrot=t0n0r,a"]); + Bowdata([N,M],[1,1,"Exprrot=t3n0r,a"]); +\end{verbatim} +\hspace{10mm} \input{Fig/bowdata2} + +%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} + +\hypertarget{drawsegmark}{} +\item[関数] Drawsegmark(name,リスト,options)または Segmark(name,リスト,options) +\item[機能] 線分に印をつける +\item[説明] リストで与えられた2点を端点とする線分に印をつける。印には4種類がある。 + +optionsは \begin{tabbing} -1234567890123456789012345678901234\=\kill - optionsの使用例\\ - \verb|Listplot([A,B]);| \>線分ABを描く。太さはデフォルト。\\ - \verb|Listplot([C,D],["dr,2"]);| \>線分CDを描く。太さ2\\ - \verb|Listplot([E,F],["da"]);| \>線分EFを破線で描く\\ - \verb|Listplot([G,H],["da,3,1"]);| \>線分GHを破線で描く。線を長く\\ - \verb|Listplot([K,L],["da,1,3"]);| \>線分KLを破線で描く。間隔を空ける\\ - \verb|Listplot([M,N],["do"]);| \>線分MNを点線で描く。\\ - \verb|Listplot([O,P],["do,3"]);| \>線分OPを点線で描く。間隔を空ける\\ - \verb|Listplot([Q,R],["do,3,3"]);| \>線分QRを点線で描く。間隔を空けて太く\\ - 結果は次図左から。 +1234\=56789012\=345678901234567890\=\kill + \> Type=n \>:印の種類 n=1〜4\\ + \> Width \>:二本線のときの線の幅 \end{tabbing} - \input{Fig/listplot3} - 例 : Cinderellaの作図ツールで三角形ABCを描いておく。 + 【例】四角形ABCDを描き線分に印をつける。 + +\begin{layer}{150}{0} +\putnotese{90}{5}{ \input{Fig/segmark}} +\end{layer} +\hspace{50mm} \begin{verbatim} - Listplot([A,B,C,A]); - Addax(0); + Listplot([A,B,C,D,A]); + Segmark("1",[A,B],["Type=1"]); + Segmark("2",[B,C],["Type=2","Width=1.5"]); + Segmark("3",[C,D],["Type=3"]); + Segmark("4",[D,A],["Type=4"]); \end{verbatim} - \input{Fig/listplot1}\\ - 各座標を頂点とする三角形を描く\\ - \verb|Listplot("1",[[0,0],[2,0],[1,2],[0,0]]);| -\\ - プロットデータは点の座標のリストである。したがって,プロットデータを自作してListplot()で表示することができる。\\ - \\ -例:有限フーリエ級数展開\\ - \[\cfrac{\pi}{2}+\sum_{n=0}^{30} \cfrac{1-(-1)^n}{n}\sin nx\] -次のようにCindyscriptで関数を定義し,プロットデータpd を作って引数に渡す。 -\begin{verbatim} - f(x):=( - s=pi/2; - repeat(30,n,s=s+(1-(-1)|^n)/n*sin(n*x)); - ); - pd=apply(0..200,t, - x=-2*pi+t*4*pi/200; - [x,f(x)]; - ); - Listplot("1",pd); - Expr([[-2*pi,-0.5],"s","-2\pi",[-pi,-0.5],"s","-\pi",[pi,-0.5],"s", - "\pi",[2*pi,-0.5],"s","2\pi",[0,pi],"w2","\pi"]); -\end{verbatim} - \\ + +\vspace{\baselineskip} +\hypertarget{htickmark}{} +\item[関数] Htickmark([横座標 , 方向 , 文字]) +\item[機能] 横軸に目盛と文字を書く。 +\item[説明] 引数は位置(横座標),方向,文字。複数点の情報を[ ]内にまとめて記入できる。方向を省略すると "s1"になる。微調整は描画面には反映されないので,PDFにして確認する。 +目盛の長さは \hyperlink{setmarklen}{Setmarklen()} で設定できる。 + +\vspace{\baselineskip} +【例】 方向指定の例 + +\hspace{10mm} \verb|Htickmark([1,"1",2,"n1","2",3,"se","3",4,"4"]);| + +\vspace{\baselineskip} \begin{center} -\input{Fig/fourier} +\input{Fig/htickmark01} \end{center} - \\ - リストの長さには制限があるため,あまり長いリストを用いたり,何度も用いたりすることができない。たとえば,タートルグラフィクスを用いたシェルピンスキーのギャスケットでは,次のサイズくらいは可能だが,植物の成長モデルでは分岐が多いためあまり大きな図はできない。スクリプトを工夫して,200くらいずつのリストに分割する。\\ - \input{Fig/listplot2} - \\ - \\ -\hypertarget{mesegmets}{} -\item[関数] Mksegments() -\item[機能] 幾何線分のすべてのPD を作成 -\item[説明] Ketinit() の直後に置くことにより,Cinderellaの作図ツールで描いたすべての線分をそのままプロットデータとする。たとえば,線分ABを作ると,プロットデータsgABが作成される。その後,インスペクタで点Bの識別名を変更(たとえばQに)すると,プロットデータ名も変更される。線分はすでに描かれていてもよい。\\ - -\hypertarget{mkcircle}{} -\item[関数] Mkcircles() -\item[機能] 幾何円のすべてのPD を作成 -\item[説明] Ketinit() の直後に置くことにより,Cinderellaの作図ツールの「円を加える」で描いたすべての円をそのままプロットデータとする。たとえば,中心A,円周上の点をBとした円を作ると,プロットデータcrABが作成される。その後,インスペクタで点Bの識別名を変更(たとえばQに)すると,プロットデータ名も変更される。円はすでに描かれていてもよい。\\ -\\ -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +%\vspace{\baselineskip} +【例】 -5から5までの目盛を打つ。 + Cindyscriptのリスト処理を使って,次のように引数のリストを作って渡す。 +\begin{verbatim} + memori=apply(-5..5,x,[x,text(x)]); + memori=flatten(remove(memori,[[0,"0"]])); + Htickmark(memori); +\end{verbatim} +1行目,apply のカッコ内の -5..5 でリスト[-5,-4,-3,-2,-1,0,1,2,3,4,5] ができる。それを用いて,applyで[数, 数の文字] からなるリストができる。text(x) はxを文字にする関数。2行目で,このリストから,[0,"0"]を除き,リストを平滑化する。 結果は次のようになる。 -\hypertarget{mkbeziercrv}{} -\item[関数] Mkbeziercrv(名前,[[節点リスト,制御点リスト],[節点リスト,制御点リスト],...],\\ -\hfill[オプション] ) -\item[機能] 複数のベジエ曲線を描く -\item[説明] 単独のベジエ曲線の場合はリストの外側の[ ]はなくてもよい。\\ -Mkbeziercrv|(名前,[節点リスト,制御点リスト],[オプション] ) は\\ -Bezier(名前,節点リスト,制御点リスト,[オプション] ) と同じ。 +\begin{center} \scalebox{0.9}{\input{Fig/htickmark}}\end{center} +\hypertarget{vtickmark}{} +\item[関数] Vtickmark([横座標 , 方向 , 文字]) +\item[機能] 縦軸に目盛と文字を書く。 +\item[説明] Htickmarkと同様。縦軸に目盛を書く。方向を省略すると "w1"になる。 -\vspace{2mm} +\vspace{\baselineskip} +【例】点$(0,\ 1),\ (0,\ 2)$の西側に$1,\ 2$を表示する。 -例:\verb|Mkbeziercrv("n",[[A,B,C],[[D],[E,F]]]);| は\\ - \verb|Bezier("n",[A,B,C],[[D],[E,F]]);| と同じ。\\ - 曲線の名前が bzn ではなく bzn1 となる。 +\hspace{10mm} \verb|Vtickmark([1,"1",2,"2"]);| -\vspace{2mm} +\vspace{\baselineskip} +\hypertarget{rulerscale}{} +\item[関数] Rulerscale(始点 ,横軸目盛 , 縦軸目盛) +\item[機能] 目盛を打つ +\item[説明] 始点の位置を縦横の起点として目盛りを打つ。目盛はリストで与える。 + ["r",a,b,c,d] の形式では,aからbまでc間隔で,倍率dの目盛を打つ。 + ["f",n1,"str",n2,"str",・・] の形式では,nと"str"がセットで,nの位置に"str"を書く。ただし,位置はCinderellaの描画面の原点を0とする。 + + Listplot() とともに用いると,座標軸とは異なる線分に目盛を打つことができる。 + + Framedata() とともに用いると矩形に目盛を打つことができる。 + +\vspace{\baselineskip} +【例】x軸上の (2,1) から (9,1) まで線分を引き,1目盛を10として目盛を打つ。 +\begin{verbatim} + Listplot("1",[[2,1],[9,1]]); + Rulerscale([2,1],["r",2,9,1,10],[]); +\end{verbatim} + \begin{center} \input{Fig/ruler1} \end{center} +\vspace{\baselineskip} +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -\begin{layer}{150}{0} -\putnotese{30}{45}{bz51} -\putnotese{90}{45}{bz52} -\putnotese{0}{5}{\input{Fig/checkmc1}} -\end{layer} +【例】Aを原点に置いた矩形枠を描き,横に0,1,2,3,4,5,縦に d1,d2 の目盛を打つ。 +\begin{verbatim} + Framedata("1",[A,B],["corner"]); + Rulerscale(A,["r",0,5,1],["f",1,"d1",3,"d2"]); +\end{verbatim} + \begin{center} \input{Fig/ruler} \end{center} +\vspace{\baselineskip} +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -複数の場合は,\verb|[ [ptlist1,ctrlist1], [ptlist2,ctrlist2],... ]| +\end{description} +\newpage +% ==プロットデータの操作=================== +\subsection{プロットデータの操作} +\begin{description} -\verb|Mkbeziercrv("5",[[[A,B,C],[[D],[E,F]]],[[G,H,K,L],[[M],[N,O],[P]]]]);| +\hypertarget{addgraph}{} +\item[関数] AddGraph(name ,プロットデータのリスト,option) +\item[機能] 複数のプロットデータをまとめる +\item[説明] 複数のプロットデータをまとめて扱う。たとえば,円と,円周上の点の2つのプロットデータをまとめて扱えば,平行移動や回転で,それらのプロットデータをまとめて平行移動や回転ができる。Joincrvs()では,プロットデータをつなげて1つのプロットデータにするが,AddGraph()では,それぞれのプロットデータからなるリスト(リストのリスト)にする。(プロットデータは座標のリストである) -\vspace{40mm} +引数には,プロットデータ名を文字列化して渡す。たとえば,円のプロットデータが cr1 のとき,"cr1" とする。 + +\vspace{\baselineskip} +【例】サイクロイドの図を描く。 \begin{verbatim} -ptlist1=[A,B,C];ctrlist1=[[D],[E,F]];list1=[ptlist1,ctrlist1]; -ptlist2=[G,H,K,L];ctrlist2=[[M],[N,O],[P]];list2=[ptlist2,ctrlist2]; -list=[list1,list2]; -Mkbeziercrv("5",list); + Setpt(3); + Circledata("1",[[0,1],[0,0]]); + Pointdata("1",[0,0]); + AddGraph("1",["[pt1]","cr1"],["nodisp"]); + nn=32; + forall(1..nn, + t=2*pi/nn*#; + Rotatedata(text(#),"ad1",-t,[[0,1],"nodisp"]); + Translatedata(text(#),"rt"+text(#),[t,0],["dr,0.3"]); + ); \end{verbatim} -などとしても同じ。 - \\ - \\ -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -\hypertarget{mkbezierptcrv}{} -\item[関数] Mkbezierptcrv(節点リストptlist,[オプション] ) -\item[機能] ベジエ曲線を描く -\item[説明] 制御点は,自動的に配置される。その後,節点や制御点を動かして, -描きたいものにする。 +\vspace{\baselineskip} +\hspace{20mm} \input{Fig/addgraph} -複数の場合は [ ptlist1, ptlist2.... ] +ここで,AddGraph()の引数に与えるプロットデータのリストで,点のプロットデータ pt1 を"[pt1]" としていることに注意。円のプロットデータが,点の座標のリストであるのに対し,点のプロットデータは一つの座標だけなので,このようにしてリスト化して渡す。 -名前は,A から順に自動的につける。 +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -オプション +\hypertarget{changestyle}{} +\item[関数] Changestyle(PDリスト, options) +\item[機能] 描画オプションを変更する +\item[説明] 複数の図形の描画オプションを一括して変更する。 -"Deg=...” 次数指定ができる。(デフォルトは3次) +\vspace{\baselineskip} +【例】線分AB,円ABの線を破線にして\TeX に書き出さないようにする。 -"Num=..." 各区間の区間数(分点数ー1)を指定できる。(デフォルトは10) +\hspace{10mm} \verb|Changestyle(["sgAB","crAB"],["da","notex"]);| + -\vspace{5mm} +\vspace{\baselineskip} +\hypertarget{invert}{} +\item[関数] Invert(PD) +\item[機能] プロットデータを逆順にする + +\vspace{\baselineskip} +\hypertarget{joincrvs}{} +\item[関数] Joincrvs(name, プロットデータのリスト, options) +\item[機能] 隣接する曲線プロットデータ のリストを繋いで1本の曲線を作る。 +\item[説明] 曲線のリストは隣接する順番で指定する。 + +optionsは線種 "dr, n" , "da,m,n" , "do,m,n" -例: +\vspace{\baselineskip} +【例】線分$y=x\ (-\sqrt{2} \leq x \leq \sqrt{2})$と半円で得られる閉曲線を描いて黄色で塗る。 + +点Aは原点に,点Bは適当なところに作図しておく。 \begin{layer}{150}{0} -\putnotese{50}{15}{bzA} -\putnotese{50}{-5}{\input{Fig/checkb8}} +\putnotese{80}{5}{ \input{Fig/joincrvs}} \end{layer} -\verb|Mkbezierptcrv([A,B,C]);| +\begin{verbatim} + Plotdata("1","x","x=[-sqrt(2),sqrt(2)]"); + B.xy=[sqrt(2),sqrt(2)]; + Circledata("2",[A,B],["Rng=[pi/4,pi/4*5]"]); + Joincrvs("1",["gr1","cr2"]); + Shade(["join1"],["Color=yellow"]); +\end{verbatim} +\vspace{5mm} +%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +\vspace{\baselineskip} +\hypertarget{partcrv}{} +\item[関数] Partcrv(name, A, B, プロットデータ, options) +\item[機能] 曲線プロットデータ上の点A, B の間の部分曲線を描く。 +\item[説明] 2点A, Bの順序は曲線の向きと同一であること。曲線の向きは,$y=f(x)$のグラフではx座標が増加する向き。 -\vspace{25mm} +optionsは線種 "dr, n" , "da,m,n" , "do,m,n" -\begin{layer}{150}{0} -\putnotese{50}{15}{bzA} -\putnotese{60}{-10}{\input{Fig/checkb11}} -\end{layer} +\vspace{\baselineskip} +【例】放物線を点線で描き,一部を実線で描く。 + + \verb|Plotdata("1", "x^2", "x", ["do"]);| (プロットデータの名前はgr1となる) + + \verb|Partcrv("1", [0,0], [1,1], "gr1");| -その後,節点や制御点を動かして, +\begin{center} \input{Fig/partcrv1} \end{center} -描きたいものにする。 +【例】円の一部を実線で描く。円のプロットデータは指定した円周上の点から反時計回りの順にできる。点Aは円の中心,Bは円周上の点とする。点P,Qは適当な位置に作図しておく。 +\begin{verbatim} + Circledata([A,B], ["do"]); + Plotdata("1", "x^2", "x", ["do"]); + tmp=Intersectcrvs("crAB","gr1"); + P.xy=tmp_1; + Q.xy=tmp_2; + Partcrv("1", P, Q, "crAB"); + Partcrv("2", Q, P, "crAB"); +\end{verbatim} +\vspace{\baselineskip} +\hspace{10mm} \input{Fig/partcrv3} \hspace{10mm} \input{Fig/partcrv4} + +\hspace{25mm}part1 の図\hspace{45mm}part2 の図 -\vspace{30mm} +\vspace{\baselineskip} +【例】放物線$y=x^2$が円で切り取られる部分を実線で描く。 \begin{layer}{150}{0} -\putnotese{80}{25}{bzA} -\putnotese{50}{-5}{\input{Fig/checkb9}} +\putnotese{85}{0}{\input{Fig/partcrv}} \end{layer} +\begin{verbatim} + Circledata("1",[[0,2],[0,0]],["da"]); + Plotdata("1","x^2","x",["do"]); + tmp=Intersectcrvs("cr1","gr1"); + Partcrv("2",tmp_2,tmp_1,"gr1",["dr,2"]); + +\end{verbatim} -\verb|Mkbezierptcrv([A,B,C],["Deg=2"]);| +\vspace{\baselineskip} -Deg=2 とすると2次になる。 +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -制御点は各区間に1個ずつできる。 +%\vspace{\baselineskip} +\hypertarget{enclosing}{} +\item[関数] Enclosing(name , PDリスト , [開始位置, 交点計算の許容限界1, 2]) +\item[機能] 複数の曲線から閉曲線を作る。 +\item[説明] 開始位置は,最初と最後の曲線の交点が複数あるときに指定する。 -\vspace{20mm} +開始点は近くに取ればよい。許容限界は,通常は指定しなくてよい。 -\begin{layer}{150}{0} -\putnotese{20}{45}{bzA} -\putnotese{80}{45}{bzB} -\putnotese{0}{10}{\input{Fig/checkb10}} -\end{layer} +\vspace{\baselineskip} +【例】放物線と直線で囲まれる領域に色を塗るために Shade() を使う。 +\begin{verbatim} + Plotdata("1","x^2","x"); + Lineplot("1",[[0,0],[1,0]]); // axis x + Lineplot("2",[[2,0],[2,1]]); + Enclosing("1",["Invert(gr1)","ln1","ln2"],["nodisp"]); + Shade(["en1"],["Color=red"]); +\end{verbatim} +\vspace{\baselineskip} + \begin{center} \input{Fig/enclosing} \end{center} -複数の場合は [ ptlist1, ptlist2.... ] +\vspace{\baselineskip} +注)閉曲線のとりかたでは,出発点を原点にした反時計回りまたは時計回りにすると -\verb|Mkbezierptcrv([[A,B,C],[D,E,F,G]]);| + 反時計回りで \verb|Enclosing("1",["ln1","ln2","Invert(gr1)"]);| -\vspace{25mm} - \\ + 時計回りで \verb|Enclosing("1",["gr1","Invert(ln2)","Invert(ln1)"]);| +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -\hypertarget{paramark}{} -\item[関数] Paramark(点リスト , options) -\item[機能] 点リスト[A,B,C]で示された角に平行四辺形の形状の角の印をつける。 -\item[説明] optionsは次の通り。\\ - 数値 角の印の大きさ。デフォルトは1\\ - 線種 "dr, n" , "da,m,n" , "do,m,n"\\ - "Expr=文字" : 文字を入れる\\ - "Expr=位置 , 文字" : 位置を指定して文字を入れる。位置は頂点からの距離。\\ +\vspace{\baselineskip} +\hypertarget{hatchdata}{} +\item[関数] Hatchdata(name , 方向リスト , プロットデータ , options) +\item[機能] 閉曲線の内部に斜線を引く。 +\item[説明] 引数は,曲線名,内部外部のパターンを与える''i'',''o''の文字列,閉曲線を与える曲線と領域の内部を定める方向のリストとオプション。\\ +オプション(カッコ内はデフォルト値)\\ + 角度(45),間隔(1),\verb|"Max=(20)"| 斜線の最大本数,\\ + \verb|"Out=y/n (n)"| Rを呼び出して外部ファイルを作るか + +\vspace{\baselineskip} +【例】円の内部。(次図左) +\begin{verbatim} + Circledata([A,B],["dr"]); + Hatchdata("1",["i"],[["crAB"]],["dr,0.7"]); +\end{verbatim} -例:三角形の内角に印をいれ,文字を書き込む。 +【例】3つの閉曲線の内側・外側のパターンが同一である領域(次図右) \begin{verbatim} - Paramark([B,A,C]); - Paramark([C,B,A],[3,"Expr=B"]); - Paramark([A,C,B],["dr,2","Expr=2,C"]); + Circledata([A,B],["dr"]); + Paramplot("1","[4*cos(t),2*sin(t)]","t=[0,2*pi]"); + Paramplot("2","[2*cos(t),4*sin(t)]","t=[0,2*pi]"); + Hatchdata("1",["ioi"],[["crAB"],["gp1"],["gp2"]],["dr,0.7"]); + Hatchdata("2",["iio"],[["crAB"],["gp1"],["gp2"]],["dr,0.7"]); \end{verbatim} - \input{Fig/paramark}\\ +\vspace{\baselineskip} +\hspace{5mm} \input{Fig/hatch1} \hspace{5mm} \input{Fig/hatch2} -※角の印には弧の形状のものもある。Anglemark() を参照のこと。\\ +【例】複数の領域。 +\begin{verbatim} + Plotdata("1","2*sin(x)","x=[-pi,3*pi]",["Num=100"]); + Listplot([A,B]); + Listplot([A,C]); + Hatchdata("1",["ii"],[["sgAB","n"],["gr1","s"]],["dr,0.7"]); + Hatchdata("2",["ii"],[["sgAC","s"],["gr1","n"]],["dr,0.7"]); +\end{verbatim} +\begin{center} +\begin{center} \input{Fig/hatch3} \end{center} +\end{center} -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +【例】複数の領域 その2。 +\begin{verbatim} + Plotdata("1","2*sin(x)","x=[-pi,3*pi]",["Num=100"]); + Listplot([A,B]); + Listplot([A,C]); + Hatchdata("1",["iio"],[["sgAB","s"],["sgAC","n"],["gr1","n"]]); +\end{verbatim} +\begin{center} +\begin{center} \input{Fig/hatch4} \end{center} +\end{center} -\hypertarget{paramplot}{} -\item[関数] Paramplot(name , 式 , 変数と定義域,options) -\item[機能] 媒介変数表示の曲線を描く。プロットデータの頭部は gp -\item[説明] 式は""でくくった媒介変数表示のリストで与える。\\ - 定義域も " " でくくって文字列とし,t=に続いてリストで指定する。\\ - options は線種が有効\\ -例:サイクロイド曲線を描く。\\ - \verb|Paramplot("1","[t-sin(t),1-cos(t)]","t=[0,2*pi]");|\\ +【例】3次曲線と接線で囲まれた領域 -\input{Fig/paramplot1}\\ + 点Aを原点付近に作図しておく。 \begin{verbatim} - Deffun("fx(t)", ["regional(x)","x=t-sin(t)","x"]); - Deffun("fy(t)", ["regional(y)","y=1-cos(t)","y"]); - Paramplot("1","[fx(t),fy(t)]","t=[0,2*pi]"); + Deffun("f(x)",["regional(y)","y=x^3-2*x","y"]); + Plotdata("1","f(x)","x",["Num=100"]); + Putoncurve("A","gr1"); + coef=Derivative("f(x)","x",A.x); + Defvar(["coef",coef]); + Deffun("g(x)",["regional(y)","y=coef*(x-A.x)+A.y","y"]); + Plotdata("2","g(x)","x",["Num=1"]); + if(!Isptselected(A), + Enclosing("1",["gr2","Invert(gr1)"],[A,"nodisp"]); + Hatchdata("1",["i"],[["en1"]]); + ); + \end{verbatim} -とすれば,関数定義も Scilab に引き継がれる。\\ - \\ -optionsの使用例。左から,デフォルト,太線,破線,点線の楕円 +\begin{layer}{150}{0} +\putnotese{80}{0}{\input{Fig/hatch5}} +\end{layer} + +点Aをドラッグして曲線上を動かすと, + +\verb|if(!Isptselected(A),・・・| の効果により, + +その間は領域の斜線は引かれない。 + +点A以外の画面上の適当な位置をクリックして, + +点Aが選択状態でなくなると斜線が引かれる。 + +引かれる斜線の向きや間隔を変えることもできる。 + +間隔は実数で指定できる。 + +\vspace{\baselineskip} +【例】円の内部または円と直線で区切られた図形 + +\verb|Circledata([A,B]);| のプロットデータ crAB を用いて,下図左から + +\verb|Hatchdata("1",["i"],[["crAB"]]);| 円内に傾き$45^{\circ}$の斜線を引く + +\verb|Hatchdata("2",["i"],[["crAB"]],[-40,2]);| 傾き$-40^{\circ}$,間隔を2倍に + +\verb|Hatchdata("3",["i"],[["crAB"]],["dr,0.5"]);| 線の太さを0.3倍に + +\verb|Hatchdata("4",["i"],[["crAB"]],[-45,2,"dr,0.3"]);| + +\input{Fig/HatchZuKita1.tex} + +円のオプションに "notex"をつけた場合と,破線で描いた場合。 +\begin{verbatim} + Circledata([A,B],["notex"]); + Circledata([A,B],["da"]); + \end{verbatim} + +\hspace{10mm} \input{Fig/HatchZuKita7.tex} \input{Fig/HatchZuKita8.tex} + +直線で分けられた領域を作り,対角の上下にハッチをかける。線を描き分ける。 \begin{verbatim} - Paramplot("1","[2*cos(t),sin(t)]","t=[0,2*pi]"); - Paramplot("2","[2*cos(t)+5,sin(t)]","t=[0,2*pi]",["dr,2"]); - Paramplot("3","[2*cos(t),sin(t)+3]","t=[0,2*pi]",["da"]); - Paramplot("4","[2*cos(t)+5,sin(t)+3]","t=[0,2*pi]",["do"]); + Circledata([A,B]); + Lineplot("1",[A,B]); + Lineplot("2",[A,C]); + Hatchdata("1",["iii"],[["crAB"],["ln1","n"],["ln2","n"]]); + Hatchdata("2",["iii"],[["crAB"],["ln1","s"],["ln2","s"]],[90,0.5]); \end{verbatim} -\input{Fig/paramplot2} -\\ -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +\hspace{40mm} \input{Fig/HatchZuKita9.tex} -\hypertarget{plotdata}{} -\item[関数] Plotdata(name , 式 , 変数と定義域 , options) -\item[機能] 関数のグラフを描く。プロットデータの名前は,gr -\item[説明] 式で表された関数のグラフを,指定された定義域で描く。\\ - 式,定義域は " " でくくって文字列とする。定義域はx=に続いてリストで指定。\\ - options は次の通り。 -\begin{tabbing} -12345678901234567890123\=\kill - 線種 \>"dr, n" , "da,m,n" , "do,m,n"\\ - "Num=数値" \>描画時の分割数\\ - "Dis=数値" \>値が指定数値以上ジャンプする場合は不連続点とみなす。\\ - "Exc=数値リスト \>リストで示された点は除外する。\\ - "Exc=関数" \>関数の零点は除外する。\\ - "Color=RGB" \>色指定。RGBはCMYKでもよい。\\ -\end{tabbing} - 例:2次関数 $f(x)=x^2-2x$ のグラフを定義域指定なしで描く。\\ - \verb|Plotdata("1","x^2-2*x","x");|\\ - \\ - \input{Fig/plotdata1} - \\ - \verb|Plotdata("1","x^2-2*x","x",["Color=[0,0,1]"]);|\\ - \\ - とすると赤で描かれる。\\ - \\ - 例:三角関数 $2\sin \left(2x-\dfrac{\pi}{4} \right)$ のグラフを,定義域 $0 \leq x \leq 2 \pi$で描く。\\ - \verb|Plotdata("3","2*sin(2*x-pi/4)","x=[0,2*pi]");|\\ - \\ - \input{Fig/plotdata2} - \\ - CindyScript では,plot( 式 , 定義域 ); で描くが, \ketcindy を用いるときは,CindyScript のplot 関数のかわりに,このPlotdata を使えばよい。\\ - 軸に数字を入れるのであれば,Letter() を用いる。\\ +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -optionsの使用例\\ - \verb|Plotdata("1","sin(x)","x");| $f(x)=$sin$x$ のグラフを描く(デフォルト)\\ - \verb|Plotdata("2","sin(x)+1","x",["dr,2"]);| 同じく,太さ2で描く\\ - \verb|Plotdata("3","sin(x)+2","x",["da"]);| 同じく,破線で描く\\ - \verb|Plotdata("4","sin(x)+3","x",["do"]);| 同じく,点線で描く\\ -結果は次図上から。\\ - \\ - \input{Fig/plotdata3}\\ +\vspace{\baselineskip} +\hypertarget{dotfilldata}{} +\item[関数] Dotfilldata(name , 方向リスト , プロットデータ , options) +\item[機能] 領域を点で敷き詰める。 +\item[説明] Rとデータの授受をおこなって描画する。書式はHatchdata()と同様。 - Num=分割数の指定\\ - グラフの描画は,区間を分割して関数値をとり,各点を結ぶという通常の方法によっている。Nの指定はこの分割数の指定である。デフォルトは50。思うような結果が得られない場合はこの値を大きく指定するとよい。\\ - 下図左はデフォルト,右は Num=200 とした。\\ +オプションは,ドットの密度で 0.1〜0.8 程度。 初期設定は0.3。 - \input{Fig/plotdata4}\\ +\vspace{\baselineskip} +【例】円グラフ - 不連続点の指定\\ - Dis オプションにより,値がジャンプする不連続点を線で結ばないようにする。Numオプションと合わせて使うと効果が上がる。\\ +Partcrv() と Enclosing() で閉曲線を作って点を敷き詰める。 - 例:$f(x)=$tan$x$ のグラフは,そのままではあたかも漸近線が描かれたようになるが,これは,不連続点をそのまま結んでいるためである。 +\begin{layer}{150}{0} +\putnotese{75}{5}{ \input{Fig/dotfill}} +\end{layer} \begin{verbatim} - Plotdata("1","tan(x)","x",["Num=200","Dis=50"]); + r=3; + p0=r*[cos(pi/2),sin(pi/2)]; + p1=r*[cos(-pi/6),sin(-pi/6)]; + p2=r*[cos(-3*pi/4),sin(-3*pi/4)]; + Circledata("1",[[0,0],[r,0]]); + Listplot("1",[[0,0],p0]); + Listplot("2",[[0,0],p1]); + Listplot("3",[[0,0],p2]); + Partcrv("1",p1,p0,"cr1"); + Enclosing("1",["sg2","part1","Invert(sg1)"],[[0,0]]); + Partcrv("2",p2,p1,"cr1"); + Enclosing("2",["sg3","part2","Invert(sg2)"],[[0,0]]); + Dotfilldata("1",["i"],[["en1"]]); + Dotfilldata("2",["i"],[["en2"]],[0.1]); +\end{verbatim} + +\vspace{\baselineskip} +\hypertarget{shade}{} +\item[関数] Shade(("名前"), プロットデータのリスト , options) +\item[機能] 閉曲線で囲まれた領域を塗りつぶす。 +\item[説明] 第1引数には,閉曲線を与える曲線分のプロットデータ名を並べる。 + +デフォルトでは,Joincrvsを使って閉曲線を作っている。ただし,プロットデータのリストに +"Invert()"が入っていれば,Enclosingを使う。 + +optionの Color は,Cinderellaの画面上での描画色をリストで与える。濃さを指定したい場合は色名やRGBではなくCMYKにする。 + +optionsには,他に,「Enclosingを使うか(''Enc=y/n'')」,Enclosingのときの開始点,描画色 がある。 + +複数のShadeを使うときは,名前をつける。 + +\vspace{\baselineskip} +【例】$y=2\sin x$のグラフと直線$y=1$ とで囲まれた部分に黒0.2の濃さで色を塗る。 +\begin{verbatim} + Setax([7,"nw"]); + Plotdata("1","2*sin(x)","x",["Num=100"]); + Lineplot("1",[[0,1],[1,1]]); + Enclosing("1",["ln1","Invert(gr1)"],[[2,1],"nodisp"]); + Shade(["en1"],["Color=[0,0,0,0.2]"]); \end{verbatim} -で漸近線が描かれなくなる。\\ +\begin{center} \input{Fig/shade} \end{center} - 例:ガウス記号 [$x$] で表される関数のグラフは,不連続な階段状になる。この関数は天井関数 floor()であるので, +正弦曲線と直線の交点は簡単に計算できるので,次のように Partcrv() で部分曲線を求め,Enclosingで閉曲線を求めずにShadeを使ってもよい。 \begin{verbatim} - Plotdata("1","floor(x)","x",["Num=100","Dis=0.9"]); + Plotdata("1","2*sin(x)","x",["Num=100"]); + Lineplot("1",[[0,1],[1,1]]); + Partcrv("1",[5*pi/6,1],[13*pi/6,1],"gr1"); + Shade(["ln1","Invert(part1)"],[[2.5,1],"Color=0.2*[1,0,0,1]"]); \end{verbatim} -できれいに描ける。\\ - \input{Fig/plotdata5}\\ - 関数に文字係数がついており,文字係数の値を変化させながらグラフを描くには,Assign を使う。\\ - \\ - 例:直線 $y=bx-b^2$ の係数$b$を変化させて描き,包絡線をうかびあがらせる。 +\vspace{\baselineskip} +【例】2つの放物線で囲まれた部分を赤で塗る。 \begin{verbatim} - repeat(50,t, - cb=t/5-5; - Plotdata(text(t),Assign("b*x-b\verb|^|2","b",cb),"x");\\ - ); + Plotdata("1","x^2-1","x=[-3,3]"); + Plotdata("2","x^2/2","x=[-3,3]"); + Shade(["gr2","Invert(gr1)"],[[-1.5,1],"Color=[1,0,0]","alpha->0.4"]); \end{verbatim} - \\ - \input{Fig/assign}\\ -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +ここで,\verb|alpha->0.4| は画面上の色濃度指定。 + +\vspace{\baselineskip} +\begin{center} \input{Fig/shade01} \end{center} + +%\vspace{\baselineskip} +【例】同心円をリング状に塗る。 + + 下図右のように,同心円をリング状に塗るが,円2つだけでは閉曲線はできない。そこで,左図のように,円の描き始めを線分で結んで閉曲線を作る。このとき,向きを考えて,Joincrvsで結ぶように,''Enc=n''をつける。線分は非表示にしたいので,\verb|"nodisp"|オプションをつけておく。なお,点Aを適当な位置に作図しておく。 -\hypertarget{pointdata}{} -\item[関数] Pointdata(name , 点リスト , optionss) -\item[機能] 点を作ってScilabに点のリスト Pointdata(list)を出力する。 -\item[説明] 点データを作成する。この点は,幾何要素ではない。プロットデータの頭部は pt\\ - 例:\verb|Pointdata("1",[[1,2],[-2,3]]);|\\ - 2つの点データを作る。Cinderellaの描画面では緑の点で表示される。\\ - \verb|Pointdata("1",[A,B]);|\\ - 作図した点A,Bについて,点データを作る。\\ - Cinderellaの描画面上では既存の点A,Bに緑の点が重なって表示される。\\ - \verb|Pointdata("1",A,["size=4"]);|\\ - Aの位置に大きさ4で点を作る。Ptsize(Setpt) の項を参照のこと。\\ - \verb|Pointdata("1",[A,B],[0]);|\\ - 点データを作り,TeXにオプション0(白抜き)で描く\\ - \verb|Pointdata("1",[[3,4],[5,6]],["notex"]);|\\ - 点データを作るが,TeXには描かない\\ - \verb|Pointdata("1",[A,B],["nodisp"]);|\\ - 点データを作らない.(戻り値として返す)\\ - - 生成されるリストは,座標のリストがネストした形になっている。\\ - その内容は,println()を用いてコンソールに表示することができる。たとえば - \begin{verbatim} - Pointdata("1",[[1,2],[3,4],[6,2]]); - println(pt1); -\end{verbatim} - で,コンソールに次のように表示される。 \begin{verbatim} - generate pointdata pt1 - [[[1,2]],[[3,4]],[[6,2]]] + r1=2; + r2=1.5; + Circledata("1",[A,A+[r1,0]]); + Circledata("2",[A,A+[r2,0]]); + Listplot("1",[A+[r1,0],A+[r2,0]],["nodisp"]); + Shade(["cr1","sg1","Invert(cr2)","Invert(sg1)"],["Enc=n","Color=green"]); \end{verbatim} - ネストされたリストは,Cindyscriptの flatten() 関数を利用して平滑化(ネストを解除)することにより,Listplot()で利用することができる。\\ - \\ - 例:\verb|Ptsize(3);|\\ - \verb|Pointdata("1",[[1,2],[3,4],[6,2]]);|\\ - \verb|Listplot("1",flatten(pt1));|\\ - これで,節点を明示した折れ線が描ける。(下図左)\\ - \verb|Listplot("1",[[1,2],[3,4],[6,2]]);|\\ - では線分のみが描かれる。(下図右)\\ - \input{Fig/pointdata}\\ -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +\begin{center} \input{Fig/greenring} \end{center} -\hypertarget{polygonplot}{} -\item[関数] Polygonplot(name , 点リスト , 整数,optionss) -\item[機能] 2点を指定して正多角形を描く。 -\item[説明] 円に内接する正多角形を描き,頂点の幾何点を作る。\\ - 例:\verb|Polygonplot("1",[A,B],12);|\\ - 点Aを中心とし,半径ABの円周上に,点Bからスタートして正十二角形の頂点B1〜B11を反時計回りに作り,これを結んだ正多角形を描く。頂点は幾何点。\\ - 整数でない数を指定した場合は,きちんと閉じない折れ線が描かれる。\\ +その他,\hyperlink{joincrvs}{Joincrvs() の例}も参照のこと +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -\hypertarget{putintersect}{} -\item[関数] Putintersect(点名 , PD1 ,PD2,[No] ) -\item[機能] 2曲線の交点を作る -\item[説明] 2曲線はプロットデータ名で指定する。指定した点名で交点を作る。この点は幾何点。\\ - 交点が2つ以上ある場合でも,描画範囲にそのうち1つだけが存在するなら,その点となる。描画範囲に2つ以上の交点がある場合は,それらのうちいずれかになる。このとき,コンソールに交点の座標のリストと,「Choose point number 」というガイドが表示される。引数のNoとして,その番号を指定すると,その点が採用される。\\ - この関数で作成されるのは幾何点だけなので,\TeX の図に点として明示するためにはPointdata()で書き出す必要がある。\\ - 次の例は,3次曲線と直線の交点を3つとも取ったものである。 -\begin{verbatim} - Plotdata("1","x^3-4*x","x",["Num=200"]); - Plotdata("2","1/2*x+1","x"); - Putintersect("P","gr1","gr2",1); - Putintersect("Q","gr1","gr2",2); - Putintersect("R","gr1","gr2",3); - Pointdata("1",[P,Q,R],["size=4"]); -\end{verbatim} - \\ - \input{Fig/putintersect}\\ - \\ - 交点が存在しない場合は,「No intersect point」がコンソールに表示される。\\ - 2曲線の交点を作るのに,\hyperlink{crosspoint}{Crosspoint()} 関数を用いることもできる。\\ -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +\vspace{\baselineskip} +\hypertarget{reflectdata}{} +\item[関数] Reflectdata(name , プロットデータ , 対称点または対称軸,options) +\item[機能] プロットデータの鏡映を作成 +\item[説明] プロットデータを指定された点または軸に関して対称移動する。 + 対称点は座標または,点の識別名。ただし,対称点を座標で示すときは要素がひとつのリストにする。 + + 対称軸はリスト[ 点1, 点2 ] で指定。 -\hypertarget{putpoint}{} -\item[関数] Putpoint(点名 , 座標1 ,座標2 ) -\item[機能] 点を作る -\item[説明] 識別名が点名の点を,既存でなければ座標1に作る。既存ならば座標2に移動する。Texには出力されない。\\ +\vspace{\baselineskip} +【例】中心A , 半径ABの円を描き,そのプロットデータを用いて鏡映を描く。 -例:(1,1) に固定点Aを作る。 この点は動かすことができない。\\ - \verb|Putpoint("A",[1,1]);|\\ - (1,1)に自由点を作る。\\ - \verb|Putpoint("A",[1,1],[A.x,A.y]);|\\ - この点は座標2の効果により,自由点となり,ドラッグして動かすことができる。\\ +点Cに関して対称な円を実線 -実際には,Cinderellaの作図ツールで点を取り,インスペクタで名前を変更すればよいわけだが,この形でとればスクリプトの可読性が増す意味がある。\\ -注)点名は半角アルファベットとする。数字や漢字でもCinderellaでは点ができるが,Scilabでエラーとなる。\\ +点(-1,2)に関して対称な円を太い実線 -\hypertarget{putonline}{} -\item[関数] PutonLine(点名 , 座標1 ,座標2 ) -\item[機能] 直線上に点を作る -\item[説明] 座標1,座標2を通る直線上に点名の点を作る。できた点は直線に対してインシデントとなる。\\ -例 点A,Bを通る直線上に点Pをとる。\\ - \verb|PutonSeg("P",A,P);|\\ +直線DEに関して対称な円を破線 -\hypertarget{putonseg}{} -\item[関数] PutonSeg(点名 , 座標1 ,座標2 ) -\item[機能] 線分上に点を作る -\item[説明] 座標1,座標2を通る線分上に点名の点を作る。できた点は線分に対してインシデントとなる。\\ -例 点A,Bを通る線分上に点Pをとる。\\ - \verb|PutonSeg("P",A,P);|\\ - -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} - -\hypertarget{reflextpoint}{} -\item[関数] Reflectpoint(点,対称点または対称軸) -\item[機能] 点の鏡映を作成 -\item[説明] 点を指定された点または軸に関して対称移動する。対称軸は[ 点1, 点2 ]で指定\\ - \\ -例:CはBに関してAと対称な点\\ - Dは点(2,3)に関してAと対称な点\\ - Eは点(1,0) に関して (-1,1) と対称な点\\ - Fは直線CEに関してAと対称な点\\ -\begin{verbatim} - C.xy=Reflectpoint(A,B); - D.xy=Reflectpoint(A,[[2,3]]); - E.xy=Reflectpoint([-1,1],[[1,0]]); - F.xy=Reflectpoint(A,[C,E]); - Lineplot([C,E],["do"]); -\end{verbatim} - \\ - \input{Fig/reflectpoint}\\ -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +\begin{verbatim} + Circledata([A,B]); + Reflectdata("1","crAB",[C]); + Reflectdata("2","crAB",[[-1,2]],["dr,2"]); + Reflectdata("3","crAB",[D,E],["da"]); +\end{verbatim} +\vspace{\baselineskip} + \begin{center} \input{Fig/reflectdata} \end{center} + +%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} + +\vspace{\baselineskip} +\hypertarget{rotatedata}{} +\item[関数] Rotatedata(name , プロットデータ ,角度 , [中心 , options]) +\item[機能] プロットデータの位置を回転する +\item[説明] 図形を,中心で示された点の周りに回転する。角度は弧度法で与える + + 中心とoptionsはまとめてリストで与える。 -\hypertarget{rotatepoint}{} -\item[関数] Rotatepoint(点 ,角度 , 中心) -\item[機能] 点の位置を回転する -\item[説明] 点を,中心で示された点の周りに回転する。角度は弧度法で与える\\ \begin{spacing}{1.5} -例:点CはAを,Bに関して$\dfrac{2}{3}\pi $だけ回転した点\\ - 点Dは点(5,2)を,Bに関して$\dfrac{\pi}{3}$ だけ回転した点\\ - 点Eは点(3,0)をAに関して $-\dfrac{\pi}{4} $だけ回転した点 +【例】中心A , 半径ABの円を描き,次のように回転して線種を変えて描く。 + + 点Cを中心に$\dfrac{\pi}{2} $,点(1,5)を中心に$\dfrac{\pi}{3}$ , 点Dを中心に $-\dfrac{\pi}{3} $ \end{spacing} \begin{verbatim} - C.xy=Rotatepoint(A,2*pi/3,B); - D.xy=Rotatepoint((5,2),pi/3,B); - E.xy=Rotatepoint([3,0],-pi/4,A); + Circledata([A,B]); + Rotatedata("1","crAB",pi/2,[C]); + Rotatedata("2","crAB",pi/3,[[1,5],"dr,2"]); + Rotatedata("3","crAB",-pi/3,[D,"da"]); \end{verbatim} - \\ - \input{Fig/rotatepoint}\\ - \\ -%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +\vspace{\baselineskip} +\begin{center}\scalebox{0.9}{ \input{Fig/rotatedata} }\end{center} + +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -\hypertarget{rulerscale}{} -\item[関数] Rulerscale(始点 ,横軸目盛 , 縦軸目盛) -\item[機能] 目盛を打つ -\item[説明] 始点の位置を縦横の起点として目盛りを打つ。\\ - 目盛はリストで与える。\\ - ["r",a,b,c] の形式では,aからbまでc間隔で目盛を打つ。\\ - ["f",n1,"str",n2,"str",・・] の形式では,nと"str"がセットで,nの位置に"str"を書く。ただし,位置はCinderellaの描画面の原点を0とする。\\ - Framedata() または Framedata2() とともに用いると矩形に目盛を打つことができる。\\ - \\ -例:Aを原点に置いた矩形枠を描き,横に0,1,2,3,4,5,縦に d1,d2 の目盛を打つ。 -\begin{verbatim} - Framedata2("1",[A,B]); - Rulerscale(A,["r",0,5,1],["f",1,"d1",3,"d2"]); -\end{verbatim} - \input{Fig/ruler}\\ - \\ +\vspace{\baselineskip} +\hypertarget{scaledata}{} +\item[関数] Scaledata(name , プロットデータ,x方向比率 , y方向比率 , [中心 , options]) +\item[機能] 図形の位置を拡大・縮小する +\item[説明] 図形の位置をプロットデータを用いて指定された比率で拡大・縮小する -\hypertarget{scalepoint}{} -\item[関数] Scalepoint(点,比率ベクトル,中心) -\item[機能] 点の位置を拡大・縮小する -\item[説明] 点を,指定された中心を原点とする座標系で,比率ベクトルの分だけ拡大・縮小した位置に置く。\\ + 比率は [x方向比率 , y方向比率] のリストで与えてもよい。 + + 中心とoptionsはまとめてリストで与える。optionsは線種 + +\vspace{\baselineskip} +【例】点A(2,1),B(1,1),C(-1,-1),D(3,-1) を作図しておく。 -例:点Cを,点Aを原点中心に横に3倍,縦に2倍した位置に置く。\\ - 点Dを,点Aを点B中心に横に3倍,縦に2倍した位置に置く。\\ - 点Fを,点Aを原点中心にベクトル$\overrightarrow{OE} $で示された比率の位置に置く。 + Aを中心とする半径ABの円のプロットデータを作り, + +原点中心に$x$軸方向に3,$y$軸方向に2拡大する。 + +Cを中心に$x$軸方向に3,$y$軸方向に2拡大し,実線で太く描く。 + +原点中心にベクトル$\overrightarrow{OD} $だけ拡大し,破線で描く。 \begin{verbatim} - C.xy=Scalepoint(A,[3,2],[0,0]); - D.xy=Scalepoint(A,[3,2],B); - F.xy=Scalepoint(A,E.xy,[0,0]); + Circledata([A,B]); + Scaledata("1","crAB",3,2,[[0,0]]); + Scaledata("2","crAB",3,2,[C,"dr,2"]); + Scaledata("3","crAB",[D.x,D.y],[[0,0],"da"]); \end{verbatim} - \input{Fig/scalepoint}\\ - \\ + \begin{center} \input{Fig/scaledata} \end{center} -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -\hypertarget{translatepoint}{} -\item[関数] Translatepoint(点 , 移動ベクトル) -\item[機能] 点を平行移動する -\item[説明] 点を移動ベクトルで示された分だけ平行移動する。\\ -\\ -例:点Cは点Aを$x$軸方向に2 , $y$軸方向に3だけ平行移動した点\\ - 点Dは点Aをベクトル$\overrightarrow{OB} $だけ平行移動した点 +\vspace{\baselineskip} +\hypertarget{translatedata}{} +\item[関数] Translatedata(name , プロットデータ , 移動ベクトル , options) +\item[機能] プロットデータを平行移動する +\item[説明] プロットデータを移動ベクトルで示された分だけ平行移動する。 + +\vspace{\baselineskip} +【例】点A,B,C,Dを作図ツールでとっておく。 + + \verb|Circledata([A,B]);| でできる円(crAB)を + + x軸方向に2,y軸方向に3だけ平行移動して実線で描く。 + +ベクトル$\overrightarrow{OC} $だけ平行移動し,実線で太く描く。 + +ベクトル$\overrightarrow{OD} $だけ平行移動し,破線で描く。 + \begin{verbatim} - C.xy=Translatepoint(A,[2,3]); - D.xy=Translatepoint(A,B.xy); + Circledata([A,B]); + Translatedata("1","crAB",[2,3]); + Translatedata("2","crAB",C,["dr,2"]); + Translatedata("3","crAB",D,["da"]); \end{verbatim} - \\ - \input{Fig/translatepoint} -\end{description} - \\ +\vspace{\baselineskip} + \begin{center} \input{Fig/translatedata} \end{center} -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -\newpage -% ==プロットデータの操作=================== -\subsection{プロットデータの操作} -% 描画関数で作成されたプロットデータを用いて描画をおこなう。なお,本節では,該当する図形のことを「プロットデータ」と表記する場合がある。\\ +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -\begin{description} +\vspace{\baselineskip} +\hypertarget{intersectcrvs}{} +\item[関数] Intersectcrvs(プロットデータ1, プロットデータ2) +\item[機能] 2曲線の交点リストを取得する。 +\item[説明] オプションとして,共有点があるかどうかを判断するための限界値があるが,通常は使わない。 -\hypertarget{changestyple}{} -\item[関数] Changestyle(PDリスト, optionss) -\item[機能] 描画オプションを変更する -\item[説明] 複数の図形の描画オプションを一括して変更する。\\ +\vspace{\baselineskip} +【例】円と曲線の交点をP,Qとする。 -例:線分AB,円ABの線を破線にして\TeX に書き出さないようにする。\\ - \verb|Changestyle(["sgAB","crAB"],["da","notex"]);|\\ - \\ +\begin{layer}{150}{0} +\putnotese{80}{5}{ \input{Fig/Intersectcrvs1}} +\end{layer} -\hypertarget{enclosing}{} -\item[関数] Enclosing(name , PDリスト , [位置,方向,数式]) -\item[機能] 複数の曲線から閉曲線を描く。 -\item[説明] 引数の位置,方向,数式は,複数点の情報を[ ]内にまとめて -記入できる。以下は一例。 \begin{verbatim} - Circledata([A,B],["do"]); - Scaledata("1","crAB",1.5,1/1.5,["do"]); - Scaledata("2","crAB",1/1.5,1.5,["do"]); - Tmp1=Intersectcrvs(sc2,crAB); - Putpoint("C",Tmp1\_1); - Enclosing("1",["sc2","crAB","sc2","Invert(sc1)"],[C]); - Hatchdata("1","i",[["en1"]],["dr,0.5"]); -\end{verbatim} - \input{Fig/enclosing} + Plotdata("1", "sin(x)", "x", ["Num=100"]); + Circledata([A, B]); + tmp=Intersectcrvs("gr1","crAB"); + P.xy=tmp_1; + Q.xy=tmp_2; + \end{verbatim} -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} - \\ +この関数は,交点のデータのリストを返すので,tmp=[ [ -0.37, -0.36 ], [ 2.13, 0.85 ] ] のように値が返ってくる。交点の順序は PD1, PD2 の順序と曲線の向きによって決まる。曲線の向きは,$y=f(x)$のグラフではx座標が増加する向きで,パラメーター表示曲線ではパラメータの増加する向き。また,PD1 上から探し始めて PD2 との交点を拾っていく。 -\hypertarget{addgraph}{} -\item[関数] AddGraph(name ,プロットデータのリスト,option) -\item[機能] 複数のプロットデータをまとめる -\item[説明] 複数のプロットデータをまとめて扱う。たとえば,円と,円周上の点の2つのプロットデータをまとめて扱えば,スライダを用いたり動画にするときに,個々に移動や回転をしなくてすむ。Joincrvs()では,プロットデータをつなげて1つのプロットデータにするが,AddGraph()では,プロットデータをリスト化して扱うという違いがある。\\ - プロットデータのリストは,プロットデータ名を文字列化して渡す。たとえば,円のプロットデータが cr1 のとき,"cr1" とする。\\ - \\ -例:サイクロイドの図を描く。 -\begin{verbatim} - Setpt(3); - Circledata("1",[[0,1],[0,0]]); - Pointdata("1",[0,0]); - AddGraph("1",["[pt1]","cr1"],["nodisp"]); - nn=32; - forall(1..nn, - t=2*pi/nn*#; - Rotatedata(text(#),"ad1",-t,[[0,1],"nodisp"]); - Translatedata(text(#),"rt"+text(#),[t,0],["dr,0.3"]); - ); -\end{verbatim} +交点がひとつの場合も tmp=[ [ 2.45, 0.63 ] ] と2重のリストに入っているので,点として取出すには \verb|P.xy=tmp_1; | とする。 -\begin{center} -\input{Fig/addgraph} -\end{center} - ここで,AddGraph()の引数で与えるプロットデータのリストで,点のプロットデータ pt1 を"[pt1]" としていることに注意。円のプロットデータが,点の座標のリストであるのに対し,点のプロットデータは一つの座標だけなので,このようにしてリスト化して渡す。\\ - \\ -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} - \\ +\vspace{\baselineskip} +注)交点の算出は,数式処理によるのではなく,プロットデータからの数値探索のアルゴリズムによっている。 -\hypertarget{hatchdata}{} -\item[関数] Hatchdata(name , 方向リスト , プロットデータ , optionss) -\item[機能] 閉曲線の内部に斜線を引く。 -\item[説明] 引数は,曲線名,内部外部のパターンを与える''i'',''o''の文字列,閉曲線を与える曲線分と領域の内部を定める方向のリストとオプション。\\ - Scilabでハッチデータを作成して読み込む。同じ名前のハッチデータがすでにある場合,"m"をつけるとハッチデータを強制的に更新することができる。\\ - \\ -例:円の内部。(下図左) +\vspace{\baselineskip} +\hypertarget{intersectcrvspp}{} +\item[関数] IntersectcrvsPp(プロットデータ1, プロットデータ2) +\item[機能] 2曲線の交点のパラメータリストを取得する。 +\item[説明] 2曲線の交点の座標とパラメータのリストを返す。 + +Intersectcrvs() との違いは,パラメータがあるかどうかである。 + +\vspace{\baselineskip} +【例】放物線と直線の交点のパラメータを求める。 + +2点A(-1,1),B(2.4) を作図しておく。 \begin{verbatim} - Circledata([A,B],["dr"]); - Hatchdata("1",["i"],[["crAB"]],["dr,0.7","out"]); + Plotdata("1","x^2","x"); + Lineplot([A,B]); + p1=Intersectcrvs("gr1","lnAB"); + p2=IntersectcrvsPp("gr1","lnAB"); + println("p1="+p1); + println("p2="+p2); \end{verbatim} +とすると,コンソールには +\begin{verbatim} + p1=[[-1,1],[2,4]] + p2=[[[-1,1],17.68,1],[[2,4],42.66,1]] +\end{verbatim} +と表示される。 +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} + +\vspace{\baselineskip} +\hypertarget{nearestpt}{} +\item[関数] Nearestpt(PD1,PD2) +\item[機能] 2曲線に対し,最も近い点とそのパラメータ,距離のリストを返す +\item[説明] 戻り値は,それぞれの曲線上の点の座標とプロットデータ中の位置,その距離からなるリスト。 + +\vspace{\baselineskip} +【例】2つの放物線上の点の最短距離とその位置を求める。 + +点A,Bを作図ツールでとっておく。 + +\begin{layer}{150}{0} +\putnotese{80}{5}{ \input{Fig/nearestpt}} +\end{layer} -例:3つの閉曲線の内側・外側のパターンが同一である領域(下図右) \begin{verbatim} - Circledata([A,B],["dr"]); - Paramplot("1","[4*cos(t),2*sin(t)]","t=[0,2*pi]"); - Paramplot("2","[2*cos(t),4*sin(t)]","t=[0,2*pi]"); - Hatchdata("1",["ioi"],[["crAB"],["gp1"],["gp2"]],["dr,0.7","out"]); - Hatchdata("2",["iio"],[["crAB"],["gp1"],["gp2"]],["dr,0.7","out"]); + Plotdata("1", "x^2+2", "x=[-2,2]"); + Plotdata("2", "-(x-2)^2+1","x=[0,4]"); + plist=Nearestpt("gr1","gr2"); + A.xy=plist_1; + B.xy=plist_3; + Listplot([A,B],["do"]); + Ptsize(2); + Drwpt([A,B]); + Letter([A,"n2w","A",B,"s2e","B",(A+B)/2,"e",text(plist_5)]); \end{verbatim} - \\ - \input{Fig/hatch1} \input{Fig/hatch2} -\newpage -例:複数のパターンに分かれた領域。 +ここで plistに代入されたリストは次のようになっている。 + +\hspace{10mm} [[0.4,2.16],31,[1.58,0.82],20.73,1.78] + +なお,距離 1.78 は小数点以下第3位を四捨五入して表示されている。 + +\vspace{\baselineskip} +\hypertarget{nearestptcrv}{} +\item[関数] Nearestptcrv(座標, プロットデータ) +\item[機能] 点に最も近いプロットデータの点を求める +\item[説明] 第1引数の座標に最も近い曲線プロットデータ上の点の座標を返す。 + +\vspace{\baselineskip} +【例】点(3,0)に最も近い $y=x^2$ 上の点を求める。 + +点Aは(3,0)に,点Bは適当な位置に作図しておき,次のスクリプトを実行すると点Bが求める点となる。 + +\begin{layer}{150}{0} +\putnotese{80}{0}{ \input{Fig/Nearestpt1}} +\end{layer} + \begin{verbatim} - Plotdata("1","2*sin(x)","x=[-pi,3*pi]",["Num=100"]); - Listplot([A,B]); - Listplot([A,C]); - io="out"; - Hatchdata("1",["ii"],[["sAB","n"],["gr1","s"]],["dr,0.7",io]); - Hatchdata("2",["ii"],[["sAC","s"],["gr1","n"]],["dr,0.7",io]); + Plotdata("1", "x^2", "x"); + B.xy=Nearestptcrv(A.xy,"gr1"); + Listplot([A,B],["do"]); + Ptsize(2); + Pointdata("1",[A,B]); + Letter([A,"ne","A",B,"nw","B"]); \end{verbatim} -\begin{center} -\input{Fig/hatch3} -\end{center} -複数領域の斜線塗の場合,それらの領域をまとめて出力するか, -まとめてCinderellaに読み込む場合が多く,そのような場合には -4行目のような指定の仕方もある。\\ +注)第1引数は座標なので,\verb|A| ではなく \verb|A.xy| としなければならない。 + +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} + +\vspace{\baselineskip} +\hypertarget{numptcrv}{} +\item[関数] Numptcrv (プロットデータ) +\item[機能] プロットデータの個数を返す +\item[説明] Cindyscript で length(PD)とするのと同じ + +\vspace{\baselineskip} +【例】 Implicit() と Paramplot() でそれぞれ楕円を描いたときのプロットデータの順序を比較する。 + ただし,TeXには書き出さない。 -例:描画範囲とあわせて閉領域となる場合。 \begin{verbatim} - Plotdata("1","2*sin(x)","x=[-pi,3*pi]",["Num=100"]) - Listplot([A,B]); - Listplot([A,C]); - Hatchdata("1",["iio"],[["sAB","s"],["sAC","n"],["gr1","[0,2]"]], - ["dr,0.7","out"]); + Slider("A-C-B",[0,-2],[6,-2]); + Implicitplot("1","x^2+4*y^2=4","x=[-2,2]","y=[-2,2]",["do"]); + Paramplot("1","[2*cos(t)+5,sin(t)]","t=[0,2*pi]",["do","Num=140"]); + println([Numptcrv(imp1),Numptcrv(gp1)]); + n=floor(C.x*2); + repeat(n,s,start->0, + t=s*10+1; + draw(imp1_t,color->hue(s/10)); + draw(gp1_t,color->hue(s/10)); + ); \end{verbatim} + \begin{center} -\input{Fig/hatch4} +\includegraphics[bb=0.00 0.00 305.02 133.01,width=8cm]{Fig/numptcrv.pdf} \end{center} -\newpage +4行目で,2つのプロットデータの個数が同じであることを確かめている。 + +スライダを動かすと,10個おきのプロットデータに対応する点が描かれる。 + +\vspace{\baselineskip} +\hypertarget{paramoncrv}{} +\item[関数] Paramoncrv(点の座標, 曲線の名前) +\item[機能] 曲線上の点のパラメータ値を返す。 +\item[説明] 曲線は折れ線として描かれ,曲線上の各点はこの折れ線の節点を基準としたパラメータ値を持つ。パラメータ値は整数部分が節点の番号,小数部分が節間の位置を表す。 + +\vspace{\baselineskip} +【例】図のような点PからQに至る円周上の5等分点を節点とする折れ線cr1において,$n$番目の線分上の点は$n\leq t\leq n+1$の範囲のパラメータ値を持つ。 + +たとえば,図の点$\mathrm{A}$は2番目の線分上にあり,この値は + +\begin{layer}{150}{0} +\putnotese{80}{0}{ \input{Fig/paramoncrv}} +\end{layer} -例:接線で囲まれた領域の場合。 \begin{verbatim} - Deffun("f(x)",["regional(y)","y=x^2*(x-3)","y"]); - Plotdata("1","f(x)","x"); - PutonCurve("A",gr1,-1); - coef=Derivative("f(x)","x","A.x"); - Defvar("DC=coef"); - Deffun("g(x)",["regional(y)","y=DC*(x-A.x)+A.y","y"]); - Plotdata("2","g(x)","x"); - Tmp=Intersectcrvs(gr1,gr2); - Partcrv("1",A,Tmp_3,"gr1"); - Partcrv("2",A,Tmp_3,"gr2"); - Hatchdata("1",["ii"],[["part1","n"],["part2","s"]],["dr,0.7","out"]); + println(Paramoncrv(A.xy,"cr1")); +\end{verbatim} + +によってコンソールに表示される。(たとえば2.45)。 + +点Aの位置を動かすとパラメータ値は変わる。 + +\vspace{20mm} +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} + + +\vspace{\baselineskip} +\hypertarget{pointoncrv}{} +\item[関数] Pointoncrv(点のパラメータ値, PD) +\item[機能] 曲線上のパラメータ値を持つ点の座標を返す。 +\item[説明] 曲線(折れ線)上の節点を基準としたパラメータ値により点の位置が定まる。 + +\vspace{\baselineskip} +【例】図のような点$\mathrm{P}$から$\mathrm{Q}$に至る半円周上の5等分点を節点とする折れ線cr1において,パラメータ値$4.5$を持つ点$\mathrm{A}$は4番目の線分の中点である。したがって + +\begin{verbatim} + Circledata("0",[[0,0],[2,0]],["do"]); + Circledata("1",[[0,0],[2,0]],["Num=5","Rng=[0,pi]"]); + tmp=Pointoncurve(4.5,"cr1"); + Pointdata("1",tmp,["Size=3"]); + Letter([tmp,"nw","A",[2,0],"se","P",[-2,0],"sw","Q"]); \end{verbatim} -\begin{center} -\input{Fig/hatch5} -\end{center} - \\ -斜線の向きや間隔を変えることもできる。\\ - -\noindent -%¥Ltab{10mm}{文} -例:円の内部または円と直線で区切られた図形\\ -\verb|Circledata([A,B]);| で円データの名前が crABとなる。これを用いて\\ -\verb|Hatchdata("1",["i"],[["crAB"]]);| -円内に傾き$45^{\circ}$の斜線を引く(下図ha1)\\ -\verb|Hatchdata("2",["i"],[["crAB"]],[-40,2]);| 傾き$-40^{\circ}$,間隔を2倍に(ha2)\\ - (間隔は実数で指定できる)\\ -\verb|Hatchdata("3",["i"],[["crAB"]],["dr,0.5"]);| 線の太さを0.5倍に(ha3)\\ -\verb|Hatchdata("4",["i"],[["crAB"]],[-45,2,"dr,0.5"]);| (ha4)\\ - - \input{Fig/HatchZuKita1.tex} \input{Fig/HatchZuKita2.tex}\\ - 図ha1 図ha2\\ - \input{Fig/HatchZuKita3.tex} \input{Fig/HatchZuKita4.tex}\\ - 図ha3 図ha4\\ - \\ - -この円に直線を加え領域を分ける。\\ - \verb|Lineplot("1",[A,B]);| 直線データの名前は ln1\\ - \verb|Lineplot("2",[A,C]);| 直線データの名前は ln2\\ -円の内部で右上(ln1とln2の北側)(下図ha5)\\ - \verb|Hatchdata("5",["iii"],[["crAB"],["ln1","n"],["ln2","n"]]);|\\ -円の内部で右上と左下(下図ha6)\\ -\verb|Hatchdata("6",["iii","ioo"],[["crAB"],["ln1","n"],["ln2","n"]]);|\\ - - \input{Fig/HatchZuKita5.tex} \input{Fig/HatchZuKita6.tex}\\ - 図ha5 図ha6\\ - \\ -円データcrABを作るが描かなければ境界線が含まれない。(下図ha7)\\ - \verb|Circledata([A,B],["notex"]);|\\ - \verb|Hatchdata("7",["i"],[["crAB"]]);|\\ -境界線を破線で描くと開集合のようになる(下図ha8)\\ - \verb|Circledata([A,B],["da"]);|\\ - \verb|Hatchdata("8",["i"],[["crAB"]]);|\\ - - \input{Fig/HatchZuKita7.tex} \input{Fig/HatchZuKita8.tex}\\ - 図ha7 図ha8\\ - -問題:次図のように上と下で斜線の描き分けをするには? 答は図の後に\\ - - \input{Fig/HatchZuKita9.tex}\\ - \\ -問題の答:次のように2つのデータを作り両方描く -\begin{verbatim} - Hatchdata("9a",["iii"],[["crAB"],["ln1","n"],["ln2","n"]]); - Hatchdata("9b",["ioo"],[["crAB"],["ln1","n"],["ln2","n"]],[90,2]); -\end{verbatim} - (この答は図ha7と図ha8との関係と同じ) - \\ -\hypertarget{dotfilldata}{} -\item[関数] Dotfilldata(name , 方向リスト , プロットデータ , optionss) -\item[機能] 領域を点で敷き詰める。 -\item[説明] Scilabとデータの授受をおこなって描画する。書式はHatchdata()と同じ\\ -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} - \\ + +によって,点Aを中点に置くことができる。 -\hypertarget{joincrvs}{} -\item[関数] Joincrvs(name, プロットデータのリスト, options) -\item[機能] 隣接する曲線プロットデータ のリストを繋いで1本の曲線を作る。 -\item[説明] 曲線のリストは隣接する順番で指定する。プロットデータ名の頭部はjoin。\\ -optionsは線種 "dr, n" , "da,m,n" , "do,m,n"\\ - \\ -例:線分$y=x\ (-\sqrt{2} \leq x \leq \sqrt{2})$と半円を繋いで得られる閉曲線を描く。\\ -\begin{verbatim} - Plotdata("1","x","x=[-sqrt(2),sqrt(2)]"); - Putpoint("B",[sqrt(2),sqrt(2)]); - Circledata("2",[A,B],["Rng=[pi/4,pi/4*5]"]); - Joincrvs("3",["gr1","cr2"]); -\end{verbatim} - \\ - \input{Fig/joincrvs.tex} - -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} - \\ -\hypertarget{partcrv}{} -\item[関数] Partcrv(name, A, B, プロットデータ, options) -\item[機能] 曲線プロットデータ上の点A, B の間の部分曲線を描く。 -\item[説明] プロットデータ名の頭部はpart。\\ -optionsは線種 "dr, n" , "da,m,n" , "do,m,n"\\ - -例1:2点A, Bの順序と曲線の向きによって部分曲線が決まる。 -曲線の向きは,$y=f(x)$のグラフではx座標が増加する向き。ここで,PDname="gr1"のように""で囲むことが必要。\\ - \verb|Plotdata("1", "x^2", "x", ["do"]);| (放物線の名前はgr1)\\ - \verb|Partcrv("1", [0,0], [1,1], "gr1");| (部分曲線の名前はpart1)\\ - \verb|Partcrv("2", [1,1], [0,0], "gr1");| (部分曲線の名前はpart2)\\ - -\begin{minipage}{35mm} -\begin{center} -\input{Fig/partcrv1}\\ -part1 の図 -\end{center} -\end{minipage} -\hspace{10mm} -\begin{minipage}{35mm} -\begin{center} -\input{Fig/partcrv2}\\ -part2 の図 -\end{center} -\end{minipage} -\vspace{5mm} +\vspace{\baselineskip} + \begin{center} \scalebox{0.9}{\input{Fig/pointoncrv}} \end{center} + +%\vspace{\baselineskip} +\hypertarget{ptcrv}{} +\item[関数] Ptcrv(n,プロットデータ) +\item[機能] 曲線プロットデータのn 番目の節点を返す +\item[説明] Cindyscript の PD\_n と同じ + +\vspace{\baselineskip} +【例】楕円上の点で分割する。あからじめ必要な点を作図しておく。 -例2:閉曲線の例.パラメータ表示曲線はパラメータの増える向きをもつ。 +\begin{layer}{150}{0} +\putnotese{70}{10}{ \input{Fig/ptcrv}} +\end{layer} \begin{verbatim} - Circledata([A,B], ["do"]); - Plotdata("1", "x^2", "x", ["do"]); - tmp=Intersectcrvs(crAB, gr1); - P.xy=tmp_1; - Q.xy=tmp_2; - Partcrv("1", P, Q, "crAB"); - Partcrv("2", Q, P, "crAB"); + Circledata([O,P],["do","Num=100","notex"]); + Scaledata("1","crOP",4/3,1); + F.xy=[-sqrt(7),0]; + A=Ptcrv(9,sc1); + B=Ptcrv(16,sc1); + Listplot("1",[A,F,B],["da"]); + Partcrv("1",A,B,"sc1",["dr,3"]); + Shade(["part1","sg1"],0.1); + Arrowhead(B,"sc1",[1.5]); + Letter([A,"ne","A",B,"ne","B",F,"s2","F"]); \end{verbatim} -\vspace{5mm} + +%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -\begin{minipage}{45mm} -\begin{center} -\input{Fig/partcrv3}\\ -part1 の図 -\end{center} -\end{minipage} -\hspace{10mm} -\begin{minipage}{45mm} -\begin{center} -\input{Fig/partcrv4}\\ -part2 の図 -\end{center} -\end{minipage} -\\ -\\ +\vspace{\baselineskip} +\hypertarget{ptstart}{} +\item[関数] Ptstart(プロットデータ) , Ptend(プロットデータ) +\item[機能] プロットデータの最初の点,最後の点を取得する。 +\item[説明] プロットデータの最初の点,最後の点の座標を返す。 -例3:放物線$y=x^2$が円で切り取られる部分を描く。 +\vspace{\baselineskip} +【例】定義域を限定したグラフの両端の点を取得し線分ABを引く。 \begin{verbatim} - Circledata([A,B]); - Plotdata("1","x^2","x",["do"]); - tmp3=Intersectcrvs("crAB","gr1"); - Partcrv("2",tmp3_2,tmp3_1,"gr1",["dr,2"]); + Deffun("f(x)",["regional(y)","y=x^2","y"]); + Plotdata("1","f(x)","x",["do"]); + Plotdata("2","f(x)","x=[-1,2]"); + Lineplot("1",[Ptstart(gr2),Ptend(gr2)],["do"]); + Listplot("1",[Ptstart(gr2),Ptend(gr2)]); + Letter([A,"w2","A",B,"e2","B"]); \end{verbatim} -\input{Fig/partcrv} +\vspace{\baselineskip} +\begin{center} \input{Fig/ptstart} \end{center} -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +\vspace{\baselineskip} +\hypertarget{readoutdata}{} +\item[関数] ReadOutData(ファイル名) +\item[機能] 外部データをプロットデータとして読み込む +\item[説明] CやRなどで作成したKeTCindy形式のデータファイルを読み込む。 +引数を省略した場合は,Fheadで定義したファイル名のテキストファイルから読み込む。 -\hypertarget{putoncurve}{} -\item[関数] PutonCurve(点の名前, プロットデータ, options) -\item[機能] 曲線上に点を乗せる。 -\item[説明] 点が存在しない場合は新たに作る。すでにその点が存在する場合は,その点の$x$座標を使う。初期値の$x$座標のデフォルトは 0。\\ -optionsは[$x$座標の範囲]。\\ +ファイル名にはコンマで区切ってパスを与えることができる。たとえば, + +\verb|ReadOutData("/datafolder","file.txt"); | + +KeTCindy形式のデータとは + + 変数名// \\ + start// (リストの始まり) \\ + [ , , ], …. // (個々のデータ2か3次元) \\ + … \\ + end// (リストの終わり) \\ + start// (次のリストの始まり) \\ + … \\ + end// \\ + 変数名// \\ + start// \\ + … \\ + end// \\ + +の形式のテキストファイル。 + +\vspace{\baselineskip} +\hypertarget{writeoutdata}{} +\item[関数] WriteOutData(ファイル名,PDリスト) +\item[機能] 外部データに書き出す +\item[説明] プロットデータをKeTCindy形式のデータファイルに書き出す。出力先の 初期設定は作業フォルダ。 + +【例】 放物線と円のプロットデータを書き出す。 -例:アステロイド上の動点P をとる。 \begin{verbatim} - Paramplot("1","[2*cos(t)^3,2*sin(t)^3]","t=[0,2*pi]"); - PutonCurve("P","gp1",[-1,1]); + Plotdata("1", "x^2","x"); + Circledata("1",[[0,0],[1,0]]); + WriteOutData("figdata.txt",["gr1",gr1,"cr1",cr1]); \end{verbatim} -点Pがアステロイド上にでき,この点はドラッグするとアステロイド上を $-1 \leq x\leq 1$ の範囲で動かすことができる。\\ - \input{Fig/putoncurve.tex} +書き出されたファイルの中身は次のようになっている。 - \\ -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +\begin{verbatim} +gr1// +start// +[[-2.68843,7.22765],[-2.51807,6.34067],・・,[-2.00698,4.02798]]// +[[-1.83662,3.37318],[-1.66626,2.77642],・・,[-1.15518,1.33443]]// + 以下,同様にプロットデータが続く +[[5.82965,33.98479]]// +end// +cr1// +start// +[[1,0],[0.99211,0.12533],[0.96858,0.24869],・・,[0.80902,0.58779]]// + 以下,同様にプロットデータが続く +[[0.87631,-0.48175],[0.92978,-0.36812],・・,[1,0]]// +end//// +\end{verbatim} +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -\hypertarget{reflextdata}{} -\item[関数] Reflectdata(name , プロットデータ , 対称点または対称軸,options) -\item[機能] プロットデータの鏡映を作成 -\item[説明] プロットデータを指定された点または軸に関して対称移動する。\\ - 対称点は座標または,点の識別名。ただし,対称点を座標で示すときは要素がひとつのリストにする。\\ - 対称軸はリスト[ 点1, 点2 ] で指定\\ - optionsは線種\\ -\\ -例:中心A , 半径ABの円を描き,そのプロットデータを用いて,\\ - 点Cに関して対称な円を\\ - 点(-1,2)に関して対称な円を太い実線で\\ - 直線DEに関して対称な円を破線で\\ - それぞれ描く。\\ - 作成されるプロットデータの名称を rf1 ,rf2 ,rf3 とする。 +\vspace{\baselineskip} +\hypertarget{extractdata}{} +\item[関数] Extractdata(データ名,属性) +\item[機能] ReadOutData() で読み込んだデータに属性をつける。 +\item[説明] ReadOutData() で読み込んだデータには,線種などの属性がついていないので,そのままでは表示されない。そこで,この関数により属性をつけて表示する。 \begin{verbatim} - Circledata([A,B]);\\ - Reflectdata("1","crAB",[C]);\\ - Reflectdata("2","crAB",[[-1,2]],["dr,2"]);\\ - Reflectdata("3","crAB",[D,E],["da"]);\\ + ReadOutData("figdata.txt"); + Extractdata("gr1",["da"]); \end{verbatim} - \\ - \input{Fig/reflectdata} -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +\end{description} +%\newpage +% ======== 計算 ======================= +\subsection{計算} -\hypertarget{rotatedata}{} -\item[関数] Rotatedata(name , プロットデータ ,角度 , [中心 , options]) -\item[機能] プロットデータの位置を回転する -\item[説明] 図形を,中心で示された点の周りに回転する。角度は弧度法で与える\\ - 中心とoptionsはまとめてリストで与える。optionsは線種\\ +\begin{description} -\begin{spacing}{1.5} -例:中心A , 半径ABの円のプロットデータを描き,\\ - 点Cを中心に$\dfrac{\pi}{2} $だけ回転した円\\ - 点(1,5)を中心に$\dfrac{\pi}{3}$ だけ回転し,線を太くした円\\ - 点Dを中心に $-\dfrac{\pi}{3} $だけ回転し,破線にした円\\ - をそれぞれ描く。\\ - 作成されるプロットデータの名称を rt1 ,rt2 ,rt3 とする。 -\end{spacing} +\hypertarget{derivative}{} +\item[関数] Derivative(関数式 , 変数 , 値) +\item[機能] 関数の微分係数を求める +\item[説明] 関数式で与えられた関数の,「変数=値」における微分係数を求める。 + +値は,点の座標を用いることができる。点Aのx座標であれば, A.x とする。 + +\vspace{\baselineskip} +【例】3次曲線上の点Aで接線を引く。点A,Bは作図ツールで適当にとっておく。 \begin{verbatim} - Circledata([A,B]);\\ - Rotatedata("1","crAB",pi/2,[C]);\\ - Rotatedata("2","crAB",pi/3,[[1,5],"dr,2"]);\\ - Rotatedata("3","crAB",-pi/3,[D,"da"]);\\ + Deffun("f(x)",["regional(y)","y=x^3-4*x","y"]); + coef=Derivative("f(x)","x",A.x); + A.y=f(A.x); + B.y=coef*(B.x-A.x)+A.y; + Plotdata("1","f(x)","x",["Num=200"]); + Lineplot([A,B]); + Letter([A,"ne","A"]); \end{verbatim} - \\ - \input{Fig/rotatedata} +%\vspace{\baselineskip} + \begin{center} \input{Fig/derivative} \end{center} +%\vspace{\baselineskip} -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -\hypertarget{scaledata}{} -\item[関数] Scaledata(name , プロットデータ,x方向比率 , y方向比率 , [中心 , options]) -\item[機能] 図形の位置を拡大・縮小する -\item[説明] 図形の位置をプロットデータを用いて指定された比率で拡大・縮小する\\ - 中心とoptionsはまとめてリストで与える。optionsは線種\\ - -例:中心A,半径ABの円を描いておく。プロットデータ名は crABとなる。\\ - この円を\\ - 原点中心に$x$軸方向に3,$y$軸方向に2だけ平行移動する。\\ - Cを中心に$x$軸方向に3,$y$軸方向に2だけ平行移動し,実線で太く描く。\\ - 原点中心にベクトル$\overrightarrow{OD} $だけ平行移動し,破線で描く。 -\begin{verbatim} - Circledata([A,B]); - Scaledata("1","crAB",3,2,[[0,0]]); - Scaledata("2","crAB",3,2,[C,"dr,2"]); - Scaledata("3","crAB",D.x,D.y,[[0,0],"da"]); -\end{verbatim} - \input{Fig/scaledata}\\ - \\ -%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -\hypertarget{shade}{} -\item[関数] Shade(プロットデータのリスト , optionss) -\item[機能] 閉曲線で囲まれた領域を塗りつぶす。 -\item[説明] 第1引数には,閉曲線を与える曲線分のリストを並べる。\\ - optionssは,Cinderellaの画面上での描画色,濃さをリストで与える。\\ +なお,曲線のプロットデータを用いて,微分係数を求めることもできる。 + +書式は,Derivative(PD , 値) で,次のように使う。(上の例と同じ図ができる) -例:$y=2\sin x$のグラフと直線$y=1$(直線ABの一部)とで囲まれた部分に0.5の濃さで色を塗る。 \begin{verbatim} - Setax([7,"nw"]); - Plotdata("1","2*sin(x)","x",["Num=100"]); - Plotdata("2","2*sin(x)","x=[5*pi/6,13*pi/6]",["Num=100"]); - Lineplot("1",[[0,1],[1,1]]); - Listplot("1",[[5*pi/6,1],[13*pi/6,1]]); - Shade(["gr2","sg1"],[0.5]); + Deffun("f(x)",["regional(y)","y=x^3-4*x","y"]); + Plotdata("1","f(x)","x",["Num=200"]); + coef=Derivative("gr1","x="+A.x); + A.y=f(A.x); + B.y=coef*(B.x-A.x)+A.y; + Lineplot([A,B]); + Letter([A,"ne","A"]); \end{verbatim} -\begin{center} -\input{Fig/shade} -\end{center} -例:2つの放物線で囲まれた部分に0.2の濃さで色を塗る。Cinderellaの画面では赤で少し薄く塗る。 +また,曲線の接線については,\hyperlink{tangentplot}{Tangentplot}も参照されたい。 + +%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} + +\vspace{\baselineskip} +\hypertarget{integrate}{} +\item[関数] integrate(関数式 , 変数$=$範囲 , options) +\item[関数] integrate(PD , 範囲 , options) +\item[機能] 関数式またはプロットデータで与えられた関数(データ)の数値積分の値を求める。 +\item[説明] optionsは次の通り。 + + "Rule=s" : シンプソン法による。 初期設定は大島ベジェ公式。 + + "Num=数値" : 分割数の指定。初期値は 100 + +\vspace{\baselineskip} +【例】$f(x)=x^3-2x^2+2$ について,0から3までの定積分の値を求める。 \begin{verbatim} - Plotdata("1","x^2-1","x=[-sqrt(2),sqrt(2)]",["Num=100"]); - Plotdata("2","x^2/2","x=[-sqrt(2),sqrt(2)]",["Num=100"]); - Shade(["gr2","gr1"],[0.2,"Color=[1,0,0]","alpha->0.4"]); + f(x):=x^3-2*x^2+2; + val=Integrate("f(x)","x=[0,3]"); + println(val); //8.25が表示される \end{verbatim} -\begin{center} -\input{Fig/shade01} -\end{center} - -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -\newpage -\hypertarget{translatedata}{} -\item[関数] Translatedata(name , プロットデータ , 移動ベクトル , options) -\item[機能] プロットデータを平行移動する -\item[説明] プロットデータを移動ベクトルで示された分だけ平行移動する。\\ - nameはこれによってつくるプロットデータの名称を設定。単なる番号は不可。\\ - optionsは線種\\ -\\ -例:中心A,半径ABの円を描いておく。プロットデータ名は crABとなる。\\ - この円を\\ - x軸方向に2,y軸方向に3だけ平行移動する。\\ - ベクトル$\overrightarrow{OC} $だけ平行移動し,実線で太く描く。\\ - ベクトル$\overrightarrow{OD} $だけ平行移動し,破線で描く。\\ - 作成されるプロットデータの名称を tr1 , tr2 , tr3 とする。 +\vspace{\baselineskip} +【例】上の例と同じ関数をプロットデータで指定する。 \begin{verbatim} - Circledata([A,B]); - Translatedata("tr1","crAB",[2,3]); - Translatedata("tr2","crAB",C,["dr,2"]); - Translatedata("tr3","crAB",D,["da"]); + plotdata("1","x^3-2*x^2+2","x"); + println(Integrate("gr1",[0,3])); \end{verbatim} - \\ - \input{Fig/translatedata} + +\vspace{\baselineskip} +\hypertarget{inversefun}{} +\item[関数] Inversefun(関数 , 範囲 , 値) +\item[機能] 関数の逆関数値を求める +\item[説明] 関数は文字列で,関数式もしくは定義された関数名とする。\\ + 指定された範囲の中で逆関数値を求める。存在しない場合は一方の端点を戻り値とし,コンソールに「not found」と表示される。 + +数式処理ではなく数値探索のアルゴリズムを使っているので,単調関数でない場合は範囲をできるだけ狭くとるとよい。値が複数ある場合は,小さいほうが返される。 + + +\vspace{\baselineskip} +【例】\verb|x=Inversefun("sin(x)","x=[0,pi/2]",0.5);| + +実行すると $x=0.5236$ となる。 +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} \end{description} -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} \newpage -% =============================== -\subsection{微積分など} +%==========値の取得と入出力========================= +\subsection{値の取得と入出力} + + 計算値やプロットデータの値を取得したり,R用とのデータのやりとりをする。 \begin{description} +\hypertarget{bbdata}{} +\item[関数] BBdata(ファイル名,option) +\item[機能] 画像ファイルのサイズを求める +\item[説明] TeX文書において,inputgraphics コマンドで画像を貼り込むときのBBサイズを求める。 +TeX処理系の extractbb を用いて画像ファイルからBBデータを作り,テキストファイルとして作業ディレクトリに書き出す。これを読んで,コンソールに ingludegarphics のコマンドを書き出す。これをそのままコピーすればよい。 なお,bbの値は整数値ではなく,高精細の値を小数点以下2桁に四捨五入して示される。 画像ファイルは,PDFに限らず,PNG,JPGなどでもよい。 + +optionは,幅または高さの指定。 -\hypertarget{derivative}{} -\item[関数] Derivative(関数式 , 変数 , 値) -\item[機能] 関数の微分係数を求める -\item[説明] 関数式で与えられた関数の,「変数=値」における微分係数を求める。\\ -値は,点の座標を用いることができる。点Aのx座標であれば, A.x とする。\\ - -例:3次曲線上の点Aで接線を引く。点A,Bは作図ツールでとっておく。 -\begin{verbatim} - Deffun("f(x)",["regional(y)","y=x^3-4*x","y"]); - coef=Derivative("f(x)","x",A.x); - A.y=f(A.x); - B.y=coef*(B.x-A.x)+A.y; - Plotdata("1","f(x)","x",["Num=200"]); - Lineplot([A,B]); - Letter([A,"ne","A"]); -\end{verbatim} - \\ - \input{Fig/derivative}\\ - \\ -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +"w=40mm" で width=40mm が,"h=40mm" で height=40mm が付加される。 -\hypertarget{integrate}{} -\item[関数] integrate(関数式 , 変数 , 範囲 , options) -\item[関数] integrate(PD , 範囲 , options) -\item[機能] 関数式またはプロットデータで与えられた曲線の積分値を求める -\item[説明] 関数式またはプロットデータで与えられた曲線の,指定された範囲の定積分の値を求める。\\ -関数を与えたときのoptionsは次の通り。\\ - "Rule=s" : シンプソン法による。デフォルトは台形公式。\\ - "R=s"と略記できる。\\ - "Num=数値" : 分割数の指定。初期値は 100 \\ - 一般にはシンプソン法の方が精度がよいが,そうではない場合もある。\\ - \\ -例:$f(x)=x^3-2x^2+2$ について,0から3までの定積分の値を求める。\\ - CindyScriptでは,guess()関数を用いると,可能な場合は値を分数表記にする。 -\begin{verbatim} - f(x):=x^3-2*x^2+2; - println(guess(Integrate("f(x)","x",[0,3],["Num=200"]))); - println(guess(Integrate("f(x)","x",[0,3],["Num=5","Rule=s"]))); -\end{verbatim} -を実行すると,コンソールに結果が表示される。シンプソン法では 33/4 と表示される。 -整関数の場合,シンプソン法では分割数がかなり少なくても高い精度が得られる。\\ -整関数でない場合,分割数を区間幅の10の整数倍にするとよい精度になる。\\ -たとえば,$f(x)=\sqrt{x} $の場合,区間が [2,9] であれば,Num=100 よりも Num=70 の方が精度がよい。\\ - \\ - プロットデータを与えたときは,アルゴリズムが異なるので上記オプションは無効。\\ -例:上の例と同じ関数をプロットデータで指定する。 -\begin{verbatim} - plotdata("1","x^3-2*x^2+2","x"); - println(Integrate("gr1",[0,3])); -\end{verbatim} - \\ - プロットデータで与える方法は,Rを利用して正規分布曲線を描いたときなどに記述が楽になる。\hyperlink{plotdatar}{PlotdataR()} の項を参照のこと。\\ - \\ - -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -\newpage -\hypertarget{invesefun}{} -\item[関数] Inversefun(関数 , 範囲 , 値) -\item[機能] 関数の逆関数値を求める -\item[説明] 関数は文字列で,関数式もしくは定義された関数名とする。\\ - 指定された範囲の中で逆関数値を求める。存在しない場合は一方の端点を戻り値とし,コンソールに「not found」と表示される。\\ - 数式処理ではなく数値探索のアルゴリズムを使っているので,単調関数でない場合は範囲をできるだけ狭くとるとよい。値が複数ある場合は,小さいほうが返される。\\ - -例:\verb|x=Inversefun("sin(x)","x=[0,pi/2]",0.5);|\\ - 実行すると $x=\dfrac{\pi}{6}$ となる。 -\begin{verbatim} - Deffun("f(x)", ["regional(y)","y=sin(x)","y"]); - x=Inversefun("f(x)","x=[0,pi/2]",0.5); -\end{verbatim} - でも同じ結果が返される。\\ - \verb|x=Inversefun("f(x)","x=[pi/3,pi]",0.97);|\\ - は区間設定が不適切で正しい結果が得られない。\\ - \\ -例:アステロイド上に点Pをとり,Pの$x$座標から,逆関数値$t$を求めて接線を引く。\\ - できた点Pはドラッグしてアステロイド上を動かすことができる。 -\begin{verbatim} - Deffun("fx(t)", ["regional(x)","x=2*cos(t)^3","x"]); - Deffun("fy(t)", ["regional(y)","y=2*sin(t)^3","y"]); - Paramplot("1","[fx(t),fy(t)]","t=[0,2*pi]"); - PutonCurve("P",gp1,1); - if(P.y>=0,range="t=[0,pi]",range="t=[pi,2*pi]"); - t0=Inversefun("fx(t)",range,P.x); - dx=Derivative("fx(t)","t",t0); dy=Derivative("fy(t)","t",t0); - Putpoint("Q",[0,0],P.xy+[dx,dy]); - Lineplot([P,Q]); - Drawpoint(P); - Letter(P,"ne","P"); -\end{verbatim} - \input{Fig/inversefun} +\vspace{\baselineskip} +【例】 + +\vspace{\baselineskip} +\includegraphics[bb=0.00 0.00 562.03 124.01,width=10cm]{Fig/bbdata.pdf} + + +\vspace{\baselineskip} +\hypertarget{cindyname}{} +\item[関数] Cindyname() +\item[機能] 作図中のファイル名を取得する。 +\item[説明] たとえば,現在作図しているファイル名が 「polygon.cdy」のとき,"polygon" を返す。 + +\vspace{\baselineskip} +\hypertarget{crossprod}{} +\item[関数] Crossprod(リスト,リスト) +\item[機能] 2つのベクトルの外積を求める。 +\item[説明] Cindyscriptの組み込み関数 cross(リスト,リスト)と同じ。 + +\vspace{\baselineskip} +【例】\verb|Crossprod([1,0,0],[1,1,1]);| + + 結果は [0,-1,1]\\ + +\vspace{\baselineskip} +\hypertarget{dotprod}{} +\item[関数] Dotprod(リスト,リスト) +\item[機能] 2つのベクトルの内積を求める。 +\item[説明] Cindyscriptでは,積の演算で内積が求められる。 + +\vspace{\baselineskip} + 【例】\verb|Dotprod([1,2,3],[1,-1,1]);| + + 結果は 2 + + [1,2,3]*[1,-1,1] でも同じ結果を得る。 + +\vspace{\baselineskip} +\hypertarget{findarea}{} +\item[関数] Findarea(プロットデータ) +\item[機能] プロットデータで囲まれる部分の面積を求める。 +\item[説明] 閉曲線をなすプロットデータで囲まれる部分の面積を求める。大島のベジェ公式を用いている。 + +\vspace{\baselineskip} +【例】楕円の面積を求めて表示する。 +\begin{verbatim} + Paramplot("1","[3*cos(t),2*sin(t)]","t=[0,2*pi]"); + area=Findarea("gp1"); + println(Sprintf(area,6)); +\end{verbatim} + +コンソールに面積 18.849536 が表示される。 + +\vspace{\baselineskip} +\hypertarget{findlength}{} +\item[関数] Findlength(プロットデータ) +\item[機能] プロットデータの曲線の長さを求める。 +\item[説明] プロットデータが描く曲線の長さを求める。大島のベジェ公式を用いている。 + +\vspace{\baselineskip} +【例】円周の長さを求めて表示する。 +\begin{verbatim} + Circledata("1",[[0,0],[2,0]]); + len=Findlength("cr1"); + println(Sprintf(len,6)); +\end{verbatim} + +コンソールに 12.558097 が表示される。 + +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} \end{description} \newpage -%=================================== +%==============作表===================== \subsection{作表} \begin{description} \hypertarget{tabledata}{} -\item[関数] Tabledata(name , 縦横データ, 除外線 , options) -\item[機能] 表の枠を作成し,表のデータlist を返す -\item[説明] Cinderellaの描画面上に左下を原点とする表を作成する。\\ - 他の関数との引数の整合性,\ketpic のコマンドとの整合性などから,先頭にnameの引数をつけるが,実際にはあまり利用しないので,空文字""でもよい。\\ - optionsは線種と"notex"など,および "Rng=n"。\\ - "Rng=n" をつけると,NE,SWによる出力領域指定が有効になる。つけない場合は,表の部分だけが出力される。\\ - 縦横データには,次の2通りの書式がある。\\ - \\ -(1) 横のセル数 , 縦のセル数 , 表の横幅 , 表の縦幅 を指定する。\\ - 例: \verb|Tabledata("",4,5,80,50,[]);|\\ -(2) 横と縦の幅を指定したリストを使う\\ - 例: \verb|Yoko=[20,20,20,20];|\\ - \verb|Tate=[10,10,10,10,10];|\\ - \verb|Tabledata("",Yoko,Tate,[]);|\\ - 上の2つのスクリプトは同じ表を作成する。幅はCinderellaの描画面の0.1を単位とする。\\ - 作成された表には,行,列の制御点がつく。画面上では,横罫線の番号 r0,r1,・・・ 縦罫線の番号 c1,c2,・・・と見ることもできる。また,縦幅,横幅が数字で示される。ただし,これらは\TeX には出力されない。\\ - また,作表はCinderellaの描画面上では座標平面上に置かれるが,\TeX への出力は座標平面上には置かないことが多いので,座標軸は非表示としている。\\ - -\includegraphics[bb=0 0 807 499 , width=6cm]{Fig/table01.png} → -\input{Fig/table02}\\ - - 表のサイズ,行幅,列幅は,作成後にそれぞれの制御点をドラッグすることにより任意に変えることができる。\\ - - 除外線は,除外するセルの罫線を,rとc で位置指定する。\\ - 横罫線の場合,横罫線の番号,範囲(から,まで)\\ - 縦罫線の場合,縦罫線の番号,範囲(から,まで)\\ -とする。\\ - - 例:\verb|Rmv=["r1c0c1","c3r0r1","c3r3r5","r4c2c4"];|\\ - \verb|Tabledata("",4,5,80,50,Rmv);|\\ - で,次の表ができる。\\ - \\ - \includegraphics[bb=0 0 784 503 , width=6cm]{Fig/table03.png}\\ - 除外する罫線がない場合は,空リストとする。\\ - - 例:\verb|Tabledata("",Yoko,Tate,[]);|\\ -\\ - Tabledata()関数は,制御点r0,r1,・・・,c0,c1,・・・ がなければ新しく作り,すでに存在する場合はそのままとする。したがって,一度表を作成したのち,行数・列数を修正して作り直す場合は,一度既存の点を消去する必要がある。そのためには,「すべての点を選択する」ツールをクリックして点を消去するのがよい。クリックすると,消去後すぐに新規作成される。(誤って「すべての要素のを選択する」を選ばないこと)\\ - 他の点が描画されている場合は,表の部分だけドラッグで選択するか,表示メニューの「式による表示」で一覧表を出して,制御点を選択して消去する。\\ - ただし,行数,列数が多すぎた場合は,必ずしも作り直す必要はない。Settable() 関数により,実際に書き出す表の範囲を指定できる。\\ +\item[関数] Tabledata(name , 縦横データ, 除外線 , options) +\item[機能] 表の枠を作成し,表のデータlist を返す +\item[説明] Cinderellaの描画面上に左下を原点とする表を作成する。 + +他の関数との引数の整合性,\ketpic のコマンドとの整合性などから,先頭にnameの引数をつけるが,実際にはあまり利用しないので,空文字""でもよい。 + +除外線がない場合は空リストを指定する。(必須) + +optionsは線種と"notex"など,および "Rng=n"。 + +"Rng=n" をつけると,NE,SWによる出力領域指定が有効になり,NE,SWをドラッグして出力領域を変更できる。(初期状態は,表の右上と左下)つけない場合は,表の部分だけが出力される。 + +縦横データには,次の2通りの書式がある。いずれも同じ表を作成する。 + +\vspace{\baselineskip} +(1) 横のセル数 , 縦のセル数 , 表の横幅 , 表の縦幅 を指定する。除外線なし。 + +\begin{verbatim} + Tabledata("",4,5,80,50,[]); +\end{verbatim} + +(2) 横と縦の幅を指定したリストを使う +\begin{verbatim} + Yoko=[20,20,20,20]; + Tate=[10,10,10,10,10]; + Tabledata("",Yoko,Tate,[]); + \end{verbatim} + +幅はCinderellaの描画面の0.1を単位とする。 + +作成された表には,行,列の制御点がつく。画面上では,横罫線の番号 r0,r1,・・・ 縦罫線の番号 c0,c1,・・・と見ることもできる。また,縦幅,横幅が数字で示される。ただし,これらは\TeX には出力されない。 +また,作表はCinderellaの描画面上では座標平面上に置かれるが,\TeX への出力は座標平面上には置かないことが多いので,座標軸は非表示としている。 + +\hspace{25mm} 描画面 \hspace{45mm} TeX + +\hspace{5mm}\includegraphics[bb=0 0 403.52 249.51 , width=5cm]{Fig/table01.pdf} \hspace{10mm} \input{Fig/table02} + -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} + 表のサイズ・行幅・列幅は,作成後にそれぞれの制御点をドラッグすることにより任意に変えることができる。 +\vspace{\baselineskip} +除外線は,除外するセルの罫線を,rとc で位置指定する。 + +\hspace{10mm} 横罫線の場合,横罫線の番号,範囲(から,まで) + +\hspace{10mm} 縦罫線の場合,縦罫線の番号,範囲(から,まで) + +とする。 + +\vspace{\baselineskip} +【例】4つの罫線を非表示にする +\begin{verbatim} + Rmv=["r1c0c1","c3r0r1","c3r3r5","r4c2c4"]; + Tabledata("",4,5,80,50,Rmv); +\end{verbatim} + +で,次の表ができる。 + +\vspace{\baselineskip} +\hspace{20mm} \includegraphics[bb=0 0 392.02 251.51 , width=6cm]{Fig/table03.pdf} + +\vspace{\baselineskip} +<補足> + +Tabledata()関数は,制御点r0,r1,・・・,c0,c1,・・・ がなければ新しく作り,すでに存在する場合はそのままとする。したがって,一度表を作成したのち,行数・列数を修正して作り直す場合は,一度既存の点を消去する必要がある。そのためには,「すべての点を選択する」ツールをクリックして点を消去するのがよい。クリックすると,消去後すぐに新規作成される。(誤って「すべての要素を選択する」を選ばないこと) + +他の点が描画されている場合は,表の部分だけドラッグで選択するか,表示メニューの「式による表示」で一覧表を出して,制御点を選択して消去する。 + +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} + +\vspace{\baselineskip} \hypertarget{tabledatalight}{} -\item[関数] Tabledatalight(name , 縦横データ, 除外線 , options) -\item[機能] 幾何点を持たない表の枠を作成し,表のデータlist を返す -\item[説明] Tabledata()がCinderellaの幾何点を生成するのに対し,こちらは幾何点を生成しない。\\ - 幾何点を作成しないメリットは,スクリプトだけで縦横幅を変更できること。デメリットはインタラクティブな微調整ができないこと。\\ - optionとして,ラベルのスキップ値(スキップするところは表示されない)を指定することができる。ただし,ラベルはCinderellaの画面上だけの問題。\\ - \\ - 例: \verb|Yoko=[20,20,20,20];|\\ - \verb|Tate=[10,10,10,10,10];|\\ - \verb|Tabledatalight("",Yoko,Tate,[],[2]);|\\ - とすると,r1,r3,c1,c2 が非表示となる。\\ - - -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} - -%\hypertarget{tableseg}{} -%\item[関数] Tableseg( 罫線リスト, 線種) -%\item[機能] 罫線の線種を指定する -%\item[説明] 罫線リストを与えて線種を指定する\\ -% 罫線リストは,["r1c0c1","r4c2c4"] のように与える。\\ -% 破線・点線にする場合は,Tabledata()であらかじめ除外しておく。\\ - -% 例: \verb|Rmv=["r1c0c1","c3r0r1","c3r3r5","r4c2c4"];|\\ -% \verb|Tabledata("",4,5,80,50,Rmv);|\\ -% \verb|Tableseg(["r1c0c1","r4c2c4"],["da"]);|\\ -% -% \input{Fig/tableseg}\\ -% -% 注)R0,C0,・・は実際には表示されない\\ -% \\ +\item[関数] Tabledatalight(name , 縦横データ, 除外線 , options) +\item[機能] 幾何点を持たない表の枠を作成し,表のデータlist を返す +\item[説明] Tabledata()がCinderellaの幾何点を生成するのに対し,Tabledatalight()は幾何点を生成しない。 + +幾何点を作成しないメリットは,スクリプトだけで全体の縦横幅を変更できること。デメリットはインタラクティブな微調整ができないこと。 + +optionとして,ラベルのスキップ値(スキップするところは表示されない)を指定することができる。ただし,ラベルはCinderellaの画面上だけの問題。 + +\vspace{\baselineskip} + 【例】1つおきにスキップして,r1,r3,c1,c2 を非表示とする。 +\begin{verbatim} + Yoko=[20,20,20,20]; + Tate=[10,10,10,10,10]; + Tabledatalight("",Yoko,Tate,[],[2]); +\end{verbatim} + +\vspace{\baselineskip} \hypertarget{changetablestyle}{} -\item[関数] ChangeTablestyle(罫線リスト, 変更オプション) -\item[機能] Table の罫線の描画オプションを変更 -\item[説明] 罫線の部分的に指定して描画オプションを変更できる。\\ - \\ -例:\verb|ChangeTablestyle(["r0c0c3"],["da"]);| \\ - の実行により、r0の位置の横線がc0からc3まで破線に変わる。\\ - \verb|ChangeTablestyle(["c1r0r2"],["da"]);|\\ - の実行により、c1の位置の縦線がr0からr2まで破線に変わる。\\ - \\ +\item[関数] ChangeTablestyle(罫線リスト, 変更オプション) +\item[機能] Table の罫線の描画オプションを変更 +\item[説明] 罫線の部分的に指定して描画オプションを変更できる。 + +\vspace{\baselineskip} +【例】 + +\verb|Tabledatalight("",[10,20,10,20],[10,10,10],[]);|\\ +\verb|ChangeTablestyle(["r1c0c4"],["da"]);|\\ +\verb|ChangeTablestyle(["r2c0c2","c1r0r3"],["nodisp"]);| + +\vspace{\baselineskip} +\hspace{20mm}\includegraphics[bb=0.00 0.00 324.00 174.00,width=50mm]{Fig/changetable.pdf} + +\vspace{\baselineskip} \hypertarget{findcell}{} -\item[関数] Findcell(列番号, 行番号) -\item[機能] セルの情報list(中心,横幅/2,縦幅/2)を返す -\item[説明] 列番号,行番号は左上のセルを1列1行として数える。 \\ +\item[関数] Findcell(列番号, 行番号) +\item[機能] セルの情報list(中心,横幅/2,縦幅/2)を返す +\item[説明] 列番号,行番号は左上のセルを1列1行として数える。 -例:\verb|Tabledata(4,5,80,50,[]);|\\ - \verb|println(Findcell(tb,2,1));|\\ - とすると,2列1行のセルの中心の座標と横幅の半分,縦幅の半分の値がリストとしてコンソールに表示される。結果は [[3,4.5],1,0.5]\\ +\vspace{\baselineskip} +【例】\verb|Tabledata(4,5,80,50,[]);| -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} + \verb|println(Findcell(tb,2,1));| + + とすると,2列1行のセルの中心の座標と横幅の半分,縦幅の半分の値がリストとしてコンソールに表示される。結果は [[3,4.5],1,0.5] +\vspace{\baselineskip} \hypertarget{putcell}{} -\item[関数] Putcell (列番号, 行番号, 位置, 文字データ) -\item[機能] セルに文字列を入れる -\item[説明] 複数のセルにまたぐ位置指定の場合,列番号,行番号は,セル左上と右下の制御点の名称で指定する。\\ - 位置は c, r, l, t, b (中央center , 右right , 左left , 上top , 下bottom )\\ - 位置の例を以下に示す。 -\begin{verbatim} - Tabledata("",5,2,100,40,["c1r1r2","c4r1r2"]); - Putcell(1,1,"c","A"); - Putcell(2,1,"r","B"); - Putcell(3,1,"l","C"); - Putcell(4,1,"t","D"); - Putcell(5,1,"b","E"); - Putcell(c0r1,c2r2,"c","F"); - Putcell(c2r1,c3r2,"lb","G"); - Putcell(c3r1,c5r2,"rt","H"); -\end{verbatim} - \\ - \input{Fig/putcell}\\ - ※R0,C0,・・は実際には表示されない\\ - -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +\item[関数] Putcell (列番号, 行番号, 位置, 文字データ) +\item[機能] セルに文字列を入れる +\item[説明] 複数のセルにまたぐ位置指定の場合,列番号,行番号は,セル左上と右下の制御点の名称で指定する。 -\hypertarget{putcol}{} -\item[関数] PutcoL (列番号, 文字位置,文字列リスト) -\item[機能] 1列に順に文字を書き入れる -\item[説明] 列番号で指定した列に,第1行から順に文字列リストの文字を書き入れる\\ - 数の場合はダブルクウォートでくくらなくてもよい。\\ - セルを飛ばす場合は,ヌル文字列 "" を書く。\\ +位置は c, r, l, t, b (中央center , 右right , 左left , 上top , 下bottom ) + +位置の例を以下に示す。 +\begin{verbatim} + Tabledata("",5,2,100,40,["c1r1r2","c4r1r2"]); + Putcell(1,1,"c","A"); + Putcell(2,1,"r","B"); + Putcell(3,1,"l","C"); + Putcell(4,1,"t","D"); + Putcell(5,1,"b","E"); + Putcell("c0r1","c2r2","c","F"); + Putcell("c2r1","c3r2","lb","G"); + Putcell("c3r1","c5r2","rt","H"); +\end{verbatim} +\vspace{\baselineskip} + \begin{center} \input{Fig/putcell} \end{center} + + ※r0,c0,・・は画面に表示される番号 +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +\vspace{\baselineskip} +\hypertarget{putcol}{} +\item[関数] PutcoL (列番号, 文字位置,文字列リスト) +\item[機能] 1列に順に文字を書き入れる +\item[説明] 列番号で指定した列に,第1行から順に文字列リストの文字を書き入れる\\ + 数の場合はダブルクウォートでくくらなくてもよい。 + + セルを飛ばす場合は,ヌル文字列 "" を書く。 + +\vspace{\baselineskip} \hypertarget{putcolexpr}{} -\item[関数] PutcoLexpr (列番号, 文字位置,文字列リスト) -\item[機能] 1列に順に文字を書き入れる -\item[説明] 文字列に\TeX 書式を使うことができる\\ +\item[関数] PutcoLexpr (列番号, 文字位置,文字列リスト) +\item[機能] 1列に順に文字を書き入れる +\item[説明] 文字列に\TeX 書式を使うことができる +\vspace{\baselineskip} \hypertarget{putrow}{} -\item[関数] Putrow (行番号, 文字位置,文字列リスト) -\item[機能] 1行に順に文字を書き入れる -\item[説明] 行番号で指定した行に,第1列から順に文字列リストの文字を書き入れる。\\ +\item[関数] Putrow (行番号, 文字位置,文字列リスト) +\item[機能] 1行に順に文字を書き入れる +\item[説明] 行番号で指定した行に,第1列から順に文字列リストの文字を書き入れる。 +\vspace{\baselineskip} \hypertarget{putrowexpr}{} -\item[関数] Putrowexpr (行番号, 文字位置,文字列リスト) -\item[機能] 1行に順に文字を書き入れる -\item[説明] 文字列に\TeX 書式を使うことができる\\ +\item[関数] Putrowexpr (行番号, 文字位置,文字列リスト) +\item[機能] 1行に順に文字を書き入れる +\item[説明] 文字列に\TeX 書式を使うことができる 文字を入れる例を示す。 \begin{verbatim} - Tabledata("",5,3,100,45,["c1r1r2","r1c2c3","r2c2c3"]); - PutcoL(3,"c",["A","B","C"]); - PutcoLexpr(4,"l",["x^2","y=\sqrt{x^3}"]); - Putrow(1,"c",[1,"二"]); - Putrowexpr(3,"c",["","\frac{\pi}{2}","","","\sum{x^2}"]); + Tabledata("",5,3,100,45,["c1r1r2","r1c2c3","r2c2c3"]); + PutcoL(3,"c",["A","B","C"]); + PutcoLexpr(4,"l",["x^2","y=\sqrt{x^3}"]); + Putrow(1,"c",[1,"二"]); + Putrowexpr(3,"c",["","\frac{\pi}{2}","","","\sum{x^2}"]); \end{verbatim} + \vspace{\baselineskip} + \begin{center} \input{Fig/putcol} \end{center} - \input{Fig/putcol}\\ + ※ r0,c0,・・は画面に表示される番号。 - ※ R0,C0,・・は実際には表示されない\\ - また,この例では,C4列の罫線を,制御点C4をドラッグすることにより\\ - 右にずらしている。\\ -\\ +グラフや文を入れた表の作成例 -グラフや文を入れた表の作成例\\ - - PutcoLexpr(),Putrowexpr() では,数式だけでなく,一般の\TeX の文を入れることができる。\\ - また,グラフの位置を適当に合わせて描画することにより,表のセルの中にグラフを入れることができる。\\ - - 例:2次関数のグラフと2次方程式の判別式の関係\\ - セルの中にグラフを描く例。実際には,セルの位置にグラフを描いているだけ。 -\begin{verbatim} - Tabledata("",3,3,120,90,["r1c0c3","r2c0c3"],["dr,2"]); - ChangeTablestyle(["r1c0c3"],["dr"]); - ChangeTablestyle(["r2c0c3"],["da"]); - Plotdata("1","(x-2)^2+1.5","x=[0.5,3.5]"); - Plotdata("2","(x-6)^2+2","x=[4.5,7.5]"); - Plotdata("3","(x-10)^2+2.5","x=[8.5,11.5]"); - Listplot([A,B]); - Listplot([C,D]); - Listplot([E,F]); - Putrowexpr(1,"c",["D>0","D=0","D<0"]); - Putrow(2,"c",["2点で交わる","接する","共有点なし"]); - Letter(G,"c","判別式と$x$軸の交点"); -\end{verbatim} - \\ - \input{Fig/tablesample1}\\ -\\ -注意:この例を実行するとわかるが,セルのサイズと文字サイズの関係などにより,Cinderellaの画面上と\TeX への書き出しは必ずしも同一にはならない。\\ - \\ -例:増減表とグラフ\\ - - 関数の増減表とグラフを1つの表の中に入れた例。 -\begin{verbatim} - Tate=[6,6,10,6,10,6,40]; - Yoko=[30,6,6,6]; - Rmv=["c1r0r1","c2r0r1","c3r0r1","c4r0r1","c5r0r1", "r1c6c7","r2c6c7","r3c6c7"]; - Tabledata("",Tate,Yoko,Rmv,["dr"]); - Tlistplot("23d",["c1r2","c2r3"]); - Tlistplot("23u",["c1r3","c2r2"]); - Putrowexpr(2,"c",["x",0,"\cdots","\tfrac{1}{4}","\cdots",4]); - Putrowexpr(3,"c",["y`","","-",0,"+"]); - Putrowexpr(4,"c",["y",0,"\searrow","-\tfrac{1}{4}","\nearrow",2]); - Putcell(1,1,"l2t2","{\small\begin{minipage}{44mm}$y=x-\sqrt{x}$\\$y`= - \dfrac{2\sqrt{x}-1}{2\sqrt{x}}=0$|より\vspace{1mm}\\\hspace*{2zw}$x= - \dfrac{1}{4}$\vspace{1mm}\\増減表は次のようになる\end{minipage}}" ); - Plotdata("1","x-sqrt(x)","x=[0,3]",["do","notex"]); - Listplot("2",[[0,0],[3,0]],["do","notex"]); - Listplot("3",[[0,-0.5],[0,3]],["do","notex"]); - Translatedata("1","gr1",[4.9,1],["dr"]); - Translatedata("2","sg2",[4.9,1],["dr"]); - Translatedata("3","sg3",[4.9,1],["dr"]); - Letter(Ptend(tr2),"e1","\small{$x$}"); - Letter(Ptend(tr3),"n1","\small{$y$}"); - Letter(Ptstart(tr2),"w1","\small O"); - Expr(Ptend(tr1),"nw-2","y=x-\sqrt{x}"); -\end{verbatim} - \input{Fig/tablesample2} - \\ - - 例:凹凸を含めた増減表 -\begin{verbatim} - Tabledata("",8,4,80,40,[]); - Putrowexpr(1,c,["x","\cdots","-1","\cdots","0","\cdots","1","\cdots"]); - Putrowexpr(2,c,["y`","+","+","+","0","-","-","-"]); - Putrowexpr(3,c,["y``","+","0","-","-","-","0","+"]); - Putrowexpr(4,c,["y","\nelarrow","\frac{1}{\sqrt{e}}","\nerarrow", - "1","\serarrow","\frac{1}{\sqrt{e}}","\selarrow"]); -\end{verbatim} - \input{Fig/zogen3}\\ - \\ - ここで,凹凸を示す矢印は,ketpic.sty で定義されているものである。 - - nelarrow,nerarrow,selarrow,serarrow,NELarrow,NERarrow,SELarrow,SERrarrow がある。\\ - - 先頭の ne,se で北東・南東(右上・右下)次の r,l は回転の向き(r:right:反時計回り,l:left:時計回り)の矢印(arrow)と覚えるとよい。 - - 直線系の矢印は\\ - NEarrow,SEarrrow\\ - 少しずつ違うので試されたい。 - - なお,これらの矢印はCindyTeXにはないので,Cinderellaの描画面には表示されない。 - \\ -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} - -\hypertarget{settable}{} -\item[関数] Settable((左上) , 右下) -\item[機能] 表データを書き出す -\item[説明] 指定された範囲で表の枠線を書き出す。指定しなければ全体が書き出される。\\ - 表の出力範囲は,NE,SWによる描画範囲にかからわず,全体もしくはSettable()で指定した範囲となる。\\ - 位置は,制御点による位置表示で,c2r3 のように指定する。\\ - c,rは小文字で c,r の順。\\ - 左上を省略すると,デフォルトの c0r0 と解釈される。\\ - -例:\verb|Tabledata("",4,5,80,50,[]);|\\ - \verb|repeat(5,s, Putrow(s,"c",[s*4-3,s*4-2,s*4-1,s*4]));|\\ - \verb|Settable(c4r5);|\\ - - 2行目で各セルに数字を入れている。\\ - 左上と右下(罫線C4とR5の交点)を対角とする範囲,すなわち全体を書き出す。\\ - \verb|Settable(c3r4);|\\ - とすると,左上と右下(罫線C3とR4の交点)を対角とする範囲。\\ - 出力するのは罫線だけなので,セルの中身はそのまま表示される。(下図左)\\ - \verb|Settable(c1r1,c3r4);|\\ - とすると,左上(罫線C1とR1の交点)と右下(罫線C3とR4の交点)を対角とする範囲。\\ - 罫線だけなので,セルの中身はそのまま表示される。(下図右)\\ -\\ - \input{Fig/settable1} \input{Fig/settable2}\\ - \\ - \\ + PutcoLexpr(),Putrowexpr() では,数式だけでなく,一般の\TeX の文を入れることができる。 + また,グラフの位置を適当に合わせて描画することにより,表のセルの中にグラフを入れることができる。 + +\vspace{\baselineskip} + 【例】2次関数のグラフと2次方程式の判別式の関係 + +セルの中にグラフを描く例。実際には,セルの位置にグラフを描く。 + +x軸を描くための点A〜Fは作図ツールでとっておく。 + +スクリプトを実行して表ができたら,制御点をドラッグしてサイズを調整し,点A〜Fもドラッグして軸と放物線の共有状況を示すようにする。 + +\vspace{\baselineskip} +\begin{verbatim} + Tabledata("",3,3,120,60,[],["dr,2"]); + ChangeTablestyle(["r1c0c3"],["dr"]); + ChangeTablestyle(["r2c0c3"],["da"]); + Plotdata("1","(x-2)^2+0.5","x=[0.5,3.5]"); + Plotdata("2","(x-6)^2+1","x=[4.5,7.5]"); + Plotdata("3","(x-10)^2+1.5","x=[8.5,11.5]"); + Listplot([A,B]); + Listplot([C,D]); + Listplot([E,F]); + Putrowexpr(1,"c",["D>0","D=0","D<0"]); + Putrow(2,"c",["2点で交わる","接する","共有点なし"]); +\end{verbatim} + +\vspace{\baselineskip} + \begin{center}\scalebox{0.9}{ \input{Fig/tablesample1}} \end{center} + + +\vspace{\baselineskip} +【例】増減表とグラフ + + 関数の増減表とグラフを1つの表の中に入れた例。 +\begin{verbatim} + Tate=[6,6,10,6,10,6,40]; + Yoko=[30,6,6,6]; + Rmv=["c1r0r1","c2r0r1","c3r0r1","c4r0r1","c5r0r1", "r1c6c7", + "r2c6c7","r3c6c7"]; + Tabledata("",Tate,Yoko,Rmv,["dr"]) + Tlistplot("23d",["c1r2","c2r3"]); + Tlistplot("23u",["c1r3","c2r2"]); + Putrowexpr(2,"c",["x",0,"\cdots","\tfrac{1}{4}","\cdots",4]); + Putrowexpr(3,"c",["y`","","-",0,"+"]); + Putrowexpr(4,"c",["y",0,"\searrow","-\tfrac{1}{4}","\nearrow",2]); + Putcell(1,1,"l2t2","{\small\begin{minipage}{44mm}$y=x-\sqrt{x}$\\$y`= + \dfrac{2\sqrt{x}-1}{2\sqrt{x}}=0$|より\vspace{1mm}\\\hspace*{2zw}$x= + \dfrac{1}{4}$\vspace{1mm}\\増減表は次のようになる\end{minipage}}" ); + Plotdata("1","x-sqrt(x)","x=[0,3]",["do","notex"]); + Listplot("2",[[0,0],[3,0]],["do","notex"]); + Listplot("3",[[0,-0.5],[0,3]],["do","notex"]); + Translatedata("1","gr1",[4.9,1],["dr"]); + Translatedata("2","sg2",[4.9,1],["dr"]); + Translatedata("3","sg3",[4.9,1],["dr"]); + Letter(Ptend(tr2),"e1","\small{$x$}"); + Letter(Ptend(tr3),"n1","\small{$y$}"); + Letter(Ptstart(tr2),"w1","\small O"); + Expr(Ptend(tr1),"nw-2","y=x-\sqrt{x}"); +\end{verbatim} +\begin{center} \input{Fig/tablesample2} \end{center} + +\vspace{\baselineskip} + 【例】凹凸を含めた増減表 +\begin{verbatim} + Tabledata("",8,4,80,40,[]); + Putrowexpr(1,c,["x","\cdots","-1","\cdots","0","\cdots","1","\cdots"]); + Putrowexpr(2,c,["y`","+","+","+","0","-","-","-"]); + Putrowexpr(3,c,["y``","+","0","-","-","-","0","+"]); + Putrowexpr(4,c,["y","\nelarrow","\frac{1}{\sqrt{e}}","\nerarrow", + "1","\serarrow","\frac{1}{\sqrt{e}}","\selarrow"]); +\end{verbatim} +\begin{center} \input{Fig/zogen3} \end{center} +%\vspace{\baselineskip} +ここで,凹凸を示す矢印は,ketpic.sty で定義されているものである。 + +nelarrow,nerarrow,selarrow,serarrow,NELarrow,NERarrow,SELarrow,SERrarrow がある。先頭の ne,se で北東・南東(右上・右下)次の r,l は回転の向き(r:right:反時計回り,l:left:時計回り)の矢印(arrow)と覚えるとよい。直線系の矢印は NEarrow,SEarrrow。 少しずつ違うので試されたい。 + +なお,これらの矢印はCindyTeXにはないので,Cinderellaの描画面には表示されない。 + +%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} + +\vspace{\baselineskip} \hypertarget{tgrid}{} -\item[関数] Tgrid(セルラベル) -\item[機能] 表のセルの座標を返す -\item[説明] 指定されたセルの左上の座標を返す。実際には,セルラベルは罫線を示しているので,指定した罫線の交点(格子点)ということもできる。\\ - \\ +\item[関数] Tgrid(セルラベル) +\item[機能] 表のセルの座標を返す +\item[説明] 指定されたセルの左上の座標を返す。実際には,セルラベルは罫線を示しているので,指定した罫線の交点(格子点)ということもできる。 + +\vspace{\baselineskip} \hypertarget{tlistplot}{} -\item[関数] Tlistplot(セルラベル1,セルラベル2) -\item[機能] 指定された2つの格子点を線分で結ぶ -\item[説明] セルに斜線を引くのに用いる。\\ - 例:\verb|Tlistplot(["c0r1","c1r2"]);| - \\ -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +\item[関数] Tlistplot(セルラベル1,セルラベル2) +\item[機能] 指定された2つの格子点を線分で結ぶ +\item[説明] セルに斜線を引くのに用いる。 -\end{description} +\vspace{\baselineskip} +【例】\verb|Tlistplot(["c0r1","c1r2"]);| + +\vspace{\baselineskip} +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -\newpage +\end{description} -%=================================== -\subsection{値の取得と入出力} +%=================================================== +\subsection{その他} - 計算値やプロットデータの値を取得したり,Scilab用とのデータのやりとりをする。\\ \begin{description} -\hypertarget{crossprod}{} -\item[関数] Crossprod(リスト,リスト) -\item[機能] 2つのベクトルの外積を求める。 -\item[説明] Cindyscriptの組み込み関数 cross(リスト,リスト)と同じ。\\ - 例:\verb|Crossprod([1,0,0],[1,1,1]);|\\ - 結果は [0,-1,1]\\ +%\vspace{\baselineskip} +%\hypertarget{makeshell}{} +%\item[関数] Makeshell(ファイル名) / Makebat(ファイル名) +%\item[機能] Macの場合はシェルファイル,Windowsの場合はバッチファイルを書き出す。 +%\item[説明] 書き出されるファイルについては,figいったんフォルダを空にしてから確かめられたい。 -\hypertarget{dotprod}{} -\item[関数] Dotprod(リスト,リスト) -\item[機能] 2つのベクトルの内積を求める。 -\item[説明] Cindyscriptでは,積の演算で内積が求められる。\\ - 例:\verb|Dotprod([1,2,3],[1,-1,1]);|\\ - 結果は 2\\ - [1,2,3]*[1,-1,1] でも同じ結果を得る。\\ +\hypertarget{assign}{} +\item[関数] Assign(文字列,文字,文字) +\item[機能] 文字列の中のある文字を他の文字で置き換える +\item[説明] 第1引数の文字列中の第2引数の文字を,第3引数の文字で置き換える。 -\hypertarget{findarea}{} -\item[関数] Findarea(プロットデータ) -\item[機能] プロットデータで囲まれる部分の面積を求める。 -\item[説明] 閉曲線をなすプロットデータで囲まれる部分の面積を求める。\\ -例:ベジェ曲線で囲まれた部分の面積を求めて表示する。\\ - \verb|Bezier("1",[A,B,C],[[D],[E,F]]);|\\ - \verb|drawtext([2,1],Findarea("bz1"));|\\ +第3引数が数値の場合,文字列に変換される。 -\hypertarget{findlength}{} -\item[関数] Findlength(プロットデータ) -\item[機能] プロットデータの曲線の長さを求める。 -\item[説明] プロットデータが描く曲線の長さを求める。\\ -例:ベジェ曲線で描いた曲線の長さを求めて表示する。\\ - \verb|Bezier("1",[A,B,C],[[D],[E,F]]);|\\ - \verb|drawtext([2,1],Findlength("bz1"));|\\ +第2引数と,第3引数をリストにして,複数の置き換えをすることができる。 +\vspace{\baselineskip} + 【例】\verb|a*x| を\verb|1.3*x| とした文字列を返す。次のいずれも同じ結果になる。 +\begin{verbatim} + Assign("x^2+a*x","a","1.3"); + Assign("x^2+a*x","a",1.3); +\end{verbatim} -\hypertarget{intersectcrvs}{} -\item[関数] Intersectcrvs(プロットデータ1, プロットデータ2, optionss) -\item[機能] 2曲線の交点リストを取得する。 -\item[説明] オプションは共有点があるかどうかを判断するための限界値\\ -ただし,オプションは通常は使わないので気にしなくてよい。\\ - \\ -例:円と曲線の交点をP,Qとする。 -\begin{verbatim} - Plotdata("1", "sin(x)", "x", ["Num=100"]); - Circledata([A, B]); - tmp=Intersectcrvs(gr1, crAB); - P.xy=tmp_1; - Q.xy=tmp_2; - \end{verbatim} - - リスト内に2交点のデータが tmp=[ [ $-0.37$, $-0.36$ ], [ 2.13, 0.85 ] ] のように入っている。交点の順序は PD1, PD2 の順序と曲線の向きによって決まる。曲線の向きは,$y=f(x)$のグラフではx座標が増加する向きで,パラメーター表示曲線ではパラメータの増加する向き。また,PD1 上から探し始めて PD2 との交点を拾ってゆく。\\ - 交点がひとつの場合も tmp=[ [ 2.45, 0.63 ] ] と2重のリストに入っているので,点として取出すには P=tmp\verb|_|1; とする。\\ -\begin{center} -\input{Fig/Intersectcrvs1}\\ -\end{center} +\vspace{\baselineskip} + 【例】直線 $y=bx-b^2$ の係数$b$を変化させて描き,包絡線をうかびあがらせる。 +\begin{verbatim} + repeat(50,t, + cb=t/5-5; + Plotdata(text(t),Assign("b*x-b^2","b",cb),"x"); + ); +\end{verbatim} +%\vspace{\baselineskip} +\begin{center} \input{Fig/assign} \end{center} +\vspace{\baselineskip} + 【例】文字で表された $x$ と $y$ の係数をまとめて数値で置き換える。 +\begin{verbatim} + Assign("a*x^2+b*x",["a",1,"b",2]); +\end{verbatim} -\hypertarget{invert}{} -\item[関数] Invert(PD) -\item[機能] プロットデータの点を逆順にする(reverseと同じ) -\\ +%\vspace{\baselineskip} +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -\hypertarget{meetcurve}{} -\item[関数] MeetCurve(曲線,x0, y0) -\item[機能] 曲線上の点を返す。 -\item[説明] x座標がx0で,点(x0, y0)に近い曲線上の点を返す。\\ -注)x0, y0 は文字列でもよい。\\ -\hypertarget{lcrd}{} -\item[関数] Lcrd() -\item[機能] 幾何点,リスト点の論理座標を取得する。 -\\ +% =========== commented to com2th() ========== +\begin{comment} -\hypertarget{pcrd}{} -\item[関数] Pcrd() -\item[機能] 幾何点,リスト点の物理(表示)座標を取得する。 -\\ +\vspace{\baselineskip} +\hypertarget{com0th}{} +\item[関数] Com0th(文字列) +\item[機能] RのOpenfileの前に置くコマンド(文字列)を定義する。 +\item[説明] 【例】\verb|Com0th("Setax('a')");| +Openfileの前の部分の先頭に書き出す。これにより, \ketcindy でサポートされていないR版\ketpic のコマンドを利用することができる。 + +\vspace{\baselineskip} +\hypertarget{com1st}{} +\item[関数] Com1st(文字列) +\item[機能] RのOpenfileの前に置くコマンド(文字列)を定義する。 +\item[説明] 【例】\verb|Com1st("Setax('a')");|\\ + これにより, \ketcindy でサポートされていないR版\ketpic のコマンドを利用することができる。 -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -\hypertarget{nearestpt}{} -\item[関数] Nearestpt(PD1,PD2) -\item[機能] 2曲線に対し,最も近い点とそのパラメータ,距離のリストを返す -\item[説明] 戻り値は,それぞれの曲線上の点の座標とプロットデータ中の位置,その距離からなるリスト。\\ -例:2つの放物線上の点の最短距離とその位置を求める。点A,Bを作図ツールでとっておく。 -\begin{verbatim} - Plotdata("1", "x^2+2", "x=[-2,2]"); - Plotdata("2", "-(x-2)^2","x=[0,3]"); - plist=Nearestpt("gr2","gr1"); - B.xy=plist_1; - A.xy=plist_3; - Listplot([A,B],["do"]); - Ptsize(4); - Drwpt([A,B]); - Letter([A,"nw","A",B,"n2e","B",(A+B)/2,"e",text(plist_5)]); -\end{verbatim} - \input{Fig/Nearestpt}\\ -\\ -ここで plistに代入されたリストは次の形である。5番目の要素が2点間の距離,すなわち最短距離。\\ - [[1.68,-0.1],29,[0.32,2.1],30,2.59] \\ - \\ -\hypertarget{nearestptcrv}{} -\item[関数] Nearestptcrv(座標, プロットデータ) -\item[機能] 第1引数の座標に最も近い曲線プロットデータ上の点座標を返す -\item[説明] 次に例示する。中心A,半径ABの円と点C,DはCinderellaで作図しておく。 +\vspace{\baselineskip} +\hypertarget{com2nd}{} +\item[関数] Com2nd(文字列) +\item[機能] RのOpenfileのあとに置くコマンド(文字列)を定義する。 + + +\vspace{\baselineskip} +\hypertarget{com2ndpre}{} +\item[関数] Com2ndpre(文字列) +\item[機能] RのOpenfileのあとに置くコマンド(文字列)を定義する。 + +Openfileの直後(グループの先頭に)書き出す。 +\end{comment} + +% =========== ここまで コメント化 ========== + +\hypertarget{colorcode}{} +\item[関数] Colorcode(種別1,種別2, カラーコード) +\item[機能] 種別1から種別2へカラーコードを変換する。戻り値は変換されたコード。 +\item[説明] 種別は,"rgb","cmyk","hsv"のいずれか。 + +\vspace{\baselineskip} +【例】変換例をいくつか示す。 + +RGBの[1,0,0]をCMYKに変換したコードをコンソールに表示する。 \begin{verbatim} - Circledata([A, B]); - Plotdata("1", "x^2", "x"); - pCr=Nearestptcrv(C.xy, "crAB") - pC1=Nearestptcrv(C.xy, "gr1") - pDr=Nearestptcrv(D.xy, "crAB"); - pD1=Nearestptcrv(D.xy, "gr1"); + col=Colorcode("rgb","cmyk",[1,0,0]); + println(col); \end{verbatim} -ぞれぞれ,点C,点D から最も近い曲線上の点を表す。\\ - \\ - \input{Fig/Nearestpt1}\\ - \\ -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +CMYKの[0,1,1,0]をRGBに変換したコードをコンソールに表示する。 -\hypertarget{numptcrv}{} -\item[関数] Numptcrv (プロットデータ) -\item[機能] 曲線の節点の個数を返す -\item[説明] Cindyscript の length(PD)と同じ\\ - -例: 曲線上のいくつかの点で分割し破線で図示する。\\ -区間$[-1, 2]$に対する2次関数のグラフを描く\\ - \verb|Deffun("f(x)",["regional(y)","y=-x^2+4","y"]);|\\ - \verb|Plotdata("1","f(x)","x=[-1,2]",["Num=200"]);|\\ -曲線の端点を結ぶ直線を描く\\ - \verb|Lineplot("3",[Ptstart(gr1),Ptend(gr1)],["do"]);|\\ -節点の4分の1で曲線を分割して破線を描く\\ - \verb|Lineplot("4",[Ptstart(gr1),Ptcrv(0.25*Numptcrv(gr1),gr1)],["da"]); |\\ -節点の2等分で曲線を分割して破線を描く\\ - \verb|Lineplot("5",[Ptstart(gr1),Ptcrv(0.5*Numptcrv(gr1),gr1)],["da"]); |\\ -節点の4分の3で曲線を分割して破線を描く\\ - \verb|Lineplot("6",[Ptstart(gr1),Ptcrv(0.75*Numptcrv(gr1),gr1)],["da"]);| \\ -曲線上の点Aの接線を引く。 -\begin{verbatim} - coef=Derivative("f(x)","x",G.x); - Defvar("DC=coef"); - Deffun("g(x)",["regional(y)","y=DC*(x-G.x)+G.y","y"]); - Plotdata("2","g(x)","x",["dr,2"]); -\end{verbatim} - \\ -\input{Fig/numptcrv}\\ - -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +\begin{verbatim} + col=Colorcode("cmyk","rgb",[0,1,1,0]); + println(col); +\end{verbatim} + +RGBの[1,0,0]をHSVに変換したコードをコンソールに表示する。 -\hypertarget{paramoncrv}{} -\item[関数] Paramoncrv(点の座標, 曲線の名前) -\item[機能] 曲線上の点のパラメータ値を返す。 -\item[説明] 曲線は折れ線として描かれるが,曲線上の各点はこの折れ線の節点を基準としたパラメータ値を持つ。パラメータ値は整数部分が節点の番号,小数部分が節間の位置を表す。\\ - -例:図のような点PからQに至る円周上の5等分点を節点とする折れ線sg1において, -$n$番目の線分上の点は$n\leq t\leq n+1$の範囲のパラメータ値を持つ。\\ -図の点$\mathrm{A}$は2番目の線分上にあり,パラメータ値は2.45である。この値は\\ - \verb|Paramoncrv(A.xy,"sg1");|\\ -によって得られる。\\ - \\ - \input{Fig/paramoncrv}\\ - -\hypertarget{pointcrv}{} -\item[関数] Pointoncrv(点のパラメータ値, PD) -\item[機能] 曲線上のパラメータ値を持つ点の座標を返す。 -\item[説明] 曲線(折れ線)上の節点を基準としたパラメータ値により点の位置が定まる。\\ - -例:図のような点$\mathrm{P}$から$\mathrm{Q}$に至る半円周上の5等分点を節点とする折れ線sg1において,パラメータ値$4.5$を持つ点$\mathrm{A}$は4番目の線分の中点である。したがって\\ - \verb|A.xy=Pointoncrv(4.5,"cr1");|\\ -によって,点Aを中点に置くことができる。\\ - \\ - \input{Fig/pointoncrv} - -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -\newpage -\hypertarget{ptcrv}{} -\item[関数] Ptcrv(n,プロットデータ) -\item[機能] 曲線プロットデータのn 番目の節点を返す -\item[説明] Cindyscript の PD\_n と同じ\\ - -例:楕円上の点で分割する。あからじめ必要な点を作図しておく。 -\begin{verbatim} - Circledata([O,P],["do","Num=100","notex"]); - Scaledata("1","crOP",4/3,1); - F.xy=[-sqrt(7),0]; - A=Ptcrv(9,sc1); - B=Ptcrv(16,sc1); - Listplot("1",[A,F,B],["da"]); - Partcrv("1",A,B,"sc1",["dr,3"]); - Shade(["part1","sg1"],0.1); - Arrowhead(B,"sc1",[1.5]); - Letter([A,"ne","A",B,"ne","B",F,"s2","F"]); -\end{verbatim} - \input{Fig/ptcrv} - -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +\begin{verbatim} + col=Colorcode("rgb","hsv",[1,0,0]); + println(col); +\end{verbatim} -\hypertarget{ptstart}{} -\item[関数] Ptstart(プロットデータ) , Ptend(プロットデータ) -\item[機能] プロットデータの最初の点,最後の点を取得する。 -\item[説明] プロットデータの最初の点,最後の点の座標を返す。\\ - \\ -例:定義域を限定したグラフの両端の点を取得し線分ABを引く。\\ +\vspace{\baselineskip} +\hypertarget{dqq}{} +\item[関数] Dqq(文字列) +\item[機能] 文字列の前後に\verb|"|をつける。 \begin{verbatim} - Deffun("f(x)",["regional(y)","y=x^2","y"]); - Plotdata("1","f(x)","x=[-1,2]",["dr"]); - Lineplot("2",[Ptstart(gr1),Ptend(gr1)]); + str="abc"; + str2=Dqq(str); + println([str,str2]); \end{verbatim} - \input{Fig/ptstart}\\ -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} - \\ +\vspace{\baselineskip} +\hypertarget{factorial}{} +\item[関数] Factorial(n) +\item[機能] 正の整数$n$の階乗を計算する。 -\hypertarget{readoutdata}{} -\item[関数] ReadOutData(ファイル名) -\item[機能] 外部データを読み込む -\item[説明] ScilabのWriteOutDataで作ったプロットデータ列のデータファイルを読み込む。\\ -引数を省略した場合は,Fheadで定義したファイル名のテキストファイルから読み込む。 -ファイル名にはコンマで区切ってパスを与えることができる。たとえば,\\ - \verb|ReadOutData("/datafolder","file.txt"); |\\ - \\ - \\ -\hypertarget{sprintf}{} -\item[関数] Sprintf(実数,長さ) -\item[機能] 小数点以下の長さを固定した文字列に変換 -\item[説明] 実数を,小数点n位までの数とした文字列に変換する\\ - \\ -例 Sprintf(pi,2) は 3.14 を返す\\ - Sprintf(pi,7) は 3.1415927 を返す\\ -注)pi は Cindyscriptの予約変数で,円周率を表す。 \\ - -\hypertarget{writetosci}{} -\item[関数] WritetoSci(引数) ,WritetoScibody(引数) -\item[機能] Scilab用のソースファイルに書き出す -\item[説明] ソースファイルへの書き出し方に3つのタイプがある\\ - -・引数なしの場合\\ - Fheadで定義したファイル名に拡張子 .sci を付加して全体を書き出す。\\ - 末尾にコメントアウトした quit() を付加する。\\ -・WritetoSciの引数に次の数を渡す \\ - \verb|WritetoSci(1)|: WritetoSci() と同じ\\ - \verb|WritetoSci(2)|: 全体を書き出し,末尾に quit() を付加する。\\ - \verb|WritetoSci(3)|: WritetoScibody() と同じ。body部分のみを書き出す。\\ -・ファイル名を引数とする\\ - 引数のファイル名で書き出す。ただし,拡張子 .sci をつける必要がある。\\ -・引数を "sh" とする\\ - WritetoSci(2) と同じ。\\ -・\verb|WritetoSci(filename,"sh")|\\ - 引数のファイル名でshell(bat)コマンド用のファイルを書き出す。\\ -・\verb|WritetoSci(数字 ,filename)| は不可(エラーとなる)\\ -\\ +\vspace{\baselineskip} +\hypertarget{norm}{} +\item[関数] Norm(ベクトル), Norm(ベクトル1, ベクトル2) +\item[機能] ベクトル(2つのベクトルの場合は差の大きさ)の大きさを計算する。 + +\vspace{\baselineskip} +\hypertarget{figpdf}{} +\item[関数] Figpdf(option) +\item[機能] 出力枠サイズのPDFを作る。 +\item[説明] \ketcindy では,通常,出力された fig.tex ファイルを閲覧するPDFをA4サイズで作成する。これに対し,Figpdf()を実行すると,出力サイズのPDFを作成する。閲覧用だけではなくワープロなどにに貼り込むときにそのまま使用できる。ただし,そのための親子プロセスを生成して実行するため,次の手続き(1)(2)が必要となる。 -\hypertarget{makeshell}{} -\item[関数] Makeshell(ファイル名) / Makebat(ファイル名) -\item[機能] Macの場合はシェルファイル,Windowsの場合はバッチファイルを書き出す。 -\item[説明] 書き出されるファイルは次の通り。\\ -・書き出される場所とファイル名は, Shellparent / Batparent で指定したもの。\\ -・内容は,Shellchild / Batchild に,子プロセスの引数として Fhead と引数のファイル名を付加したもの。たとえば,Shellchild="sh ketcindy.sh" で,Fhead="fig" , 引数が "fig2tex" であれば +\vspace{\baselineskip} +(1) Setparent(filename)で,出力するPDF用のファイル名を設定する。 + +(2) 出力は,「Parent」のボタンを押す。 + +\vspace{\baselineskip} +たとえば,fig.cdy で作図しているとき, \begin{verbatim} - #!/bin/sh - cd /Users/Hoge/Desktop/KeTCindy - sh ketcindy.sh fig fig2tex - exit 0 + Setparent("pic"); \end{verbatim} -が書き出される。2行目のディレクトリ(フォルダ)名は,Dirwork で指定したもの。\\ -ただし,上記の fig は fig.sci のことだが,fig.sci は出力されないので,別途 WritetoSci(2) で書き出す必要がある。\\ - \\ +とすると,fig.tex を表示した pic.pdf が作成される。pic.pdf が目的のPDF。 + +このファイル名は 作図しているCinderellaのファイル名,または Setfiles() で指定したファイル名とは異なるものにする。 -\hypertarget{textformat}{} -\item[関数] Textformat(数,桁数) -\item[機能] 小数点以下の桁数を指定して数を文字列化する。 -\item[説明] Cindyscriptの組み込み関数にも,format()という同様の関数があるが,こちらは,数のリストにも対応する。\\ - -例:円周率を小数点以下5位までで文字列化する。\\ - \\ - \verb|Textformat(pi,5);|\\ - \\ - 戻り値は,3.14159\\ - \\ -例:円周率と,ネピア数をリストにして,共に小数点以下5位までで文字列化したリストを返す。\\ - \\ - \verb|Textformat([pi,exp(1)],5);|\\ - \\ - 戻り値は,[3.14159,2.71828] \\ - \\ +optionは,マージン(余白)と平行移動量。指定しない場合は 初期設定値。 -\hypertarget{viewtex}{} -\item[関数] Viewtex() -\item[機能] \TeX のソースファイルを書き出す。引数なし。 -\item[説明] グローバル変数Fheadで定義したファイル名に "main" を付加した\TeX のソースファイルとバッチファイル(Macの場合はシェルファイル)を作成する。\\ -Fhead のほか,ディレクトリ指定などのため,次のグローバル変数に必要事項が代入されていることが条件である。\\ - \\ - Dirwork=作業フォルダのパス\\ - Shellparent=親プロセス (kc.sh / kc.bat )を置くディレクトリのパス\\ - Shellchild=子プロセス名\\ - Libname=Scilabのライブラリ ketpicsciL5 へのパス\\ - \\ -たとえば,Fhead="fig" とすると\\ -・図を表示する fig.sci を Dirwork で指定したフォルダにを生成する。(すでにある場合は上書き)\\ -・Dirwork で指定したフォルダに figmain.tex を生成する。(すでにある場合は上書き)\\ - figmain.tex は \TeX のプリアンブルと \verb|begin{document}| を設定したソースファイルで,中には \verb|input{"fig.tex"}| が書かれており,これをコンパイルすれば作成した図を表示することができる。\\ -・親プロセスの生成(すでにある場合は上書き)\\ - ketcindy.sh (Mac) ketcindy.bat(Windows) を子プロセスとして figmain.tex と fig.tex を引数として実行するプロセス kc.sh(Mac) kc.bat (Windows) を作業ディレクトリに生成する。これを実行すると図を表示するPDFファイルが作られる。\\ - 以上の手続きにより,Viewtex() を実行すれば,デスクトップ上に生成された kc.sh / kc.bat を使って,fig.sci の生成から,fig.tex の作成,\TeX のコンパイルまでの一連の操作を自動実行して,図を表示することができることになる。kc.sh / kc.bat の実行は,kc() で行うことができる。\\ - \\ - - \hypertarget{workprocess}{} -\item[関数] Workprocess() -\item[機能] 作図の経過を取得する -\item[説明] 作図ツールを用いた作図の経過を取得する。\\ - \verb|println(Workproccess());|\\ - とすると,コンソールに作図手順が表示される。\\ +余白は,左右上下の順に4つの数をコンマで区切る。 -\end{description} +平行移動量は,右方向,下方向をリストで与える。 -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -\newpage +余白指定と平行移動指定は同時に行うことができる。 -%=================================================== -\subsection{その他} -\begin{description} +\vspace{\baselineskip} +【例】余白の設定 +\begin{tabbing} +1234\=567890123456789012345678901234\=\kill + \> \verb|Figpdf([5,5,10,10]);| \> 左右に5mm,上下10mmの余白\\ + \> \verb|Figpdf([[5,10]]);| \> 右に5mm,下に10mm平行移動して表示\\ + \> \verb|Figpdf([5,8,10,10,[5,-5]]);| \> 左5mm,右8mm,上下10mmの余白,\\ + \> \> 右に5mm,上に5mm平行移動して表示 +\end{tabbing} + +なお,座標軸を表示する場合,右側は最低3mmの余白を設定しないと軸の文字が入らない。 -\hypertarget{assign}{} -\item[関数] Assign(文字列,文字,文字) -\item[機能] 文字列の中のある文字を他の文字で置き換える -\item[説明] 第1引数の文字列中の第2引数の文字を,第3引数の文字で置き換える。\\ - 第3引数が数値の場合,文字列に変換される。\\ - 第2引数と,第3引数をリストにして,複数の置き換えをすることができる。\\ - \\ - 例:a*x を1.3*x とした文字列を返す。次のいずれも同じ結果になる。 -\begin{verbatim} - Assign("x^2+a*x","a","1.3"); - Assign("x^2+a*x","a",1.3); -\end{verbatim} - \\ - 例:直線 $y=bx-b^2$ の係数$b$を変化させて描き,包絡線をうかびあがらせる。 -\begin{verbatim} - repeat(50,t, - cb=t/5-5; - Plotdata(text(t),Assign("b*x-b^2","b",cb),"x"); - ); -\end{verbatim} - \\ - \input{Fig/assign}\\ - \\ - 例:文字で表された $x$ と $y$ の係数をまとめて数値で置き換える。\\ - \verb|Assign("a*x^2+b*x",["a",1,"b",2]);|\\ - \\ -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -\hypertarget{bbdata}{} -\item[関数] BBdata(ファイル名,option) -\item[機能] 画像ファイルのサイズを求める -\item[説明] TeX文書において,inputgraphics コマンドで画像を貼り込むときのBBサイズを求める。\\ - TeX処理系の extractbb を用いて画像ファイルからBBデータを作り,テキストファイルとして作業ディレクトリに書き出す。これを読んで,コンソールに ingludegarphics のコマンドを書き出す。\\ - optionは,幅または高さの指定。\\ - "w=40mm" で width=40mm が,"h=40mm" で height=40mm が付加される。\\ - \\ -例:pic.pdf のサイズを求める。\\ - \verb|BBdata("pic.pdf")|\\ - を実行すると,コンソールに ingludegarphics のコマンド文\\ - \verb|\includegraphics[bb=・・・・]{pic.pdf} |\\ - が表示される。これをそのままコピーすればよい。\\ - なお,bbの値は整数値ではなく,高精細の値を小数点以下2桁に四捨五入して示される。\\ - 画像ファイルは,PDFに限らず,PNG,JPGなどでもよい。\\ - \\ -例:\verb|BBdata("fig.jpg",["h=40mm"]);|\\ - で\\ - \verb|\includegraphics[bb=0.00 0.00 578.16 592.56,height=40mm]{fig.jpg} |\\ - が表示される。\\ - \\ +\vspace{\baselineskip} +\hypertarget{help}{} +\item[関数] Help(文字列) +\item[機能] 関数の使用例を取得する +\item[説明] 文字列で始まる関数の使用例をコンソールに表示する。 -\hypertarget{changework}{} -\item[関数] Changework(パス名) -\item[機能] 作業ディレクトリを指定(変更)する -\item[説明] 作業ディレクトリは,InitializationスロットのKETlibページに Dirwork= で指定されているが,これを変更する。Drawスロットの,Ketinit() の前に記述することにより,Ketlibページの記述を変更しなくてすむ。\\ - これにより,作成したファイルを他の人とやり取りしやすくなる。\\ +\hspace{10mm} \verb|println(Help("L"));| + + のようにすると,コンソールに,次のように「L」で始まる関数の使用例が表示される。 +\begin{verbatim} + Letter([C,"c","Graph of $f(x)$"]); + Letter([C,"c","xy"],["size->30"]); + 文字を書き込む + Letterrot(C,B-A,"AB"); + Letterrot(C,B-A,"t0n5","AB"); + Letterrot(C,B-A,0,5,"AB"); + 傾いた文字を書き込む + ・・・・ +\end{verbatim} -\hypertarget{com0th}{} -\item[関数] Com0th(文字列) -\item[機能] ScilabのOpenfileの前に置くコマンド(文字列)を定義する。 -\item[説明] 例:\verb|Com0th("Setax('a')");|\\ - Openfileの前の部分の先頭に書き出す。これにより, \ketcindy でサポートされていないScilab版\ketpic のコマンドを利用することができる。\\ - \\ -\hypertarget{com1st}{} -\item[関数] Com1st(文字列) -\item[機能] ScilabのOpenfileの前に置くコマンド(文字列)を定義する。 -\item[説明] 例:\verb|Com1st("Setax('a')");|\\ - これにより, \ketcindy でサポートされていないScilab版\ketpic のコマンドを利用することができる。 -\\ -\hypertarget{com2nd}{} -\item[関数] Com2nd(文字列) -\item[機能] ScilabのOpenfileのあとに置くコマンド(文字列)を定義する。 -\\ +\vspace{\baselineskip} +\hypertarget{helpkey}{} +\item[関数] Helpkey(文字列) +\item[機能] 関数の使用例をキーワードで検索する +\item[説明] 文字列に与えたキーワードで関数の使用例を検索し,コンソールに表示する。 -\hypertarget{com2ndpre}{} -\item[関数] Com2ndpre(文字列) -\item[機能] ScilabのOpenfileのあとに置くコマンド(文字列)を定義する。 - Openfileの直後(グループの先頭に)書き出す。\\ +\vspace{\baselineskip} +【例】\verb|Helpkey("直線");| とすると,コンソールに次のように表示される。 +\begin{verbatim} + IntersectsgpL("",[p1,p2],[p3,p4,p5],"draw"); + IntersectsgpL("R","P-Q","A-B-C"); + IntersectsgpL("R","P-Q","A-B-C","put"); + 空間の直線と平面の交点 + Lineplot("1",[[2,1],[3,3]]); + ・・・・ +\end{verbatim} -\hypertarget{figpdf}{} -\item[関数] Figpdf(option) -\item[機能] 出力枠サイズのPDFを作る。 -\item[説明] KeTCindyでは,通常,出力された fig.tex ファイルを閲覧するPDFをA4サイズで作成する。これに対し,Figpdf()を実行すると,出力サイズのPDFを作成する。閲覧用だけではなくワープロなどにに貼り込むときにそのまま使用できるので便利である。ただし,そのための親子プロセスを生成して実行するため,次の手続き(1)(2)が必要となる。\\ -(1) 変数 Texparent を設定する。\\ - これは,出力するPDFのファイル名の指定である。たとえば, -\begin{verbatim} - Fhead="fig"; - Texparent="pic"; -\end{verbatim} - とすると,fig.tex を表示した pic.pdf が作成される。pic.pdf が目的のPDF。\\ - Texparent は Fhead とは異なるものにする。\\ -(2) 出力は,「Parent」のボタンを押す。\\ - \\ -optionは,マージン(余白)と平行移動量。指定しない場合はデフォルト値。\\ -余白は,左右上下の順に4つの数をコンマで区切る。。\\ -平行移動量は,右方向,下方向をリストで与える。\\ -余白指定と平行移動指定は同時に行うことができる。\\ -例:\verb|Figpdf([5,5,10,10]);| 左右に5mm,上下10mmの余白\\ - \verb|Figpdf([5,10]);| 右に5mm,下に10mm平行移動して表示\\ - \verb|Figpdf([5,8,10,10,[5,-5]]);| 左5mm,右8mm,上下10mmの余白,\\ - 右に5mm,上に5mm平行移動して表示\\ -なお,座標軸を表示する場合,右側は最低3mmの余白を設定しないと軸の文字が入らない。\\ +\vspace{\baselineskip} +\hypertarget{indexall}{} +\item[関数] Indexall(str1,str2); +\item[機能] 文字列 str1 から str2 を検索しその位置をすべて返す +\item[説明] Cindyscriptの indexof() の拡張版。indexof() が最初に見つかった位置を返すのに対し,Indexall()は存在する位置をすべてリストにして返す。 + +\vspace{\baselineskip} +【例】str="abcabcabc" から "b"を検索する。 + +\verb|indexof(str,"b")| では,2 が返る。 + +\verb|Indexall(str,"b")| では,[2,5,8]が返る。 + +\vspace{\baselineskip} +\hypertarget{isptselected}{} +\item[関数] Isptselected(点名)または Ptselected(点名) +\item[機能] 点が選択されていれば true,そうでなければ false を返す。 +\item[説明] 点名はリストで与える。引数はなしにすることも可能で,その場合はすべての点が対象。 + +KeTCindyの関数の中には処理に時間がかかるものがある。その場合,点をドラッグするなど,画面上で操作をするとその都度再計算されるために,動きが非常に遅くなる。そこで,ドラッグする点をこの関数で指定すれば,ドラッグしている間は処理されないようにすることができる。 + +\vspace{\baselineskip} +【例】点Aを原点近くにとっておき,次のスクリプトを実行する。 + +\verb| Deffun("f(x)",["regional(y)","y=x^3-2*x","y"]);|\\ +\verb| Plotdata("1","f(x)","x",["Num=100"]);|\\ +\verb| Putoncurve("A","gr1");|\\ +\verb| coef=Derivative("f(x)","x",A.x);|\\ +\verb| Defvar(["coef",coef]);|\\ +\verb| Deffun("g(x)",["regional(y)","y=coef*(x-A.x)+A.y","y"]);|\\ +\verb| Plotdata("2","g(x)","x",["Num=1"]);|\\ +\verb| if(!Ptselected(A),|\\ +\verb| Enclosing("1",["gr2","Invert(gr1)"],[A,"nodisp"]);|\\ +\verb| Hatchdata("1",["i"],[["en1"]]);|\\ +\verb| );| + +\vspace{\baselineskip} +\hspace{5mm} 点Aをドラッグ中(選択状態)\hspace{5mm} 他の点をクリックして選択状態を解除 + +\hspace{10mm}\includegraphics[bb=0.00 0.00 218.01 204.51,width=40mm]{Fig/ptselected01.pdf} +\hspace{10mm}\includegraphics[bb=0.00 0.00 219.01 204.51,width=40mm]{Fig/ptselected02.pdf} + +\vspace{\baselineskip} +\hypertarget{slider}{} +\item[関数] Slider(名称,位置1,位置2) +\item[機能] スライダを作成する +\item[説明] 名称は "A-C-B" の形で,端点をA,B,スライダ点をCとしたスライダを作る。 + +端点A,Bの位置を,位置1,位置2で指定する。 +スライダにより取得したい値は,点Cの座標(たとえば C.x)を利用する。 + +点A,B,Cはあらかじめ作図しておく必要はない。既にある場合はその点を使う。 + +\vspace{\baselineskip} +【例】2つのスライダを用意し,$y=a\sin(x-b)$ のa,b をインタラクティブに変化させる。 + +\verb|Slider("A-C-B",[-5,-2],[5,-2]); | // \verb|C| is movable.\\ +\verb|Slider("D-F-E",[-6,-2],[-6,2]); | // \verb|F| is movable.\\ +\verb|Plotdata("1",Assign("y=a*sin(x-b)",["a",F.y,"b",C.x]),"x"); | + +\vspace{\baselineskip} +\hspace{15mm} +\includegraphics[bb=0.00 0.00 445.02 193.01,height=40mm]{Fig/slider.pdf} + +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} + +\vspace{\baselineskip} +\hypertarget{sprintf}{} +\item[関数] Sprintf(実数,長さ) +\item[機能] 小数点以下の長さを固定した文字列に変換 +\item[説明] 実数を,小数点n位までの数とした文字列に変換する + +\vspace{\baselineskip} +【例】円周率 + + Sprintf(pi,2) は 3.14 を返す + + Sprintf(pi,7) は 3.1415927 を返す + +注)pi は Cindyscriptの予約変数で,円周率を表す。\vspace{\baselineskip} + +\vspace{\baselineskip} +\hypertarget{textformat}{} +\item[関数] Textformat(数,桁数) +\item[機能] 小数点以下の桁数を指定して数を文字列化する。 +\item[説明] 第1引数は数のリストでもよい。数のリストの場合は,戻り値は,対応する数値を指定係数にした後,リストを文字列化する。Cindyscriptの組み込み関数にも,format()という同様の関数があるが,format() は文字列のリストを返す。 + +\vspace{\baselineskip} +【例】円周率を小数点以下5位までで文字列化する。 + +\hspace{10mm} \verb|Textformat(pi,5);| +\hspace{10mm} \verb|format(pi,5);| + +戻り値は,いずれも \verb|"3.14159"| + +\vspace{\baselineskip} +【例】第1引数がリストのときの,format() との戻り値の違い。 + +\hspace{10mm} \verb| dt=[1/6,0.5];|\\ +\hspace{10mm} \verb| Textformat(dt,4); | // 戻り値は "[ 0.1667 , 0.5 ]" \\ +\hspace{10mm} \verb| format(dt,4); | // 戻り値は [ "0.1667" , "0.5" ] \\ + +\vspace{\baselineskip} \hypertarget{texcom}{} -\item[関数] Texcom(\TeX コード) -\item[機能] \TeX のコードを書き出す -\item[説明] 任意の\TeX のコードを書き出す\\ - ScilabのTeXcomにそのまま引き渡しているだけ。\\ +\item[関数] Texcom(\TeX コード) +\item[機能] \TeX のコードを書き出す +\item[説明] 任意の\TeX のコードを書き出す +\vspace{\baselineskip} \hypertarget{windispg}{} -\item[関数] Windispg() または Windisp(データのリスト) -\item[機能] 定義されているプロットデータをCinderella画面に黒線で描く -\item[説明] Windispg()は,スクリプトの最後に置くことで,出力される部分だけが黒で描かれるので,出力図を確認することができる。ただし,Letter()関数で表示した点の名称などがCinderellaで作図したラベルと重なって表示されて見にくくなることもある。この関数を実行しなくても出力には影響しない。\\ - Windisp(データのリスト)は,Scilabから \ketcindy 用に出力されたファイルを ReadOutData()関数で読み込んだときに,必要なプロットデータ列だけを表示するのに用いる。\\ - ReadOutData("filename.txt") でデータを読み込むと,そのデータに含まれるプロットデータ列が,コンソールに\\ -Outdata of filename.txt : [Gfn,Gdfn,Gh] \\ -のように表示される。\\ -このうち,GfnとGhだけを表示するのであれば\\ -Windispg([Gfn,Gh]);\\ - とする。引数なしで\\ -Windispg();\\ -とすればすべてのプロットデータ列が表示される。\\ -なお,いずれの場合も,作図したプロットデータも同時に表示される。\\ - 作図した図を全てではなく選択して表示する場合は,それらのプロットデータ名をリストにして引数とする。\\ - たとえば,sg1, gr1, crABが定義されているとき,\\ - \verb|Windispg(["sg1","gr1"]);| +\item[関数] Windispg() または Windisp(データのリスト) +\item[機能] 定義されているプロットデータをCinderella画面に黒線で描く +\item[説明] Windispg()は,スクリプトの最後に置くことで,出力される部分だけが黒で描かれるので,出力図を確認することができる。ただし,Letter()関数で表示した点の名称などがCinderellaで作図したラベルと重なって表示されて見にくくなることもある。この関数を実行しなくても出力には影響しない。 + +Windisp(データのリスト)は,Rから \ketcindy 用に出力されたファイルを ReadOutData()関数で読み込んだときに,必要なプロットデータ列だけを表示するのに用いる。 + +ReadOutData("filename.txt") でデータを読み込むと,そのデータに含まれるプロットデータ列が,コンソールに + +\hspace{10mm}Outdata of filename.txt : [Gfn,Gdfn,Gh] + +のように表示される。 + +このうち,GfnとGhだけを表示するのであれば + +\hspace{10mm}\verb|Windispg([Gfn,Gh]);| + +とする。引数なしで + +\hspace{10mm}\verb|Windispg();| + +とすればすべてのプロットデータ列が表示される。 + +なお,いずれの場合も,作図したプロットデータも同時に表示される。 + +作図した図を全てではなく選択して表示する場合は,それらのプロットデータ名をリストにして引数とする。 + +たとえば,sg1, gr1, crABが定義されているとき, + +\hspace{10mm}\verb|Windispg(["sg1","gr1"]);| + とすれば,sg1,gr1のみが表示される。 - 次の3つの関数は,プロットデータの操作で,単独で用いることもできるが,描画関数,プロットデータの操作関数のオプションに組み込まれているので,特殊な場合を除いてはほとんど利用しないと思われる。\\ -\hypertarget{drwline}{} -\item[関数] Drwline(プロットデータ) -\item[機能] プロットデータ(文字列)を実線で描く -\item[説明] ScilabのDrwlineを書き出す\\ - 例:\verb|Drwline("sABCA,1");|\\ -\\ +%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -\hypertarget{dashline}{} -\item[関数] Dashline(プロットデータ) -\item[機能] プロットデータ(文字列)を破線で描く -\item[説明] ScilabのDashlineを書き出す\\ - 例:\verb|Dashline("sABCA");|\\ -\\ -\hypertarget{dottedline}{} -\item[関数] Dottedline(プロットデータ) -\item[機能] プロットデータ(文字列)を点線で描く -\item[説明] ScilabのDottedlineを書き出す\\ - 例:\verb|Dottedline("sABCA");|\\ - -\hypertarget{helplist}{} -\item[関数] helplist() -\item[機能] ヘルプデータを作成する -\item[説明] 関数の簡単な説明データを作成する。\\ - この関数は,Initialization スロットに書く。\\ - \\ - -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -\hypertarget{help}{} -\item[関数] Help(文字列) -\item[機能] 関数の使用例を取得する -\item[説明] 文字列で始まる関数の使用例をコンソールに表示する。\\ - \verb|println(Help("C"));|\\ - のようにすると,コンソールに,次のように「C」で始まる関数の使用例が表示される。 -\begin{verbatim} - CRspline("1",[A,B,C,A]); - ChangeTablestyle(["r0c0c3"],["da"]);\ - Changestyle("sgAB",["da"]); - Changstyle("geoseg3","ax3d"],["notex"]);\ - Circledata([A,B,C]); - Circledata([A,B],["Rng=[0,pi/2]"]);\ - Com2nd("\color[cmyk]{0,0,0,0.5}");\ - Crossprod(vec1,vec2); \\ -\end{verbatim} - - さらに,\\ - \verb|println(Help("Ci"));| とすると -\begin{verbatim} - Circledata([A,B,C]); - Circledata([A,B],["Rng=[0,pi/2]"]); -\end{verbatim} - だけが表示される。\\ - \verb|println(Help("*"));| - とすると,すべての関数の使用例が表示される。\\ - 引数がない場合は,\verb|Helplist(Dirlib,["+","+3d"],"helpJ”);| とみなされる。+はketcindylibの意味。\\ -\\ +\vspace{\baselineskip} +\hypertarget{viewtex}{} +\item[関数] Viewtex() +\item[機能] \TeX のソースファイルを書き出す。引数なし。 +\item[説明] グローバル変数Fheadで定義したファイル名に "main" を付加した\TeX のソースファイルとバッチファイル(Macの場合はシェルファイル)を作成する。 + +\vspace{\baselineskip} +\hypertarget{workprocess}{} +\item[関数] Workprocess() +\item[機能] 作図の経過を取得する +\item[説明] 作図ツールを用いた作図の経過を取得する。 -\hypertarget{helpkey}{} -\item[関数] Helpkey(文字列) -\item[機能] 関数の使用例をキーワードで検索する -\item[説明] 文字列に与えたキーワードで関数の使用例を検索し,コンソールに表示する。\\ - 例:\verb|Helpkey("直線");| とすると,コンソールに次のように表示される。 -\begin{verbatim} - IntersectsgpL("",[p1,p2],[p3,p4,p5],"draw"); - IntersectsgpL("R","P-Q","A-B-C"); - IntersectsgpL("R","P-Q","A-B-C","put"); - 空間の直線と平面の交点 - Lineplot("1",[[2,1],[3,3]]); - Lineplot([A,B]); - 直線データを作成 - PtonLine("C",pA,pB); - 直線上に点をとる -\end{verbatim} - \\ -\hypertarget{indexall}{} -\item[関数] Indexall(str1,str2); -\item[機能] 文字列 str1 から str2 を検索しその位置をすべて返す -\item[説明] Cindyscriptの indexof() の拡張版。indexof() が最初に見つかった位置を返すのに対し,Indexall()は存在する位置をすべてリストにして返す。\\ - \\ -例:str="abcabcabc" から "b"を検索する。\\ - \verb|indexof(str,"b")| では,2 が返る。\\ - \verb|Indexall(str,"b")| では,[2,5,8]が返る。\\ - \\ - -\hypertarget{ketcindylogo}{} -\item[関数] Ketcindylogo() -\item[機能] \ketcindy のロゴを書き出す -\item[説明] \ketcindy のロゴを表示する\TeX のコマンド行を書き出す。\\ - 内容は\\ -\verb|\|def\verb|\|ketcindy\{\{K\verb|\|kern-.20em \verb|\|lower.5ex\verb|\|hbox\{E\}\verb|\|kern-.125em\{TCindy\}\}\}" - \\ +\verb|println(Workproccess());| + + とすると,コンソールに作図手順が表示される。 + +\vspace{\baselineskip} \hypertarget{op}{} -\item[関数] Op(n,list or str) -\item[機能] リストまたは文字列から要素を抜き出す -\item[説明] 第2引数のリストまたは文字列のn番目の要素(文字)を返す。\\ -Cindyscriptの アンダーバーの演算子 (list\_n , str\_n) と同様。Silabとの整合性のため追加\\ - \\ -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -\newpage +\item[関数] Op(n,list or str) +\item[機能] リストまたは文字列から要素を抜き出す +\item[説明] 第2引数のリストまたは文字列のn番目の要素(文字)を返す。 + +Cindyscriptの アンダーバーの演算子 (list\_n , str\_n) と同様。 + +\vspace{\baselineskip} +\hypertarget{strsplit}{} +\item[関数] Strsplit(文字列 , 文字) +\item[機能] 文字列を分解する。 +\item[説明] 第1引数の文字列を第2引数の文字の位置で分解したリストを返す。 + +\vspace{\baselineskip} +【例】文字aで区切って分解する。 + +\verb| str="abcadeaf";| \\ +\verb| strL=Strsplit(str,"a"); | // [” ”,”bc”,”de”,”f”] を返す。 + +同様の関数に,Cindyscriptの tokenize(文字列,文字列)がある。tokenize() の第2引数は文字列や,文字のリストでもよい。 + +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} + \end{description} \newpage -%第11節 他の数式処理ソフトとの連携 ============================= +%第11節 他の数式処理ソフトとの連携 ============================= \section{他の数式処理ソフトなどとの連携} \subsection{Rとの連携} -Rは主に統計解析のためのソフトウェアで, binorm(二項分布),pois(ポアソン),unif(一様分布),chisq(カイ2乗),f(F分布),t(t分布)など,多くの確率分布をサポートしている。\\ -正規分布(normal distribution)では\\ - dnorm 確率密度関数\\ - pnorm 分布関数\\ - qnorm 分布関数の逆関数\\ - rnorm 乱数発生\\ -というように,分布名の頭にd, p, q, r をつけると上記4つの関数が得られる。\\ - 各分布には,自由度などの引数があり,たとえば,平均m, 標準偏差sの正規分布(の密度関数)は dnorm(x, m ,s ) となる。\\ - \\ - KeTCindyでは,kc.bat/shによってコマンドをRに渡し,結果をテキストファイルで受け取る。このとき,Rとのやりとりで,次のようなファイルが作業ディレクトリに作成される。\\ -拡張子 r :r用のファイル\\ -拡張子 dat,拡張子 txt:データファイル\\ -このデータのやり取りに関する次のオプションがある。\\ - オプションなしまたは,”” のとき\\ - i) データファイルがなければ,新しく作る\\ - ii) データファイルが既にあればそれを読み込む\\ - "m" のとき,強制的にデータファイルを作り直す。\\ - "r" のとき,すでにあるデータファイルを読み込む。\\ - このとき,ファイルの読み書きで不具合があると,数秒の後「==$>$ file.txt not generated (5 s ) 」のようなエラーメッセージがコンソールに表示される。このような場合は作業ディレクトリの設定などを確認していただきたい。この待ち時間については,Waitオプションで設定することもできる。\\ - \\ + +Rは主に統計解析のためのソフトウェアで, binorm(二項分布),pois(ポアソン),unif(一様分布),chisq(カイ2乗),f(F分布),t(t分布)など,多くの確率分布をサポートしている。 + + \ketcindy では,kc.bat/shによってコマンドをRに渡し,結果をテキストファイルで受け取る。このとき,Rとのやりとりで,次のようなファイルが作業ディレクトリに作成される。 + +拡張子 r :r用のファイル + +拡張子 dat,拡張子 txt:データファイル + +このデータのやり取りに関する次のオプションがある。 + + オプションなしまたは,”” のとき + + i) データファイルがなければ,新しく作る + + ii) データファイルが既にあればそれを読み込む + + "m" のとき,強制的にデータファイルを作り直す。 + + "r" のとき,すでにあるデータファイルを読み込む。 + +\vspace{\baselineskip} \begin{description} + \hypertarget{boxplot}{} -\item[関数] Boxplot(名前,データ,垂直位置,高さ,option) -\item[機能] 箱ひげ図を描く -\item[説明] データは,直接的に変数で渡す場合とファイルから読み込む場合がある。\\ -例:乱数で作成した5未満の実数のデータを箱ひげ図にする。\\ +\item[関数] Boxplot(名前,データ,垂直位置,箱の高さ,option) +\item[機能] 箱ひげ図を描く +\item[説明] データは,リストで渡す場合とファイル名を渡してファイルから読み込む場合がある。データファイルは csv 形式とする。 + +\vspace{\baselineskip} +【例】乱数で作成した5未満の実数のデータを箱ひげ図にする。 + \begin{verbatim} - dt1=apply(1..100,5*random()); - Boxplot("1",dt1,1,1/2); + dt1=apply(1..100,5*random()); + Boxplot("1",dt1,1,1/2); \end{verbatim} - \\ -例:外部ファイルとして用意したデータを読み込んで箱ひげ図にする。データファイルはcsv形式とする。\\ +\vspace{\baselineskip} +\hspace{20mm} \input{Fig/boxplot01} + +\vspace{\baselineskip} +【例】外部ファイルとして用意したデータを読み込んで箱ひげ図にする。 \begin{verbatim} - Boxplot("2","datafile.csv",3,1/2); - Boxplot("1",dt1,1,1/2); + Boxplot("2","datafile.csv",3,1/2); \end{verbatim} - \\ - 複数列から成るcsvファイルを読み込むには,Readcsvを使う。csvファイルは,ketworkフォルダに入れておく。戻り値は読み込んだファイル。\\ - データの値を画面に入るように調節するには,次のようにリストの計算を利用すればよい。\\ - また,Framedata2(),Rulerscale() を併用することで目盛を入れることができる。Framedata2() のために,表示領域の対角点A,BをCinderellaの作図ツールで作図しておく。\\ + +\vspace{\baselineskip} +複数列から成るcsvファイルを読み込むには,Readcsvを使う。csvファイルは,作業フォルダ( 初期設定は fig )に入れておく。戻り値は読み込んだファイル。 + +データの値を画面に入るように調節するには,dt1/20 のようにしてリサイズする。 + +また,Framedata(),Rulerscale() を併用することで目盛を入れることができる。Framedata() のために,表示領域の対角点A,BをCinderellaの作図ツールで作図しておく。 + \begin{verbatim} - data=Readcsv("datafile.csv"); - dt1=apply(data,#_1); - dt2=apply(data,#_2); - Boxplot("1",dt1/20,1,1/2); - Boxplot("2",dt2/20,3,1/2); - Framedata2("1",[A,B]); - Rulerscale(A,["r",0,6,1],["f",1,"\mbox{dt1}",3,"\mbox{dt2}"]); + data=Readcsv("datafile.csv"); + dt1=apply(data,#_1); + dt2=apply(data,#_2); + Boxplot("1",dt1/20,1,1/2); + Boxplot("2",dt2/20,3,1/2); + Framedata("1",[A,B],["corner"]); + Rulerscale(A,["r",0,6,1],["f",1,"\mbox{dt1}",3,"\mbox{dt2}"]); \end{verbatim} - \\ - \input{Fig/boxplot}\\ +%\vspace{\baselineskip} + \begin{center} \input{Fig/boxplot} \end{center} + +注)一度実行した後,データを書き直すと,図が更新されないので,"m" オプションをつけて + Boxplot("1",dt1/20,1,1/2,["m"]); とすると,図が更新される。データを書き出すときは,もう一度 "m" オプションをはずして実行してから Figure ボタンを押す。これは,データの作成タイミングの関係。 -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} + +\hypertarget{rfun}{} +\item[関数] Rfun(name,コマンド, 引数, option) +\item[機能] Rの1つのコマンドを実行して結果を返す +\item[説明] バッチファイル kc.bat / シェルファイル kc.sh を利用してRとデータをやり取りし,計算結果を取得する。結果は,変数 R+name に入り,コンソールにも表示される。 + +\vspace{\baselineskip} +【例】Rを用いて標準正規分布から10個の乱数を発生し,戻り値から平均値と標準偏差を求めてコンソールに表示する。 +\begin{verbatim} + Rfun("1","rnorm",[10]); + nx=length(R1); + mx=sum(R1)/nx; + sx=sqrt(R1*R1/nx-mx^2); + println("平均:"+format(mx,4)+" 標準偏差:"+format(sx,4)); +\end{verbatim} \hypertarget{calcbyr}{} -\item[関数] CalcbyR(変数名,コマンド列,option) -\item[機能] Rのコマンドを実行して結果を返す -\item[説明] バッチファイル kc.bat / シェルファイル kc.sh を利用してRとデータをやり取りし,計算結果を取得する。\\ - \\ -例:Rを用いて標準正規分布から10個の乱数を発生し,平均値と標準偏差を求めてコンソールに表示する。 -\begin{verbatim} - cmdL=[ "=rnorm",[10] ]; - CalcbyR("dt",cmdL); - nx=length(dt); - mx=sum(dt)/nx; - sx=sqrt(dt*dt/nx-mx^2); - println("データ:"+dt); - println("平均:"+format(mx,4)+" 標準偏差:"+format(sx,4)); -\end{verbatim} -1行目の cmdL=[ "=rnorm",[10] ] で,標準正規分布から10個の乱数を発生するコマンド列を定義。\\ -2行目で,Rで計算した結果がリスト dt に入る。\\ - \\ -例:Rを用いてN(50,$5^2$)から10個の乱数を発生し,平均と不偏分散もRで計算してその結果をコンソールに表示する。 -\begin{verbatim} - cmdL=[ - "tmp1=rnorm",[10,50,5], - "tmp2=mean",["tmp1"], - "tmp3=var",["tmp1"], - "=c(tmp1,tmp2,tmp3)",[] - ]; - CalcbyR("rd",cmdL); - dt=rd_(1..(length(rd)-2)); - mx=rd_(-2); - vx=rd_(-1); - println("データ:"+dt); - println("平均:"+format(mx,4)+" 不偏分散:"+format(vx,4)); -\end{verbatim} - CalcbyR()によって,データと平均,不偏分散からなるリストが作成されるので,mxに平均,vxに不偏分散を代入している。\verb|rd_(-1)| は,リスト rd の末尾の要素。\\ - \\ -例:Rでポアソン分布から200個の乱数をとり,標本平均の分布の様子=分散が小さくなって,正規分布に近づいている様子=をヒストグラムで見る。 -\begin{verbatim} - cmdL=[ - "tmp1=rpois",[200,5], - "tmp2=mean",["tmp1"], - "tmp3=var",["tmp1"], - "=c(tmp2,tmp3,tmp1)",[] - ]; - CalcbyR("rd",cmdL); - dt=rd_(3..length(rd)); - nn=length(dt); - mx=rd_1; - vx=rd_2*(nn-1)/nn; - sx=sqrt(vx); - println(dt); - println(["m="+format(mx,4),"v="+format(vx,4)]); - Setscaling(1/5); - Histplot("1",dt,["Breaks=seq(0,14,1)","dr,0.5"]); -\end{verbatim} - \\ - \input{Fig/poison01}\\ - \\ -例:ポアソン分布で乱数を2000個発生させ,10個ずつの平均をRで計算し, -\begin{verbatim} - cmdL=[ - "tmp1=rpois",[2000,5], - "tmp2=c()",[], - "for(k in 1:200){",[], - " tmp=tmp1[(10*(k-1)+1):(10*k)]",[], - " tmp2=c(tmp2,mean(tmp))",[], - "}",[], - "=tmp2",[] - ]; - CalcbyR("rd2",cmdL); - Setscaling(1/10); - Histplot("2",rd2); -\end{verbatim} - -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +\item[関数] CalcbyR(変数名,コマンド列,option) +\item[機能] Rのコマンドを実行して結果を返す +\item[説明] バッチファイル kc.bat / シェルファイル kc.sh を利用してRとデータをやり取りし,計算結果を取得する。 + + コマンド列は,"戻り値=コマンド",[引数] の2つをセットとして並べる。 + + 最後の行の結果が戻り値として第1引数の変数名に代入される。"戻り値1::戻り値2・・",[] の形(戻り値1,戻り値2・・は各コマンドの戻り値)でコマンドを書くと,戻り値1,・・のリストとなる。戻り値が一つの場合は実数。"=値",[] の形の場合,「値」がそのまま戻り値となる。 + +\vspace{\baselineskip} +【例】Rを用いてN(50,$5^2$)から10個の乱数を発生し,平均と不偏分散もRで計算してその結果をコンソールに表示する。 +\begin{verbatim} + cmdL=[ + "tmp1=rnorm",[10,50,5], + "tmp2=mean",["tmp1"], + "tmp3=var",["tmp1"], + "tmp1::tmp2::tmp3",[] + ]; + CalcbyR("rd",cmdL); + dt=rd_1; + mx=rd_2; + vx=rd_3; + println("データ:"+dt); + println("平均:"+format(mx,4)+" 不偏分散:"+format(vx,4)); +\end{verbatim} + CalcbyR()によって,データと平均,不偏分散からなるリストが作成されるので,mxに平均,vxに不偏分散を代入している。\verb|rd_(-1)| は,リスト rd の末尾の要素。 + +\vspace{\baselineskip} +【例】Rでポアソン分布から200個の乱数をとり,標本平均の分布の様子=分散が小さくなって,正規分布に近づいている様子=をヒストグラムで見る。分散はRで求めた不偏分散に (n-1)/n をかけて再計算してコンソールに表示する。 +\begin{verbatim} + cmdL=[ + "tmp1=rpois",[200,5], + "tmp2=mean",["tmp1"], + "tmp3=var",["tmp1"], + "=c(tmp2,tmp3,tmp1)",[] + ]; + CalcbyR("rd",cmdL); + dt=rd_(3..length(rd)); + n=length(dt); + mx=rd_1; + vx=rd_2*(n-1)/n; + sx=sqrt(vx); + println(dt); + println(["m="+format(mx,4),"v="+format(vx,4)]); + Setscaling(1/5); + Histplot("1",dt,["Breaks=seq(0,14,1)","dr,0.5"]); +\end{verbatim} +\vspace{\baselineskip} + \begin{center} \input{Fig/poison01} \end{center} +\vspace{\baselineskip} +【例】ポアソン分布で乱数を2000個発生させ,10個ずつの平均をRで計算し,ヒストグラムを作る。 +\begin{verbatim} + cmdL=[ + "tmp1=rpois",[2000,5], + "tmp2=c()",[], + "for(k in 1:200){",[], + " tmp=tmp1[(10*(k-1)+1):(10*k)]",[], + " tmp2=c(tmp2,mean(tmp))",[], + "}",[], + "=tmp2",[] + ]; + CalcbyR("rd2",cmdL); + Setscaling(1/10); + Histplot("2",rd2); +\end{verbatim} + +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} \hypertarget{histplot}{} -\item[関数] Histplot(name,data,option) -\item[機能] Rを利用してヒストグラムを描く -\item[説明] dataはリストにして作成するか,外部ファイルからReadcsv()で読み込む。\\ -階級範囲(ブレークポイント)は,通常スタージェスの公式によるが,オプションで,\\ - "breaks=[0,10,20,30,40,50,60,70,80,90,100]"\\ -などと指定することもできる。\\ - この他のオプションは\\ - "Den=yes/no":密度の指定(初期値は no)\\ - "Rel=yes/no":相対度数にする/しない(初期値は no)\\ - \\ -例:csvファイル(datafile.csv)を読み込み,ヒストグラムを作る。Framedata2() と Rulerscale()を併用して,目盛付きの枠の中に表示する。表示枠の対角点A,BはCinderellaの作図ツールで作図しておく。 -\begin{verbatim} - Addax(0); - Setscaling(5); - Setunitlen("0.6mm"); - data=Readcsv("datafile.csv"); - Histplot("1",data,[""]); - Framedata2("1",[A,B]); - Rulerscale(A,["r",0,100,10],["r",0,15,5]); -\end{verbatim} - \input{Fig/histgram}\\ - -2行目と3行目は,データに合わせて縦方向を5倍にし,TeXの単位長を0.6mmにしている。\\ -Den,Rel オプションをyes にしたときは,Setscaling(100)くら いにするのがよい。\\ -csvファイルが複数のデータからなる場合は,\\ - \verb|dt1=apply(rc1,#_1);| -として,リストの第1要素を取得する。第2要素のヒストグラムであれば \verb|#_2| とする。\\ - \\ -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +\item[関数] Histplot(name,data,option) +\item[機能] Rを利用してヒストグラムを描く +\item[説明] dataはリストにして作成するか,外部ファイルからReadcsv()で読み込む。 + +階級境界値(ブレークポイント)は,自動的に設定される(スタージェスの公式による)が,オプションで, + +\verb|"breaks=[0,10,20,30,40,50,60,70,80,90,100]"| + +などと指定することもできる。 + + この他のオプションは + + "Den=yes/no":密度の指定(初期値は no) + + "Rel=yes/no":相対度数にする/しない(初期値は no) + +\vspace{\baselineskip} +【例】csvファイル(datafile.csv)を読み込み,ヒストグラムを作る。Framedata() と Rulerscale()を併用して,目盛付きの枠の中に表示する。表示枠の対角点A,BはCinderellaの作図ツールで作図しておく。 +\begin{verbatim} + Addax(0); + Setscaling(5); + Setunitlen("0.6mm"); + data=Readcsv("datafile.csv"); + Histplot("1",data,[""]); + Framedata("1",[A,B],["corner"]); + Rulerscale(A,["r",0,100,10],["r",0,15,5]); +\end{verbatim} + \begin{center} \input{Fig/histgram} \end{center} + +2行目と3行目は,データに合わせて縦方向を5倍にし,TeXの単位長を0.6mmにしている。 + +Den,Rel オプションをyes にしたときは,Setscaling(100)くらいにするのがよい。 + +csvファイルが複数のデータからなる場合は, + + \verb|dt1=data_1;| +として,リストの第1要素を取得する。第2要素のヒストグラムであれば \verb|data_2| とする。 + +\vspace{\baselineskip} +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} \hypertarget{plotdatar}{} -\item[関数] PlotdataR(name,式,変数) -\item[機能] Rの関数のグラフを描く -\item[説明] Cindyscriptの組み込み関数にはない関数のグラフをRを利用して描く。\\ +\item[関数] PlotdataR(name,式,変数) +\item[機能] Rの関数のグラフを描く +\item[説明] Cindyscriptの組み込み関数にはない関数のグラフをRを利用して描く。 -例:平均5, 標準偏差2の正規分布の密度関数と分布関数のグラフを描く。 +\vspace{\baselineskip} +【例】平均5, 標準偏差2の正規分布の密度関数と分布関数のグラフを描く。 \begin{verbatim} - PlotdataR(“1”, “dnorm(x,5,2)”, ”x=[0,10]”); - PlotdataR(“2”, ”pnorm(x,5,2)”, ”x=[0,10]”); + PlotdataR(“1”, “dnorm(x,5,2)”, ”x=[0,10]”); + PlotdataR(“2”, ”pnorm(x,5,2)”, ”x=[0,10]”); \end{verbatim} -例:標準正規分布のグラフ上の点とx軸を結んだ線分を描く。\\ +\hspace{20mm} \input{Fig/plotdatar1} + +【例】標準正規分布のグラフ上の点とx軸を結んだ線分を描く。 + 点A,BはCinderellaの作図ツールで作図しておき,点Aをグラフ上のおよその位置に置いてから実行する。 \begin{verbatim} - PlotdataR("1","dnorm(x)","x=[-5,5]"); - Putoncurve("A","grR1",[-3,3]); - Putpoint("B",[A.x,0]); - Listplot("1",[A,B]); -\end{verbatim} -2行目の最後の引数の[-3,3]は,その範囲を動かすことを意味する。\\ -Aはグラフ上を動かすことができて,Bはそれに伴って動く。ただし,少し動かす度に バッチ/シェル ファイルを実行するので,煩雑な場合は,Plotdata() の行をコメント化してから点Aを動かしたあと再実行するとよい。\\ - \\ -例:上と同様で,x軸上の点を自由点Aとし,曲線上にBを置く。 -\begin{verbatim} - PlotdataR("1","dnorm(x)","x=[-5,5]"); - PlotdataR("1","dnorm(x)","x=[-5,5]"); - A.xy=[A.x,0]; - Lineplot("1",[A,A+[0,1]],["nodisp"]); - Putintersect("B","grR1","ln1"); - Listplot("1",[A,B]); -\end{verbatim} - \\ -例:前の例のグラフで,ABの左側にShadeをかけ,Shadeの部分の面積を求める。Pの値を表示する位置に,Cinderellaの作図ツールで点Cをとっておく。 -\begin{verbatim} - tmp1=[0.2,0,0,0]; - tmp2=Colorcmyk2rgb(tmp1); - Setcolor(tmp1); - Setcolor([0.2,0,0,0]); - Shade(["en1"],["Color="+text(tmp2)]); - Setcolor("black"); - PlotdataR("1","dnorm(x)","x=[-5,5]",["Num=100"]); - Putpoint("A",[0,0],[A.x,0]); - Lineplot("1",[A,A+[0,1]],["nodisp"]); - Putintersect("B","grR1","ln1"); - Listplot("1",[A,B]); - Listplot("2",[[-5,0],[5,0]],"nodisp"); - Enclosing("1",["Invert(grR1)","sg2","sg1"],[B,"notex"]); - tmp=0.5+Integrate("grR1",[0,A.x]); - Expr([A,"s",text(A.x),C,"e","P="+text(tmp)]); -\end{verbatim} - \\ - \input{Fig/rshade}\\ - \\ -Shade() はプロットデータを定義しないので,先に書いておくと塗ってから線を描くので,にじみがなくきれいに仕上がる。("en1"はEnclosing("1"・・)でできるプロットデータ)\\ - \\ -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} + PlotdataR("1","dnorm(x)","x=[-5,5]"); + PutonCurve("A","grR1",[-3,3]); + Putpoint("B",[A.x,0]); + Listplot("1",[A,B]); +\end{verbatim} +2行目の最後の引数の[-3,3]は,その範囲を動かすことを意味する。 -\hypertarget{plotdiscr}{} -\item[関数] PlotdiscR(name,式,変数) -\item[機能] Rを利用して離散型のグラフを描く -\item[説明] dbinom (二項分布),dpois(ポアソン分布),dgeom(幾何分布)など離散型確率分布のグラフを描く。\\ - \\ -例:二項分布のグラフと正規分布のグラフを比較する。 +Aはグラフ上を動かすことができて,Bはそれに伴って動く。ただし,少し動かす度に バッチ/シェル ファイルを実行するので,煩雑な場合は,Plotdata() の行をコメント化してから点Aを動かしたあと再実行するとよい。 + +\vspace{\baselineskip} +【例】上と同様で,x軸上の点を自由点Aとし,曲線上にBを置く。 \begin{verbatim} - Setscaling(20); - PlotdiscR("1","dbinom(k,10,0.4)","k=[0,10]"); - PlotdataR("1","dnorm(x,10*0.4,sqrt(10*0.4*0.6))","x=[0,10]",["do"]); + PlotdataR("1","dnorm(x)","x=[-5,5]"); + PlotdataR("1","dnorm(x)","x=[-5,5]"); + A.xy=[A.x,0]; + Lineplot("1",[A,A+[0,1]],["nodisp"]); + Putintersect("B","grR1","ln1"); + Listplot("1",[A,B]); \end{verbatim} - \\ - \input{Fig/binvsnormal}\\ - \\ -関数部分が長くなるときは,Assign()を利用して次のように書くこともできる。 +\vspace{\baselineskip} +【例】前の例のグラフで,ABの左側にShadeをかけ,Shadeの部分の面積を求める。Pの値を表示する位置に,Cinderellaの作図ツールで点Cをとっておく。 \begin{verbatim} - tmp="dnorm(x,n*p,sqrt(n*p*(1-p)))"; - tmp=Assign(tmp,["n",10,"p",0.4]); - PlotdataR("2",tmp,"x=[0,10]",["do"]); + PlotdataR("1","dnorm(x)","x=[-5,5]",["Num=100"]); + Putpoint("A",[0,0],[A.x,0]); + Lineplot("1",[A,A+[0,1]],["nodisp"]); + Putintersect("B","grR1","ln1"); + Listplot("1",[A,B]); + Listplot("2",[[-5,0],[5,0]],"nodisp"); + Enclosing("1",["Invert(grR1)","sg2","sg1"],[B,"notex"]); + Shade(["en1"],["Color=[0.2,0,0,0]"]); + tmp=0.5+Integrate("grR1",[0,A.x]); + Expr([A,"s",text(A.x),C,"e","P="+text(tmp)]); \end{verbatim} -次は,ポアソン分布および幾何分布のグラフ。 + \begin{center} \input{Fig/rshade} \end{center} + +\vspace{\baselineskip} +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} + +\vspace{\baselineskip} +\hypertarget{plotdiscr}{} +\item[関数] PlotdiscR(name,式,変数) +\item[機能] Rを利用して離散型のグラフを描く +\item[説明] dbinom (二項分布),dpois(ポアソン分布),dgeom(幾何分布)など離散型確率分布のグラフを描く。 + +\vspace{\baselineskip} +【例】二項分布のグラフと正規分布のグラフを比較する。 +\begin{verbatim} + Setscaling(20); + PlotdiscR("1","dbinom(k,10,0.4)","k=[0,10]"); + PlotdataR("1","dnorm(x,10*0.4,sqrt(10*0.4*0.6))","x=[0,10]",["do"]); +\end{verbatim} +\vspace{\baselineskip} +\begin{center} \scalebox{0.9}{\input{Fig/binvsnormal}} \end{center} + +【例】ポアソン分布および幾何分布のグラフ。 \begin{verbatim} PlotdiscR("2","dpois(k,4)","k=[0,10]"); PlotdiscR("3","dgeom(k,0.3)","k=[0,10]"); \end{verbatim} - \\ -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +%\vspace{\baselineskip} +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} \hypertarget{readcsv}{} -\item[関数] Readcsv(path,filename,option) -\item[機能] Rを利用してcsvファイルを読む。 -\item[説明] Rを使ってcsvファイルを読みこむ。戻り値は読み込んだデータのリスト。\\ -第1引数の path は,ファイルを ketwork フォルダに置いた場合は省略することができる。そうでない場合は,フルパスで指定する。たとえば,"/Users/Hoge/Desktop"\\ -option は,"Flat=" で,"Flat=y" の場合は,読み込んだデータをリスト化したときに平滑化(1次元のリスト)にする。デフォルトは "Flat=n"\\ -また,Rを使わずScilabを使って読み込むこともできる。その場合は,optionに"Use=S" をつけるが,Macで作成したファイルで,改行コードがCRのみの場合はうまく読み込むことができない。Windows標準のCR+LFなら読み込める。 +\item[関数] Readcsv(path,filename,option) +\item[機能] Rを利用してcsvファイルを読む。 +\item[説明] Rを使ってcsvファイルを読みこむ。戻り値は読み込んだデータのリスト。 + +第1引数の path は,ファイルを作業フォルダ( 初期設定は fig )に置いた場合は省略することができる。そうでない場合は,フルパスで指定する。たとえば,"/Users/Hoge/Desktop" + +option は,"Flat=" で,"Flat=y" の場合は,読み込んだデータをリスト化したときに平滑化(1次元のリスト)にする。 初期設定は "Flat=n" + +【例】次のようなCSVファイル sample.csvを読み込むとする。 -利用例は Boxplot() などの例を参照のこと。\\ - \\ +\begin{verbatim} + 12,14,15,18,13 + 9,13,17,21 +\end{verbatim} + +つまり,2行分のデータである。 + +\begin{verbatim} + data=Readcsv("sample.csv"); +\end{verbatim} + +とすると, +\begin{verbatim} + data=[[12,14,15,18,13],[9,13,17,21]] +\end{verbatim} +となる。 + +したがって,1行目のデータだけ取り出したい場合は + +\begin{verbatim} + dt1=data_1; +\end{verbatim} + +とする。 + +\vspace{\baselineskip} \hypertarget{scatterplot}{} -\item[関数] Scatterplot(name,filename,option) -\item[機能] 2次元データを読み込み,散布図を描く -\item[説明] 外部ファイル filename(csv形式)を読み,散布図を描く。\\ -オプションは "Reg=no" : 回帰直線を描くかどうか(yes/no) 初期値は yes\\ - A, B 表示枠の対角点(左下と右上の点)(Cinderellaで作図)\\ - C 相関係数と回帰直線の式を表示する点\\ - "Size=n" :点の大きさ。Cinderellaの描画面には反映されない。\\ - 描画面の点も大きくする場合は,"size-$>$n"オプションを追加する。\\ -例:data.csv を読んで散布図を描き,回帰直線を引く。 -\begin{verbatim} - Scatterplot("1","data.csv",["Reg=yes",A,B,C,"Size=5"]); - Rulerscale(A,["r",0,10,1],["r",1,10,1]); -\end{verbatim} - optionの点A,BはCinderellaの作図ツールでとった表示領域の対角点。( Aが左下。なお,対角点の名称はA,Bには限らない。)\\ - 回帰直線を描く場合("Reg=yes")は,回帰直線が枠からはみ出すので,AをSW,BをNEに一致させるとよい。\\ - Cは相関係数と回帰直線の式を表示する点としてCinderellaの作図ツールで取る。これも,名称はCには限らない。\\ - \verb|Rulerscale(A,["r",0,10,1],["r",1,10,1]);|\\ - で表示枠に目盛を打っている。"r" は等幅,"f"は Tickmark と同じ指定。\\ - \\ - \input{Fig/scatter}\\ +\item[関数] Scatterplot(name,filename/datalist,option1,option2) +\item[機能] 2次元データを読み込み,散布図を描く +\item[説明] 外部ファイル filename(csv形式)を読み,散布図を描く。 + +外部ファイルの2次元データとは,次の形のcsvファイル。(行末はLFまたはCR) +\begin{verbatim} + 2.3, 4.5 (LF) + 3.2, 7 (LF) + 2.0, 6.8 (LF) +\end{verbatim} + + +datalistの場合は,次の形。 + +\begin{verbatim} + data=[[2.3,4.5],[3.2,7],[2.0,6.8], ・・・ ]; +\end{verbatim} + + +第1オプションは,回帰直線を描くかどうかと点のスタイル。 + +"Reg=no" : 回帰直線を描くかどうか(yes/no) 初期値は yes + +第2オプションは,相関係数と回帰直線の式を表示する位置と,回帰直線のスタイル。 + +位置は,幾何点の名称でもよい。 + +\vspace{\baselineskip} +【例】data.csv を読んで散布図を描き,回帰直線を引く。 +\begin{verbatim} + Scatterplot("1","data.csv"); +\end{verbatim} + +だけで描ける。オプションをつけた例は次。 + +点Aを相関係数と回帰直線の式を表示する点としてCinderellaの作図ツールで取る。 + +点を青で大きさ2とし,回帰直線を緑で表示する。 + +\begin{verbatim} + Scatterplot("1","data.csv",["Size=4","Color=blue"],[A,"Color=green"]); + Listplot("1",[[0,7],[0,0],[7,0]]); + Rulerscale([0,0],["r",0,7,1],["r",1,7,1]); +\end{verbatim} + +\vspace{\baselineskip} + \begin{center} \input{Fig/scatter} \end{center} + \end{description} \newpage -% Maximaとの連携 ================================== +% Maximaとの連携 ================================== \subsection{Maximaとの連携} -Maximaは数式処理ソフトで,KeTCindyにおいては微積分の計算など,Cindyscriptでは不十分な点を補うことができる。\\ - KeTCindyでは,kc.bat/shによってコマンドをMaximaに渡し,結果をテキストファイルで受け取る。このとき,Maximaとのやりとりで,次のようなファイルが作業ディレクトリに作成される。\\ -拡張子 max :Maxima用のファイル\\ -拡張子 txt:データファイル\\ -このデータのやり取りに関する次のオプションがある。\\ - オプションなしまたは,”” のとき\\ - i) データファイルがなければ,新しく作る\\ - ii) データファイルが既にあればそれを読み込む\\ - "m" のとき,強制的にデータファイルを作り直す。\\ - "r" のとき,すでにあるデータファイルを読み込む。\\ - このとき,ファイルの読み書きで不具合があると,数秒の後「==$>$ file.txt not generated (5 s ) 」のようなエラーメッセージがコンソールに表示される。このような場合は作業ディレクトリの設定などを確認していただきたい。この待ち時間については,Waitオプションで設定することもできる。\\ +Maximaは数式処理ソフトで,\ketcindy においては微積分の計算など,Cindyscriptでは不十分な点を補うことができる。 + + \ketcindy では,kc.bat/shによってコマンドをMaximaに渡し,結果をテキストファイルで受け取る。このとき,Maximaとのやりとりで,次のようなファイルが作業ディレクトリに作成される。 + +拡張子 max :Maxima用のファイル +拡張子 txt:データファイル + +このデータのやり取りに関する次のオプションがある。 + + オプションなしまたは,”” のとき + + i) データファイルがなければ,新しく作る + + ii) データファイルが既にあればそれを読み込む + + "m" のとき,強制的にデータファイルを作り直す。 + + "r" のとき,すでにあるデータファイルを読み込む。 + + このとき,ファイルの読み書きで不具合があると,数秒の後「==$>$ file.txt not generated (5 s ) 」のようなエラーメッセージがコンソールに表示される。このような場合は作業ディレクトリの設定などを確認していただきたい。この待ち時間については,Waitオプションで設定することもできる。 + \begin{description} \hypertarget{calcbyM}{} -\item[関数] CalcbyM(name,コマンド,option) -\item[機能] Maximaのスクリプトを実行する -\item[説明] 第2引数はMaximaで実行するコマンド。\\ - コマンドと引数リストの繰り返しからなるリスト(例えばcmdL)を作って,一度に実行する。\\ - 戻り値はない。(未定義値) 結果は,コマンドリストの最後に記述した変数(引数は空リスト)の値がname で指定された変数に代入される。複数の結果を戻すときは,:: で区切って記述するとリストにして代入される。\\ - \\ -例:$\sin x$ とその導関数を表示する。結果は 変数 fdf に f とdf のリストが代入される。 -\begin{verbatim} - cmdL=[ - "f:sin(x)", [], - "df:diff",["sin(x)","x"], - "f::df",[] - ]; - CalcbyM("fdf",cmdL); - println(fdf); -\end{verbatim} - \\ - 実行すると,コンソールに,[sin(x),cos(x)] と表示される。\\ - \\ -例:2次方程式 $x^2-x-4=0$の解を求める。 -\begin{verbatim} - cmdL=[ - "ans:solve",["x^2-x-4","x"], - "ans",[] - ]; - CalcbyM("ans",cmdL); - println("ans="+ans); -\end{verbatim} - コンソールには\\ - ans=[x = -(sqrt(17)-1)/2,x = (sqrt(17)+1)/2] \\ - が表示される。\\ - \\ -{\bf 応用例1:曲線の接線を引く}\\ - \\ - $f(x)=\dfrac{e^x+e^{-x}}{2}$ の,$x=a$における接線の方程式を作る。\\ +\item[関数] CalcbyM(name,コマンド,option) +\item[機能] Maximaのスクリプトを実行する +\item[説明] 第2引数はMaximaで実行するコマンド。 + +コマンドと引数リストの繰り返しからなるリスト(例えばcmdL)を作って,一度に実行する。 + +戻り値はない。(未定義値) 結果は,コマンドリストの最後に記述した変数(引数は空リスト)の値がname で指定された変数に代入される。複数の結果を戻すときは,:: で区切って記述するとリストにして代入される。 + +\vspace{\baselineskip} +【例】$\sin x$ とその導関数を表示する。結果は 変数 fdf に f とdf のリストが代入される。 +\begin{verbatim} + cmdL=[ + "f:sin(x)", [], + "df:diff",["sin(x)","x"], + "f::df",[] + ]; + CalcbyM("fdf",cmdL); + println(fdf); +\end{verbatim} +\vspace{\baselineskip} + 実行すると,コンソールに,[sin(x),cos(x)] と表示される。 + +\vspace{\baselineskip} +【例】2次方程式 $x^2-x-4=0$の解を求める。 +\begin{verbatim} + cmdL=[ + "ans:solve",["x^2-x-4","x"], + "ans",[] + ]; + CalcbyM("ans",cmdL); + println("ans="+ans); +\end{verbatim} + コンソールには + + ans=[x = -(sqrt(17)-1)/2,x = (sqrt(17)+1)/2] + + が表示される。 + +\vspace{\baselineskip} +{\bf 応用例1:曲線の接線を引く} + +\vspace{\baselineskip} + $f(x)=\dfrac{e^x+e^{-x}}{2}$ の,$x=a$における接線の方程式を作る。 + Maximaでその処理を行うコマンドを定義し,CalbyMで実行する。 \begin{verbatim} - fx="(exp(x)+exp(-x))/2"; - cmdL=[ - "df:diff",[fx,"x"], - "c:ev",["df","x=a"], - "b:ev",[fx,"x=a"], - "eq:c*(x-a)+b",[], - "eq",[] - ]; - CalcbyM("tn1",cmdL); - println(tn1); + fx="(exp(x)+exp(-x))/2"; + cmdL=[ + "df:diff",[fx,"x"], + "c:ev",["df","x=a"], + "b:ev",[fx,"x=a"], + "eq:c*(x-a)+b",[], + "eq",[] + ]; + CalcbyM("tn1",cmdL); + println(tn1); \end{verbatim} - コンソールには + コンソールには \begin{verbatim} - (%e^a-%e^-a)*(x-a))/2+(%e^a+%e^-a)/2 + (%e^a-%e^-a)*(x-a))/2+(%e^a+%e^-a)/2 \end{verbatim} が表示される。\\ - この,CalbyMの戻り値 tn1 を用いて,曲線上の1点Aにおける接線のグラフを描く。以下のスクリプトを追加する。なお,点AをCinderellaの作図ツールで適当なところにとっておく。 -\begin{verbatim} - tn1=Assign(tn1,["%e^a","exp(a)","%e^-a","exp(-a)"]); - Plotdata("1",fx,"x"); - Putoncurve("A","gr1"); - tmp=Assign(tn1,["a",A.x]); - plotdata("2",tmp,"x",["Num=2"]); -\end{verbatim} -1行目ではMaximaで作成した式を,Cindyscriptでプロットできる式にしている。\\ - \\ - \input{Fig/maxfun01}\\ - \\ - なお,接線の方程式を求めるだけであれば,Mxfun()を使うこともできる。Mxfun()の解説を参照のこと。\\ - \\ -{\bf 応用例2:パラメトリックの場合の接線}\\ - \\ - 媒介変数の値を決めるために,点AをCinderellaの描画面のx軸上にとっておき,その$x$座標を媒介変数$t$の値とする。スライダを作ってもよい。 -\begin{verbatim} - fn="3*cos(t)^2*[cos(t),sin(t)]"; - cmdL=[ - "f:",[fn], - "df:diff",["f","t"], - "df:trigsimp",["df"], - "tn:f+s*df",[], - "tn",[] - ]; - CalcbyM("tn2",cmdL); - Paramplot("1",fn,"t=[0,2*pi]",["Num=100"]); - gn=Assign(tn2,["t",A.x]); - Paramplot("2",gn,"s=[-3,3]"); -\end{verbatim} - \\ - \input{Fig/maxfun02}\\ - \\ - cmdLで定義しているMaximaのコマンド(trigsimp など)については,Maximaの解説書などを参照されたい。\\ -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} - \\ -\hypertarget{example}{} -\item[関数] Example("Mxfun",文字) -\item[機能] Mxfunの使用例を表示。文字は "a","b",など。 -\item[説明] たとえば,\verb|Example("Mxfun","a")| とすると,Mxfunの使用例がコンソールに表示される。\\ - \\ + この,CalbyMの戻り値 tn1 を用いて,曲線上の1点Aにおける接線のグラフを描く。以下のスクリプトを追加する。なお,点AをCinderellaの作図ツールで適当なところにとっておく。 +\begin{verbatim} + tn1=Assign(tn1,["%e^a","exp(a)","%e^-a","exp(-a)"]); + Plotdata("1",fx,"x"); + PutonCurve("A","gr1"); + tmp=Assign(tn1,["a",A.x]); + plotdata("2",tmp,"x",["Num=2"]); +\end{verbatim} +1行目ではMaximaで作成した式を,Cindyscriptでプロットできる式にしている。 +\vspace{\baselineskip} + \begin{center} \input{Fig/maxfun01} \end{center} +\vspace{\baselineskip} + なお,接線の方程式を求めるだけであれば,Mxfun()を使うこともできる。Mxfun()の解説を参照のこと。 + +\vspace{\baselineskip} +{\bf 応用例2:パラメトリックの場合の接線} + +\vspace{\baselineskip} + 媒介変数の値を決めるために,点AをCinderellaの描画面のx軸上にとっておき,その$x$座標を媒介変数$t$の値とする。スライダを作ってもよい。 + +\begin{layer}{150}{0} +\putnotese{60}{20}{ \input{Fig/maxfun02}} +\end{layer} +\begin{verbatim} + fn="3*cos(t)^2*[cos(t),sin(t)]"; + cmdL=[ + "f:",[fn], + "df:diff",["f","t"], + "df:trigsimp",["df"], + "tn:f+s*df",[], + "tn",[] + ]; + CalcbyM("tn2",cmdL); + Paramplot("1",fn,"t=[0,2*pi]",["Num=100"]); + gn=Assign(tn2,["t",A.x]); + Paramplot("2",gn,"s=[-3,3]"); +\end{verbatim} + +cmdLで定義しているMaximaのコマンド(trigsimp など)については,Maximaの解説書などを参照されたい。 + +%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +%\vspace{\baselineskip} +%\hypertarget{example}{} +%\item[関数] Example("Mxfun",文字) +%\item[機能] Mxfunの使用例を表示。文字は "a","b",など。 +%\item[説明] たとえば,\verb|Example("Mxfun","a")| とすると,Mxfunの使用例がコンソールに表示される。 + +\vspace{\baselineskip} \hypertarget{mxbatch}{} -\item[関数] Mxbatch(ファイル名) -\item[機能] Maximaのファイルを実行するコマンド作る -\item[説明] Dirlibで指定されたフォルダの中の maximaL フォルダにあるファイルを実行するための,CalcbyM用のコマンドを作成する。\\ -例:\verb|cmd=Mxbatch("fourier_sec")|\\ - を実行すると,cmdに\\ - \verb|[batch,["/Applications/ketcindy/ketlib/maximaL/fourier_sec.max"]] |\\ - が代入される。そこで,\\ - \verb|CalcbyM("ret",cmd,[]);|\\ - を実行すれば,fourier\_sec.max が実行されて,結果を ret に取得できる。\\ - fourier\_sec.max に続けて,コマンド列 cmd2 を実行することもでき,その場合は -\begin{verbatim} - cmdL=Concat(Mxbatch("fourier_sec"),cmd2); - CalcbyM("ret",cmdL,[]); -\end{verbatim} -とする。(Concat() はリストを結合するCindyscriptの関数)\\ -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} - \\ +\item[関数] Mxbatch(ファイル名) +\item[機能] Maximaのファイルを実行するコマンドを作る +\item[説明] ketcindy/ketlib/maximaL にあるファイルを実行するための,CalcbyM用のコマンドを作成する。 + +ketcindy/ketlib/maximaL には,fourier\_sec.max , matoperation.max , poincare.mac の3つのファイルが入っている。たとえば,フーリエ級数を扱うときには,fourier\_sec.max を使用する。 + +\vspace{\baselineskip} +【例】\verb|cmd=Mxbatch("fourier_sec")| + を実行すると,cmdに,たとえば + + \verb|[batch,["/Applications/ketcindy/ketlib/maximaL/fourier_sec.max"]] | + + が代入される。(Mac/Windows および KeTCindyの設定によって異なる) + + そこで,次のように利用する。 + +\begin{verbatim} + Setax(["a"]); + Slider("A-C-B",[-5.5,-1.5],[4.5,-1.5]); + defL=["1",[-3,-2],1,"0",[-2,-1],1,"-x",[-1,1],1,"0",[1,2],1,"-1",[2,3],1]; + Drwxy(); + tmp=Periodfun(defL,1,["dr,2","Color=red"]); + fun=tmp_1; + per=tmp_2; + Htickmark([1,"n","1",2,"n","2",3,"nw","3"]); + Htickmark([-1,"-1",-2,"-2",-3,"-3"]); + cmdL=Concat(Mxbatch("fourier_sec"),[ + "Ffun(x):="+fun,[], + "c:fourier_sec_coeff",["Ffun(x)","x"], + "c[1]::c[2]::c[3]",[] + ]); + CalcbyM("ans",cmdL,[]); + nterm=round(4*(C.x-A.x)); + Fourierseries("1",ans,per,nterm,["Num=400"]); + Mxtex("2",ans_3); + Expr([[-5,-2],"e","s_n="+tx2,[4,-2],"e","n="+text(nterm)]); +\end{verbatim} + +\hspace{20mm}\input{Fig/mxbatch} + +%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} + +\vspace{\baselineskip} \hypertarget{mxfun}{} -\item[関数] Mxfun(name,式,リスト,option) -\item[機能] Maximaの関数を実行する -\item[説明] 第2引数の「式」はMaximaの関数名。第3引数のリストは関数に渡す引数のリスト。\\ - 戻り値は,第1引数の式に1つでも文字があると文字列となる。すべて数字(+,-, . を含む)の場合は -16桁以下であれば数,それ以上の場合は文字列となる。また,戻り値は,変数 mxname にも代入される。\\ -オプションに "Disp=no" をつけると,結果をコンソールに表示しない。\\ - \\ -例:$10!$を求める。\\ - \verb|Mxfun("1","10!",[],[""]);|\\ - を実行すると,コンソールに mx1 is 362880 と表示される。この値は変数 mx1 に代入されているので,\\ - \verb|drawtext([0,1],mx1);|\\ -とすればCinderellaの描画面上に表示される。\\ - また,戻り値を別の変数に代入して使うこともできる。 -\begin{verbatim} - fact10=Mxfun("1","10!",[],[""]); - drawtext([0,1],fact10); -\end{verbatim} - \\ -例:$f(x)=\sin x$ を微分する\\ - \verb|Mxfun("1", "diff",["sin(x)","x"])|\\ - とすると\\ - diff(sin(x),x)\\ - というコマンドをMaximaに渡して,戻り値をCindyの変数mx1に代入する。\\ - \verb|Mxfun("1", "diff(sin(x),x)",[]])|\\ - と,第1引数にまとめても同じ結果になる。ただし,この場合,第2引数は空リストとする。\\ - 文字列を引数とする場合,例えば,文字列を連結するコマンドconcatでは,\\ - concat("a","b")\\ - とするが,Cindyscriptの文字列の処理の関係で,第1引数ではこの形で記述できない。\\ - したがって,このような場合は,第2引数を使って\\ - \verb|Mxfun("1","concat",["a","b"])| - とすればよい。\\ - \\ -{\bf Cindyscriptの微分との違い}\\ - Cindyscriptでも微分はできる。たとえば, -\begin{verbatim} - f(x):=sin(x); - g(x):=d(f(#),x); - plot(g(#)); -\end{verbatim} - とすると,cos(x)のグラフが描かれる。\\ - しかし,Cindyscriptの微分が,微分の定義による数値計算であるのに対し,Maximaでは数式処理として微分ができる。\\ - その意味の違いは,次のスクリプトで確かめられる。 -\begin{verbatim} - f(x):=sin(x); - g(x):=d(f(#),x); - println(g(x)); -\end{verbatim} - では,コンソールに表示されるのは未定義値(\_ \_ \_) である。\\ +\item[関数] Mxfun(name,式,リスト,option) +\item[機能] Maximaの関数を実行する +\item[説明] 第2引数の「式」はMaximaの関数名。第3引数のリストは関数に渡す引数のリスト。 + +戻り値は,第1引数の式に1つでも文字があると文字列となる。すべて数字(+,-, . を含む)の場合は +16桁以下であれば数,それ以上の場合は文字列となる。また,戻り値は,変数 mxname にも代入される。 + +オプションに "Disp=no" をつけると,結果をコンソールに表示しない。 + +\vspace{\baselineskip} +【例】$10!$を求める。 + + \verb|Mxfun("1","10!",[]);| + + を実行すると,コンソールに mx1 is 362880 と表示される。この値は変数 mx1 に代入されているので, + + \verb|drawtext([0,1],mx1);| + +とすればCinderellaの描画面上に表示される。mx1のかわりに,戻り値を変数に代入して使うこともできる。 + +\begin{verbatim} + fact10=Mxfun("1","10!",[]); + drawtext([0,1],fact10); +\end{verbatim} + +\vspace{\baselineskip} +【例】$f(x)=\sin x$ を微分する + + \verb|Mxfun("1", "diff",["sin(x)","x"])| + + とすると + + diff(sin(x),x) + + というコマンドをMaximaに渡して,戻り値をCindyの変数mx1に代入する。 + + \verb|Mxfun("1", "diff(sin(x),x)",[]])| + + と,第1引数にまとめても同じ結果になる。ただし,この場合,第2引数は空リストとする。 + + 文字列を引数とする場合,例えば,文字列を連結するコマンドconcatでは, + + concat("a","b") + + とするが,Cindyscriptの文字列の処理の関係で,第1引数ではこの形で記述できない。 + + したがって,このような場合は,第2引数を使って + + \verb|Mxfun("1","concat",["a","b"])| + + とすればよい。 + +\vspace{\baselineskip} +{\bf Cindyscriptの微分との違い} + + Cindyscriptでも微分はできる。たとえば, +\begin{verbatim} + f(x):=sin(x); + g(x):=d(f(#),x); + plot(g(#)); +\end{verbatim} + とすると,cos(x)のグラフが描かれる。 + + しかし,Cindyscriptの微分が,微分の定義による数値計算であるのに対し,Maximaでは数式処理として微分ができる。 + + その意味の違いは,次のスクリプトで確かめられる。 +\begin{verbatim} + f(x):=sin(x); + g(x):=d(f(#),x); + println(g(x)); +\end{verbatim} + では,コンソールに表示されるのは未定義値(\_ \_ \_) である。 + 一方, \begin{verbatim} - Mxfun("1", "diff",["sin(x)","x"]); - println(mx1); + Mxfun("1", "diff",["sin(x)","x"]); + println(mx1); \end{verbatim} -では,コンソールに \verb|cos(x)| と表示される。\\ +では,コンソールに \verb|cos(x)| と表示される。 + mx1は文字列であるので, \begin{verbatim} - g(x):=parse(mx1); -\end{verbatim} -とすれば,g(x)を導関数とすることができ,\verb|plot(g(#))| でグラフを描くことができる。\\ - また,Cindyscriptの微分では,3階か4階までの導関数が計算上の限度であるのに対し,Maximaなら何階でも微分ができるので,テイラー展開などで有利である。\\ - \\ - \\ -例 $\sin x$ の テイラー展開を行い,グラフを表示する。 -\begin{verbatim} - Mxfun("1","taylor",["sin(x)","x",0,7],[""]); - Plotdata("1","sin(x)","x",["da"]); - Plotdata("2",mx1,"x"); -\end{verbatim} - \\ - \input{Fig/taylor} - \\ -Mxtex() を用いて,Mxfun()の結果の mx1をTeX書式にして表示することもできる。\\ - \verb|Expr([[1,2],"e",Mxtex("1",mx1)]);|\\ -を追加すれば[1,2]の位置に式が表示される。\\ - \\ - \\ -{\bf 応用例:接線の方程式を作る}\\ - \\ - $f(x)=\dfrac{e^x+e^{-x}}{2}$ の,$x=a$における接線の方程式を作る。\\ - 関数式を文字列にしておき,Assign() を用いて変数$x$を$a$に変えれば,$f(a)$の式を作ることができる。導関数についても同様にする。\\ -\begin{verbatim} - fx="(exp(x)+exp(-x))/2"; - gx=Mxfun("1","diff",[fx,"x"]); - fa=Assign(fx,["x","a"]); - ga=Assign(gx,["x","a"]); - tf=ga+"*(x-a)+("+fa+")"; - println(tf); -\end{verbatim} - コンソールには -\begin{verbatim} - (%e^a-%e^-a)/2*(x-a)+((exp(a)+exp(-a))/2) + g(x):=parse(mx1); \end{verbatim} -が表示される。\\ -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} - \\ +とすれば,g(x)を導関数とすることができ,\verb|plot(g(#))| でグラフを描くことができる。 + + また,Cindyscriptの微分では,3階か4階までの導関数が計算上の限度であるのに対し,Maximaなら何階でも微分ができるので,テイラー展開などで有利である。 + +\vspace{\baselineskip} +\vspace{\baselineskip} +例 $\sin x$ の テイラー展開を行い,グラフを表示する。 +\begin{verbatim} + Mxfun("1","taylor",["sin(x)","x",0,7],[""]); + Plotdata("1","sin(x)","x",["da"]); + Plotdata("2",mx1,"x"); +\end{verbatim} +\vspace{\baselineskip} + \begin{center} \input{Fig/taylor} \end{center} +\vspace{\baselineskip} +Mxtex() を用いて,Mxfun()の結果の mx1をTeX書式にして表示することもできる。 + + \verb|Expr([[1,2],"e",Mxtex("1",mx1)]);| + +を追加すれば[1,2]の位置に式が表示される。 + +\vspace{\baselineskip} +{\bf 応用【例】接線の方程式を作る} + +\vspace{\baselineskip} + $f(x)=\dfrac{e^x+e^{-x}}{2}$ の,$x=a$における接線の方程式を作る。 + + 関数式を文字列にしておき,Assign() を用いて変数$x$を$a$に変えれば,$f(a)$の式を作ることができる。導関数についても同様にする。 + +\begin{verbatim} + fx="(exp(x)+exp(-x))/2"; + gx=Mxfun("1","diff",[fx,"x"]); + fa=Assign(fx,["x","a"]); + ga=Assign(gx,["x","a"]); + tf=ga+"*(x-a)+("+fa+")"; + println(tf); +\end{verbatim} + コンソールには +\begin{verbatim} + (%e^a-%e^-a)/2*(x-a)+((exp(a)+exp(-a))/2) +\end{verbatim} +が表示される。 +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +\vspace{\baselineskip} \hypertarget{mxtex}{} -\item[関数] Mxtex(name,式) -\item[機能] 式をTeX書式にする -\item[説明] 第2引数の式は,直接書いた式もしくはMxfunの戻り値。これをTeXの書式にする。\\ -戻り値は,変数 txname にも代入される。\\ - \\ -例:部分分数への分解 +\item[関数] Mxtex(name,式) +\item[機能] 式をTeX書式にする +\item[説明] 第2引数の式は,直接書いた式もしくはMxfunの戻り値。これをTeXの書式にする。 + +戻り値は,変数 txname にも代入される。 + +\vspace{\baselineskip} +【例】部分分数への分解 \begin{spacing}{1.5} - 部分分数$\dfrac{x^3}{(x+1)(x+2)}$の分解をMaximaで行い,その結果をTeX書式にして画面に表示する。画面に表示された結果はそのままKeTCindyで出力できる。 + 部分分数$\dfrac{x^3}{(x+1)(x+2)}$の分解をMaximaで行い,その結果をTeX書式にして画面に表示する。画面に表示された結果はそのまま\ketcindy で出力できる。 \end{spacing} - \begin{verbatim} - Mxfun("1","partfrac",["x^3/((x+1)*(x+2))","x"]); - Mxtex("1",mx1); - Expr([0,1],"e",tx1); -\end{verbatim} - ここで,mx1,tx1はそれぞれMxfun("1",・・) , Mxtex"1",・・) の結果(戻り値)である。mx1,tx1 はコンソールにも表示され,tx1は次のようになっている。 -\begin{verbatim} - \frac{8}{x+2}-\frac{1}{x+1}+x-3 -\end{verbatim} - CindyscriptはTeX書式をサポートしているのでこれで描画面に分数式が表示されるが,Texの文書では,\verb|\frac{}{}| ではなく,\verb|\dfrac{}{}|を使うことが多い。そこで,Assign()を用いて,"frac" を "dfrac" に変えれば,そのままTex文書で使える。ただし,Cindyscriptは \verb|\dfrac{}{}| をサポートしていないので,画面上では分数表記にならない。そのあたりの事情を次のスクリプトで示す。 -\begin{verbatim} - fx="x^3/((x+1)*(x+2))"; - pfx=Mxfun("1","partfrac",[fx,"x"]); - form=Mxtex("1",fx)+"="+Mxtex("2",pfx); - dform=Assign(form,["frac","dfrac"]); - Letter([0,5],"e","部分分数への分解 $"+form+"$"); - Letter([0,3],"e","部分分数への分解 $"+dform+"$"); -\end{verbatim} -Cinderellaの描画面では次のように表示される。\\ - \\ - \includegraphics[bb=0 0 694 232 , width=8cm]{Fig/mxtex01.png}\\ - \\ -出力したTeX挿入図では次のようになる。\\ - \\ - \input{Fig/mxtex02}\\ - \\ -なお,文字列を置換するのに,\verb|Assign(form,["frac","dfrac"])| ではなく,\\ -Cindyscriptの文字列の関数 replace を用いて,\\ - \verb|dform=replace(form,"frac","dfrac");| \\ -としてもよい。\\ - \\ -例:2次関数のグラフを表示し,$x$軸との交点の$x$座標を表示する。 -\begin{verbatim} - fx="x^2-x-3"; - cmdL=[ - "ans:solve",[fx,"x"], - "ans",[] - ]; - CalcbyM("ans",cmdL); - p1=indexof(ans,"["); - p2=indexof(ans,","); - p3=indexof(ans,"]"); - s1=substring(ans,p1,p2-1); - s2=substring(ans,p2,p3-1); - s1=replace(s1,"x =",""); - s2=replace(s2,"x =",""); - Mxtex("1",s1); - Mxtex("2",s2); - Plotdata("1",fx,"x"); - Expr([-2,-0.5],"e",tx1); - Expr([2,-0.5],"e",tx2); -\end{verbatim} - \\ - \input{Fig/mxtex03}\\ - \\ - ここで,\verb|CalcbyM("ans",cmdL);| で得られるansは,次のような文字列である。\\ - \verb|"[x = -(sqrt(13)-1)/2,x = (sqrt(13)+1)/2] "|\\ -そこで,ここから2つの式だけを抽出する作業を行ったのち,Mxtex() でTeXの式を得ている。\\ - さらに応用として,点AをCinderellaの作図ツールで作図し, -\begin{verbatim} - if(A.y<0, - fx="(x-"+text(A.x)+")^2"+guess(A.y), - fx="(x-"+text(A.x)+")^2+"+guess(A.y); - ); -\end{verbatim} -とすると,点Aを頂点とする放物線と軸との交点の座標が描かれる。Maximaとのデータのやり取りをするためのタイムラグがあるが,インタラクティブに放物線の位置を変えることができる。\\ - \\ -<参考>\\ - 2次関数のような簡単な関数であれば,Cindyscriptの roots() 関数を用いて2次方程式が解けるので,次のスクリプトでほぼ同じ動作をするものを作ることができる。「ほぼ」というのは点Aの位置によっては,guess()で解釈しきれないことがあるためである。Maximaを使えば数式処理で解を求めるので,Aがどこにあってもきれいに表示できる。 -\begin{verbatim} - fx="x^2-2*A.x*x+A.x^2+A.y"; - cf=[A.x^2+A.y,-2*A.x,1]; - sol=roots(cf); - s1=guess(sol_2); - s2=guess(sol_1); - Mxtex("1",s1); - Mxtex("2",s2); - Plotdata("1",fx,"x"); - Expr([-2,-0.5],"e",tx1); - Expr([2,-0.5],"e",tx2); + Mxfun("1","partfrac",["x^3/((x+1)*(x+2))","x"]); + Mxtex("1",mx1); + Expr([0,1],"e",tx1); +\end{verbatim} + ここで,mx1,tx1はそれぞれMxfun("1",・・) , Mxtex"1",・・) の結果(戻り値)である。mx1,tx1 はコンソールにも表示され,tx1は次のようになっている。 +\begin{verbatim} + \frac{8}{x+2}-\frac{1}{x+1}+x-3 \end{verbatim} + CindyscriptはTeX書式をサポートしているのでこれで描画面に分数式が表示されるが,Texの文書では,\verb|\frac{}{}| ではなく,\verb|\dfrac{}{}|を使うことが多い。そこで,Assign()を用いて,"frac" を "dfrac" に変えれば,そのままTex文書で使える。ただし,Cindyscriptは \verb|\dfrac{}{}| をサポートしていないので,画面上では分数表記にならない。そのあたりの事情を次のスクリプトで示す。 +\begin{verbatim} + fx="x^3/((x+1)*(x+2))"; + pfx=Mxfun("1","partfrac",[fx,"x"]); + form=Mxtex("1",fx)+"="+Mxtex("2",pfx); + dform=Assign(form,["frac","dfrac"]); + Letter([0,5],"e","部分分数への分解 $"+form+"$"); + Letter([0,3],"e","部分分数への分解 $"+dform+"$"); +\end{verbatim} +Cinderellaの描画面では次のように表示される。 -\end{description} +\vspace{\baselineskip} +\hspace{20mm} \includegraphics[bb=0 0 347.02 116.01 , width=8cm]{Fig/mxtex01.pdf} + +\vspace{\baselineskip} +出力したTeX挿入図では次のようになる。 -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -\newpage +%\vspace{\baselineskip} +\input{Fig/mxtex02} +なお,文字列を置換するのに,\verb|Assign(form,["frac","dfrac"])| ではなく, -% Scilabとの連携 ================================== -\subsection{Scilabとの連携} - KeTCindyは,もともと Scilab と連携して,Cinderellaからの出力をTeXのテキストとするシステムである。しかし,それだけでなく,Maximaなどとの連携と同様,Scilab の関数を実行して,データをやりとりすることができる。\\ - KeTCindyでは,kc.bat/shによってコマンドをScilabに渡し,結果をテキストファイルで受け取る。このとき,Scilabとのやりとりで,次のようなファイルが作業ディレクトリに作成される。\\ -拡張子 sci :Scilab用のファイル\\ -拡張子 txt:データファイル\\ -このデータのやり取りに関する次のオプションがある。\\ - オプションなしまたは,”” のとき\\ - i) データファイルがなければ,新しく作る\\ - ii) データファイルが既にあればそれを読み込む\\ - "m" のとき,強制的にデータファイルを作り直す。\\ - "r" のとき,すでにあるデータファイルを読み込む。\\ - このとき,ファイルの読み書きで不具合があると,数秒の後「==$>$ file.txt not generated (5 s ) 」のようなエラーメッセージがコンソールに表示される。このような場合は作業ディレクトリの設定などを確認していただきたい。この待ち時間については,Waitオプションで設定することもできる。\\ +Cindyscriptの文字列の関数 replace を用いて, -\begin{description} +\hspace{10mm} \verb|dform=replace(form,"frac","dfrac");| + +としてもよい。 -\hypertarget{calcbyS}{} -\item[関数] CalcbyS(name,コマンド,option) -\item[機能] Scilabのコマンドスクリプトを実行する -\item[説明] 第2引数はScilabで実行するコマンドのリスト。\\ - \\ -\hypertarget{plotdataS}{} -\item[関数] PlotdataS(name,関数,変数) -\item[機能] Plotdataと同様の書式で,Scilabの関数を実行する -\item[説明] Cindyscriptの組込関数にない関数のグラフを描くことができる。\\ - \\ -例:ベッセル関数のグラフを描く +%\vspace{10mm} + +\vspace{\baselineskip} +【例】2次関数のグラフを表示し,$x$軸との交点の$x$座標を表示する。 + +\begin{layer}{150}{0} +\putnotese{70}{50}{ \input{Fig/mxtex03}} +\end{layer} \begin{verbatim} - PlotdataS("1","besselj(1,x)","x"); + fx="x^2-x-3"; + cmdL=[ + "ans:solve",[fx,"x"], + "ans",[] + ]; + CalcbyM("ans",cmdL); + p1=indexof(ans,"["); + p2=indexof(ans,","); + p3=indexof(ans,"]"); + s1=substring(ans,p1,p2-1); + s2=substring(ans,p2,p3-1); + s1=replace(s1,"x =",""); + s2=replace(s2,"x =",""); + Mxtex("1",s1); + Mxtex("2",s2); + Plotdata("1",fx,"x"); + Expr([-2,-0.5],"e",tx1); + Expr([2,-0.5],"e",tx2); +\end{verbatim} + +ここで,\verb|CalcbyM("ans",cmdL);| で得られるansは,次のような文字列である。 + + \verb|"[x = -(sqrt(13)-1)/2,x = (sqrt(13)+1)/2] "| + +そこで,ここから2つの式だけを抽出する作業を行ったのち,Mxtex() でTeXの式を得ている。 + +さらに応用として,点AをCinderellaの作図ツールで作図し, +\begin{verbatim} + if(A.y<0, + fx="(x-"+text(A.x)+")^2"+guess(A.y), + fx="(x-"+text(A.x)+")^2+"+guess(A.y); + ); +\end{verbatim} +とすると,点Aを頂点とする放物線と軸との交点の座標が描かれる。Maximaとのデータのやり取りをするためのタイムラグがあるが,インタラクティブに放物線の位置を変えることができる。 + +\vspace{\baselineskip} +<参考> + + 2次関数のような簡単な関数であれば,Cindyscriptの roots() 関数を用いて2次方程式が解けるので,次のスクリプトでほぼ同じ動作をするものを作ることができる。「ほぼ」というのは点Aの位置によっては,guess()で解釈しきれないことがあるためである。Maximaを使えば数式処理で解を求めるので,Aがどこにあってもきれいに表示できる。 +\begin{verbatim} + fx="x^2-2*A.x*x+A.x^2+A.y"; + cf=[A.x^2+A.y,-2*A.x,1]; + sol=roots(cf); + s1=guess(sol_2); + s2=guess(sol_1); + Mxtex("1",s1); + Mxtex("2",s2); + Plotdata("1",fx,"x"); + Expr([-2,-0.5],"e",tx1); + Expr([2,-0.5],"e",tx2); \end{verbatim} \end{description} -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} + +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} \newpage -% Risa/Asirとの連携 ================================== + + +% Risa/Asirとの連携 ================================== \subsection{Risa/Asirとの連携} \begin{description} \hypertarget{calcbyA}{} -\item[関数] CalcbyA(name,コマンド,option) -\item[機能] Risa/Asirのスクリプトを実行する -\item[説明] 第2引数はRisa/Asirで実行するコマンド。\\ - コマンドと引数リストの繰り返しからなるリスト(例えばcmdL)を作って,一度に実行する。\\ - 戻り値はない。(未定義値) 結果は,コマンドリストの最後に記述した変数(引数は空リスト)の値がname で指定された変数に代入される。複数の結果を戻すときは,:: で区切って記述するとリストにして代入される。\\ +\item[関数] CalcbyA(name,コマンド,option) +\item[機能] Risa/Asirのスクリプトを実行する +\item[説明] 第2引数はRisa/Asirで実行するコマンド。 + + コマンドと引数リストの繰り返しからなるリスト(例えばcmdL)を作って,一度に実行する。 + + 戻り値はない。(未定義値) 結果は,コマンドリストの最後に記述した変数(引数は空リスト)の値がname で指定された変数に代入される。複数の結果を戻すときは,:: で区切って記述するとリストにして代入される。 + +\vspace{\baselineskip} \hypertarget{asirfun}{} -\item[関数] Asirfun(name,式,リスト,option) -\item[機能] Risa/Asirの関数を実行する -\item[説明] 第2引数の「式」はRisa/Asirの関数名。第3引数のリストは関数に渡す引数のリスト。\\ - 戻り値は,第1引数の式に1つでも文字があると文字列となる。すべて数字(+,-, . を含む)の場合は -16桁以下であれば数,それ以上の場合は文字列となる。また,戻り値は,変数 asname にも代入される。\\ -オプションに "Disp=no" をつけると,結果をコンソールに表示しない。\\ +\item[関数] Asirfun(name,式,リスト,option) +\item[機能] Risa/Asirの関数を実行する +\item[説明] 第2引数の「式」はRisa/Asirの関数名。第3引数のリストは関数に渡す引数のリスト。 + +戻り値は,第1引数の式に1つでも文字があると文字列となる。すべて数字(+,-, . を含む)の場合は +16桁以下であれば数,それ以上の場合は文字列となる。また,戻り値は,変数 asname にも代入される。 + +オプションに "Disp=no" をつけると,結果をコンソールに表示しない。 + \end{description} -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} \newpage -% FriCASとの連携 ================================== +% FriCASとの連携 ================================== \subsection{FriCAS(Axiom)との連携} \begin{description} \hypertarget{calcbyF}{} -\item[関数] CalcbyF(name,コマンド,option) -\item[機能] FriCASのスクリプトを実行する -\item[説明] 第2引数はFriCASで実行するコマンド。\\ - コマンドと引数リストの繰り返しからなるリスト(例えばcmdL)を作って,一度に実行する。\\ - 戻り値はない。(未定義値) 結果は,コマンドリストの最後に記述した変数(引数は空リスト)の値がname で指定された変数に代入される。複数の結果を戻すときは,:: で区切って記述するとリストにして代入される。\\ +\item[関数] CalcbyF(name,コマンド,option) +\item[機能] FriCASのスクリプトを実行する +\item[説明] 第2引数はFriCASで実行するコマンド。 + +コマンドと引数リストの繰り返しからなるリスト(例えばcmdL)を作って,一度に実行する。 +戻り値はない。(未定義値) 結果は,コマンドリストの最後に記述した変数(引数は空リスト)の値がname で指定された変数に代入される。複数の結果を戻すときは,:: で区切って記述するとリストにして代入される。 + + +\vspace{\baselineskip} \hypertarget{frfun}{} -\item[関数] Frfun(name,式,リスト,option) -\item[機能] FriCASの関数を実行する -\item[説明] 第2引数の「式」はFriCASの関数名。第3引数のリストは関数に渡す引数のリスト。\\ - 戻り値は,第1引数の式に1つでも文字があると文字列となる。すべて数字(+,-, . を含む)の場合は -16桁以下であれば数,それ以上の場合は文字列となる。また,戻り値は,変数 friname にも代入される。\\ -オプションに "Disp=no" をつけると,結果をコンソールに表示しない。\\ +\item[関数] Frfun(name,式,リスト,option) +\item[機能] FriCASの関数を実行する +\item[説明] 第2引数の「式」はFriCASの関数名。第3引数のリストは関数に渡す引数のリスト。 + +戻り値は,第1引数の式に1つでも文字があると文字列となる。すべて数字(+,-, . を含む)の場合は +16桁以下であれば数,それ以上の場合は文字列となる。また,戻り値は,変数 friname にも代入される。 + +オプションに "Disp=no" をつけると,結果をコンソールに表示しない。 + \end{description} -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} \newpage -% MeshLabとの連携 ================================== +% MeshLabとの連携 ================================== \subsection{MeshLabとの連携} -MeshLabは,3Dデータ(objデータなど)を読み込んでレイトレーシングで表示・編集するソフトウェアである。レイトレーシングで3Dグラフィクスを描くには,Cinderellaと親和性の高い Cindy3D を利用するのがよいが,MeshLabを使うメリットは3Dプリンタ用のSTLファイルを出力できることである。また,KeTCindyで描いた3Dの図がレイトレーシングでどのようになるのかを見ることも比較的簡単にできる。\\ - MeshLabとの連携は,KeTCindyから Obj 形式のデータを書き出すことで行う。Mkobj**() 関数でデータを作り,Mkviewobj() 関数でMeshLabを呼び出して表示を行う。\\ - なお,Mkviewobj() 関数でMeshLabを呼び出して表示を行う場合,これをDrawスロットに書くと頻繁に呼び出しが行われるため非効率となる。そこで,if(1==0,・・・) で・・・の部分にMeshLabの呼び出し関係のスクリプトを書いて,実際に呼び出すときに if(1==1,・・・)とする方法と,呼び出し関係のスクリプトを関数化してボタンに割り当てる方法がある。ketcindyパッケージに含まれる sample にボタンをつけたものがある。\\ - なお,3Dであるので,Initialization スロットに\\ - \verb|Ketinit();| - \verb|Ketinit3d();| +MeshLabは,3Dデータ(objデータなど)を読み込んでレイトレーシングで表示・編集するソフトウェアである。レイトレーシングで3Dグラフィクスを描くには,Cinderellaと親和性の高い Cindy3D を利用するのがよいが,MeshLabを使うメリットは3Dプリンタ用のSTLファイルを出力できることである。また,\ketcindy で描いた3Dの図がレイトレーシングでどのようになるのかを見ることも比較的簡単にできる。 + +MeshLabとの連携は,\ketcindy から Obj 形式のデータを書き出すことで行う。Mkobj**() 関数でデータを作り,Mkviewobj() 関数でMeshLabを呼び出して表示を行う。 + +なお,Mkviewobj() 関数でMeshLabを呼び出して表示を行う場合,これをDrawスロットに書くと頻繁に呼び出しが行われるため非効率となる。そこで,if(1==0,・・・) で・・・の部分にMeshLabの呼び出し関係のスクリプトを書いて,実際に呼び出すときに if(1==1,・・・)とする方法と,呼び出し関係のスクリプトを関数化してボタンに割り当てる方法がある。ketcindyパッケージに含まれる sample にボタンをつけたものがある。 + + なお,3Dであるので,Initialization スロットに + + \verb|Ketinit();| + \verb|Ketinit3d();| を記述しておく。 \begin{description} \hypertarget{mkobjcmd}{} -\item[関数] Mkobjcmd(name,式,option) -\item[機能] 厚みを持たない曲面のobjファイルのためのコマンドを作成する -\item[説明] オプションは [分割数1,分割数2,表側の方向の指定]\\ -表側の方向は,変数に対して,右手系の方向が"+"\\ -作成されるデータは"oc"+name のファイル名の obj データである。この名称は,Mkviewobj() で用いる。(以下,Mkobj**()関数では同様)\\ -\\ +\item[関数] Mkobjcmd(name,式,option) +\item[機能] 厚みを持たない曲面のobjファイルのためのコマンドを作成する +\item[説明] オプションは [分割数1,分割数2,表側の方向の指定] + +表側の方向は,変数に対して,右手系の方向が"+" + +作成されるデータは"oc"+name のファイル名の obj データである。この名称は,Mkviewobj() で用いる。(以下,Mkobj**()関数では同様) + +\vspace{\baselineskip} 【例】:サドル面 \begin{verbatim} - fd=[ "z=x^2-y^2", "x=[-1,1]","y=[-1,1]"," "]; - Sf3data("1",fd); - Windispg(); - Mkobjcmd("1",fd,[40,40,"-"]); - Meshlab():=( - Mkviewobj("saddle",oc1, ["m","v"]); - ); + fd=[ "z=x^2-y^2", "x=[-1,1]","y=[-1,1]"," "]; + Sf3data("1",fd); + Windispg(); + Mkobjcmd("1",fd,[40,40,"-"]); + Meshlab():=( + Mkviewobj("saddle",oc1, ["m","v"]); + ); \end{verbatim} このうち,\verb|Sf3data("1",fd); | はCinderellaの画面に表示するためであって,なくてもよい。 -次図で,左が option + の場合,右が - の場合である。\\ -\includegraphics[bb=0 0 1359 527 , width=12cm]{Fig3d/meshlab01.png} - \\ -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +次図で,左が option + の場合,右が - の場合である。 + +\includegraphics[bb=0 0 679.53 263.51 , width=12cm]{Fig/meshlab01.pdf} +\vspace{\baselineskip} +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} + +\vspace{\baselineskip} \hypertarget{mkobjcrvcmd}{} -\item[関数] Mkobjcrvcmd(name,PD,option) -\item[機能] 空間曲線(直線)のobjファイルのためのコマンドを作成 -\item[説明] オプションは [太さ,断面の形状(正多角形)の辺の数,断面の正面]\\ -曲線は紐のようなもので表す。その断面は正多角形で,デフォルトは正6角形である。断面の正面は"xy","yz","zx"のいずれかで指定する。太くなった時に形状の差が現れる。 +\item[関数] Mkobjcrvcmd(name,PD,option) +\item[機能] 空間曲線(直線)のobjファイルのためのコマンドを作成 +\item[説明] オプションは [太さ,断面の形状(正多角形)の辺の数,断面の正面] + +曲線は紐のようなもので表す。その断面は正多角形で, 初期設定は正6角形である。断面の正面は"xy","yz","zx"のいずれかで指定する。太くなった時に形状の差が現れる。 -例 太さ0.03で螺旋を描く +例 太さ0.03で螺旋を描く \begin{verbatim} - Spacecurve("1","[(6*pi-t)/(6*pi)*cos(t),(6*pi-t)/(6*pi)*sin(t),0.1*t]", - "t=[0,6*pi]",["Num=200"]); - Windispg(); - Mkobjcrvcmd("1","sc3d1",[0.03]); - Meshlab():=( - Mkviewobj("spiral",oc1,["m","v"]); - ); + Spacecurve("1","[(6*pi-t)/(6*pi)*cos(t),(6*pi-t)/(6*pi)*sin(t),0.1*t]", + "t=[0,6*pi]",["Num=200"]); + Windispg(); + Mkobjcrvcmd("1","sc3d1",[0.03]); + Meshlab():=( + Mkviewobj("spiral",oc1,["m","v"]); + ); \end{verbatim} -\verb| Mkobjcrvcmd("1","sc3d1",[0.1,8,"yz"]);| としたのが下図右。\\ +\verb| Mkobjcrvcmd("1","sc3d1",[0.1,8,"yz"]);| としたのが下図右。 - \includegraphics[bb=0 0 1229 473 , width=12cm]{Fig3d/meshlab02.png}\\ -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} + \includegraphics[bb=0 0 614.53 236.51 , width=12cm]{Fig/meshlab02.pdf} + +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +\vspace{\baselineskip} \hypertarget{mkobjnrm}{} -\item[関数] Mkobjnrm(name,式) -\item[機能] 法線ベクトルのデータを作成 -\item[説明] 式は曲面を表す式。これに対し,法線ベクトルを表す式を求める。\\ +\item[関数] Mkobjnrm(name,式) +\item[機能] 法線ベクトルのデータを作成 +\item[説明] 式は曲面を表す式。これに対し,法線ベクトルを表す式を求める。 +\vspace{\baselineskip} \hypertarget{mkobjplatecmd}{} -\item[関数] Mkobjplatecmd(name,面データ,options) -\item[機能] 面を描く -\item[説明] 面データを渡して面を描く。\\ -options は,面の厚みの指定。厚みは中心線に対し,両側につけることができる。\\ -たとえば,[0.05] はプラス側に 0.05 の厚み,[0.05,-0.04] はマイナス側にも0.04の厚みをつける。\\ +\item[関数] Mkobjplatecmd(name,面データ,options) +\item[機能] 面を描く +\item[説明] 面データを渡して面を描く。 + +options は,面の厚みの指定。厚みは中心線に対し,両側につけることができる。 +たとえば,[0.05] はプラス側に 0.05 の厚み,[0.05,-0.04] はマイナス側にも0.04の厚みをつける。 + +\vspace{\baselineskip} 【例】三角形のプレートを描く + +\begin{layer}{150}{0} +\putnotese{80}{15}{ \includegraphics[bb=0 0 287.01 228.01 , width=3cm]{Fig/meshlab03.pdf} } +\end{layer} \begin{verbatim} - Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]"); - p1=[2,0,0]; - p2=[0,2,0]; - p3=[0,0,2]; - plane=[[p1,p2,p3],[[1,2,3]]]; - Mkobjplatecmd("1",plane,[0.05]); - Mkobjcrvcmd("2","ax3d"); - Mkviewobj("plane",Concatcmd([oc1,oc2]),["m","v"]); + Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]"); + p1=[2,0,0]; + p2=[0,2,0]; + p3=[0,0,2]; + plane=[[p1,p2,p3],[[1,2,3]]]; + Mkobjplatecmd("1",plane,[0.05]); + Mkobjcrvcmd("2","ax3d"); + Mkviewobj("plane",Concatcmd([oc1,oc2]),["m","v"]); \end{verbatim} - \includegraphics[bb=0 0 574 456 , width=5cm]{Fig3d/meshlab03.png}\\ - +\vspace{\baselineskip} \hypertarget{mkobjpolycmd}{} -\item[関数] Mkobjpolycmd(name,PD,options) -\item[機能] 多面体を描く -\item[説明] VertexEdgeFace() の戻り値を PDとして渡して多面体を描く。\\ - +\item[関数] Mkobjpolycmd(name,PD,options) +\item[機能] 多面体を描く +\item[説明] VertexEdgeFace() の戻り値を PDとして渡して多面体を描く。 - +\vspace{\baselineskip} \hypertarget{mkobjsymbcmd}{} -\item[関数] Mkobjsymbcmd(PD, 実数,実数,ベクトル, ベクトル) -\item[機能] 文字等のobjデータのためのコマンドを作成 -\item[説明] 引数のPDを描く。第2引数は大きさ,第3引数は回転角,第4引数は正面方向のベクトル,第5引数はPDの中心の位置。\\ -PDは,平面の描画コマンドによるプロットデータが使える。また,PD に半角アルファベットを文字として与えることができる。この場合,文字は n,p,q,r,t,x,y,z で,該当するフォントが data フォルダの fontF フォルダに用意されている。この中にないフォントは使えない。 \\ -【例】軸の名前 x,y,z を表示し,円を描く。\\ -円は Circledata(); でプロットデータを作成する。\\ -\begin{verbatim} -\end{verbatim} +\item[関数] Mkobjsymbcmd(PD, 実数,実数,ベクトル, ベクトル) +\item[機能] 文字等のobjデータのためのコマンドを作成 +\item[説明] 引数のPDを描く。第2引数は大きさ,第3引数は回転角,第4引数は正面方向のベクトル,第5引数はPDの中心の位置。 +PDは,平面の描画コマンドによるプロットデータが使える。また,PD に半角アルファベットを文字として与えることができる。この場合,文字は n,p,q,r,t,x,y,z で,該当するフォントが data フォルダの fontF フォルダに用意されている。この中にないフォントは使えない。 +\vspace{\baselineskip} \hypertarget{mkobjthickcmd}{} -\item[関数] Mkobjthickcmd(name,式) -\item[機能] 厚みを持つ曲面のobjファイルのためのコマンドを作成 -\item[説明] オプションは [分割数1,分割数2,厚み,表側の方向の指定,条件] +\item[関数] Mkobjthickcmd(name,式) +\item[機能] 厚みを持つ曲面のobjファイルのためのコマンドを作成 +\item[説明] オプションは [分割数1,分割数2,厚み,表側の方向の指定,条件] 表側の方向は,変数に対して,右手系の方向が"+"。厚みを持つため,nsew のそれぞれについて, -"+n+s-e-w" のように指定する。\\ -条件として,\verb|"Assume(R>0)"| をつけると,Rが0以下になるための不具合を回避できる。\\ +"+n+s-e-w" のように指定する。 + +条件として,\verb|"Assume(R>0)"| をつけると,Rが0以下になるための不具合を回避できる。 + また,"ratsimp" をつけると有理関数について,"trigsimp"をつけると三角関数について,処理を速くすることができる。 -なお,この関数はMaximaを使うので,Maximaをインストールしていることが前提。\\ + +なお,この関数はMaximaを使うので,Maximaをインストールしていることが前提。 + +\vspace{\baselineskip} 【例】回転放物線 + +\begin{layer}{150}{0} +\putnotese{70}{0}{ \includegraphics[bb=0 0 287.01 189.01 , width=4cm]{Fig/meshlab06.pdf}} +\end{layer} \begin{verbatim} - fd=[ - "z=(x^2+y^2)", - "x=R*cos(T)","y=R*sin(T)", - "R=[0,2]","T=[0,2*pi]","e" - ]; - Mkobjthickcmd("1",fd,[40,40,0.2,"+n+s-e-w+","assume(R>0)"]); - Mkviewobj("pala",oc1,["m","v","Wait=5"]); + fd=[ + "z=(x^2+y^2)", + "x=R*cos(T)","y=R*sin(T)", + "R=[0,2]","T=[0,2*pi]","e" + ]; + Mkobjthickcmd("1",fd,[40,40,0.2,"+n+s-e-w+","assume(R>0)"]); + Mkviewobj("pala",oc1,["m","v","Wait=5"]); \end{verbatim} - \includegraphics[bb=0 0 574 378 , width=5cm]{Fig3d/meshlab06.png}\\ +%\begin{center} \includegraphics[bb=0 0 574 378 , width=5cm]{Fig/meshlab06.pdf}\end{center} + +\vspace{\baselineskip} \hypertarget{mkviewobj}{} -\item[関数] Mkviewobj(name,PD, options) -\item[機能] objファイルを作成。optionにより MeshLab を立ち上げて表示する。 -\item[説明] 第2引数に複数のプロットデータを与えるときは,Concatcmd() により1つにまとめる。 +\item[関数] Mkviewobj(name,PD, options) +\item[機能] objファイルを作成。optionにより MeshLab を立ち上げて表示する。 +\item[説明] 第2引数に複数のプロットデータを与えるときは,Concatcmd() により1つにまとめる。 オプションは \begin{tabbing} 12345678901234567890\=\kill - "m"または"make" \> データを作る(指定しない場合もデータがなければ作る)\\ - "v"または"view" \>MeshLabを立ち上げて表示する\\ - "W=n" \>作成するための待ち時間。n秒。これを過ぎると終了する\\ - "Unit=mm" \>Setunitlen()と連動して3Dプリンタの数値の単位をmmで指定する\\ - \>3Dプリンターがインチで認識する場合は "Unit=in" とする。\\ + "m"または"make" \> データを作る(指定しない場合もデータがなければ作る)\\ + "v"または"view" \>MeshLabを立ち上げて表示する\\ + "W=n" \>作成するための待ち時間。n秒。これを過ぎると終了する\\ + "Unit=mm" \>Setunitlen()と連動して3Dプリンタの数値の単位をmmで指定する\\ + \>3Dプリンターがインチで認識する場合は "Unit=in" とする。\\ \end{tabbing} \end{description} -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} \newpage -% 表計算ソフトとの連携 ================================== +% 表計算ソフトとの連携 ================================== \subsection{表計算ソフトとの連携} -表計算ソフトでは,複数のセルを選択してコピー(Windowsでは Crtl+ C ,Macでは Command+C)すると,セルの内容はtab区切りのテキストデータとしてクリップボードにコピーされる。これをCindyscriptエディタにペーストすることで表計算ソフトのデータをKeTCindyで利用できる。逆に,Cindyscriptのコンソールへの出力を表計算ソフトのシートにコピーすることもできる。 +表計算ソフトでは,複数のセルを選択してコピー(Windowsでは Crtl+ C ,Macでは Command+C)すると,セルの内容はtab区切りのテキストデータとしてクリップボードにコピーされる。これをCindyscriptエディタにペーストすることで表計算ソフトのデータを\ketcindy で利用できる。逆に,Cindyscriptのコンソールへの出力を表計算ソフトのシートにコピーすることもできる。 また,表計算ソフトから書き出したCSVファイルについても同様にしてCSV形式のデータを扱うことができる。 \begin{description} \hypertarget{tab2list}{} -\item[関数] Tab2list(str,option) -\item[機能] str の内容をリストに変換する -\item[説明] tabやコンマ区切りになっている文字列 str をリストに変換する。\\ - optionは,次の通り。\\ - Blank=a :NULLのセルをaに置き換える。\\ - Sep=b :セパレータ(区切り文字)を b とする。デフォルトは tabコード\\ - -次のような手順で表計算ソフトやCSVファイルからデータをKeTCindyに移すことができる。\\ - \\ -(1) Cindyscriptエディタで,適当な文字変数を用意する。\\ - たとえば,data="";\\ - \\ -\includegraphics[bb=0 0 858 298 , width=10cm]{Fig/tab2list02.png}\\ - \\ -(2) 表計算ソフトで,適当な範囲を指定しクリップボードにコピーする。\\ - Windowsなら Ctrl+C,Macなら Command+C\\ - \\ -\includegraphics[bb=0 0 742 308 , width=8cm]{Fig/tab2list01.png}\\ - \\ -(3) data=""; のダブルクウォートの間にペーストする。\\ - 最後の行は右図のように," の前で改行されていてもよい。\\ - \\ -\includegraphics[bb=0 0 738 236 , width=6cm]{Fig/tab2list00.png} - \includegraphics[bb=0 0 748 276 , width=6cm]{Fig/tab2list001.png}\\ - \\ -(4) この文字変数 data に対し,Tab2list(data) を実行すると,行列を表すリストが返される。\\ - これを適当な変数に代入し,作表コマンドで表にするなど,目的に応じて利用する。\\ - 数値だけなら行列として計算もできる。\\ - \\ -\includegraphics[bb=0 0 1245 457 , width=10cm]{Fig/tab2list03.png}\\ - \\ - 空文字のセル(NULL)が含まれる場合,デフォルトではそのまま空文字になるが,アンケート処理などで無回答を0にしたいような場合は\\ - \\ - \verb|dlist=Tab2list(data,["Blank=0"];|\\ - \\ - とする。\\ +\item[関数] Tab2list(str,option) +\item[機能] str の内容をリストに変換する +\item[説明] tabやコンマ区切りになっている文字列 str をリストに変換する。 + + optionは,次の通り。 - CSVファイルからCSV形式(コンマ区切り)のデータをコピーした場合は\\ - \\ - \verb|dlist=Tab2list(data,["Sep=,"];|\\ - \\ - とする。\\ + Blank=a :NULLのセルをaに置き換える。 - なお,文字列をセパレータで区切ってリスト化するCindyscriptの関数に tokenize()がある。上の例で,\\ - \verb|dlist=tokenize(data,[unicode("000a"),unicode("0009")]);|\\ - とすると,改行コード(000a)とtabコード(0009)で切り分けてリスト化する。このとき,リストの各要素はつぎのようになる。\\ - 文字列→文字列\\ - 数値形式の文字→実数 例: 14 → 整数14 12.3 → 実数12.3\\ - 計算式の形 → 文字列 例: 437-0023 → 437-0023 (文字列)\\ -これに対し,Tab2list()では,計算式の形の文字列は数値と見なして計算結果を取得する。\\ - 例: 437-0023 → 414 (数値)\\ -したがって,郵便番号や日付(28/12/5)のようなものは計算されてしまうので,tokenize() を用いるのがよい。なお,tokenize()の場合,空行は空リストになるので,最後の行でダブルクウォートの前で改行されていると空リストが入るので注意されたい。\\ +Sep=b :セパレータ(区切り文字)を b とする。 初期設定は tabコード + +次のような手順で表計算ソフトやCSVファイルからデータを\ketcindy に移すことができる。 + +\vspace{\baselineskip} +(1) Cindyscriptエディタで,適当な文字変数を用意する。 + + たとえば,data=""; + +\vspace{\baselineskip} +\hspace{10mm} \includegraphics[bb=0 0 429.02 149.01 , width=7cm]{Fig/tab2list02.pdf} + +\vspace{\baselineskip} +(2) 表計算ソフトで,適当な範囲を指定しクリップボードにコピーする。 + + Windowsなら Ctrl+C,Macなら Command+C + +\vspace{\baselineskip} +\hspace{10mm} \includegraphics[bb=0 0 371.02 154 , width=7cm]{Fig/tab2list01.pdf} + +\vspace{\baselineskip} +(3) data=""; のダブルクウォートの間にペーストする。 + +最後の行は右図のように," の前で改行されていてもよい。 + +\vspace{\baselineskip} +\hspace{10mm} \includegraphics[bb=0 0 369.02 118.01 , width=6cm]{Fig/tab2list00.pdf} + +\hspace{10mm} \includegraphics[bb=0 0 374.02 138.01 , width=6cm]{Fig/tab2list001.pdf} + +\vspace{\baselineskip} +(4) この文字変数 data に対し,Tab2list(data) を実行すると,行列を表すリストが返される。 + +これを適当な変数に代入し,作表コマンドで表にするなど,目的に応じて利用する。 + +数値だけなら行列として計算もできる。 + +\vspace{\baselineskip} +\hspace{10mm} \includegraphics[bb=0 0 622.53 228.51 , width=10cm]{Fig/tab2list03.pdf} + +\vspace{\baselineskip} + 空文字のセル(NULL)が含まれる場合, 初期設定ではそのまま空文字になるが,アンケート処理などで無回答を0にしたいような場合は + +\hspace{10mm}\verb|dlist=Tab2list(data,["Blank=0"];| + +とする。 + + CSVファイルからCSV形式(コンマ区切り)のデータをコピーした場合は + +\hspace{10mm} \verb|dlist=Tab2list(data,["Sep=,"];| + +とする。 + +なお,文字列をセパレータで区切ってリスト化するCindyscriptの関数に tokenize()がある。上の例で, + +\hspace{10mm} \verb|dlist=tokenize(data,[unicode("000a"),unicode("0009")]);| + +とすると,改行コード(000a)とtabコード(0009)で切り分けてリスト化する。このとき,リストの各要素はつぎのようになる。 +文字列→文字列 + +数値形式の文字→実数 【例】 14 → 整数14 12.3 → 実数12.3 + +計算式の形 → 文字列 【例】 437-0023 → 437-0023 (文字列) + +これに対し,Tab2list()では,計算式の形の文字列は数値と見なして計算結果を取得する。 + +\vspace{\baselineskip} +【例】 437-0023 → 414 (数値) + +したがって,郵便番号や日付(28/12/5)のようなものは計算されてしまうので,tokenize() を用いるのがよい。なお,tokenize()の場合,空行は空リストになるので,最後の行でダブルクウォートの前で改行されていると空リストが入る。 + +\vspace{\baselineskip} \hypertarget{dispmat}{} -\item[関数] Dispmat(list) -\item[機能] リストを行列の形でtab区切りにしてコンソールに表示する。 -\item[説明] 行列を表すリスト (たとえば dlist) を引数としてDispmat(dlist) を実行すると,コンソールに行列型で内容が表示される。\\ - 実際にはTAB区切りの文字列。(println としなくても直接コンソールに表示される)\\ - これを表計算ソフトのシートにコピーする。\\ - \\ -\includegraphics[bb=0 0 855 395 , width=8cm]{Fig/tab2list04.png}\\ -\\ +\item[関数] Dispmat(list) +\item[機能] リストを行列の形でtab区切りにしてコンソールに表示する。 +\item[説明] 行列を表すリスト (たとえば dlist) を引数としてDispmat(dlist) を実行すると,コンソールに行列型で内容が表示される。 + +実際にはTAB区切りの文字列。(println としなくても直接コンソールに表示される) + +これを表計算ソフトのシートにコピーする。 +\vspace{\baselineskip} +\hspace{10mm} \includegraphics[bb=0 0 427.52 197.51 , width=7cm]{Fig/tab2list04.pdf} + + +\vspace{\baselineskip} \hypertarget{writecsv}{} -\item[関数] Writecsv(namelist, data, filename, option) -\item[機能] data の内容をCSVファイルに出力する -\item[説明] ベクトルまたは行列となっている data を、filenameのファイル名としてCSVファイルに書き出す。\\ - optionは,次の通り。(省略できる)\\ - Col=nn :自然数nnで指定した列数のCSVファイルとして書き出す。\\ - namelistは,CSVファイルの1行目に追加される項目名。省略すると"C1,C2,..."という項目名が付く。\\ +\item[関数] Writecsv(namelist, data, filename, option) +\item[機能] data の内容をCSVファイルに出力する +\item[説明] ベクトルまたは行列となっている data を、filenameのファイル名としてCSVファイルに書き出す。 + +optionは,次の通り。(省略できる) + +Col=nn :自然数nnで指定した列数のCSVファイルとして書き出す。 - なお,列数の指定を省略するとdataが行列の場合は、その列数をdataがベクトルの場合はnamelistの項目数を利用する。 +namelistは,CSVファイルの1行目に追加される項目名。省略すると"C1,C2,..."という項目名が付く。 + + +なお,列数の指定を省略するとdataが行列の場合は、その列数をdataがベクトルの場合はnamelistの項目数を利用する。 \end{description} -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} \newpage -% MeshLabとの連携 ================================== -%\subsection{MeshLabとの連携} -% アニメーション ================================== + +% アニメーション ================================== \section{アニメーションPDF} \subsection{概要} アニメーションのできるPDFを作る。 Cinderellaの作図機能とCindyscriptを用いてアニメーションができるが,PDFにすることでCinderellaがなくてもPDFビュアーがあればアニメーションを実行できるので,プレゼンテーションや教材の受け渡しなどに便利である。 -次の画面は,samplesフォルダにある「s06animation」の「s0601cycloid」のものである。\\ - \\ - \includegraphics[bb=0 0 1581 880 , width=12cm]{Figmv/mvgaiyou01.png} +次の画面は,samplesフォルダにある「s06animation」の「s0601cycloid」のものである。これをひな形として使うのがよい。 -画面上方のボタンには,次のようなスクリプトが割り当てられているので,ボタンを自作することもできる。 +\vspace{\baselineskip} + \includegraphics[bb=0 0 732.04 376.02 , width=12cm]{Fig/mvgaiyou01.pdf} + +画面上方のボタンには,次のようなスクリプトが割り当てられている。 \begin{tabbing} - 12345678\=1234567897890123456\=\kill - Figure \>: Viewtex(); \>現在の画面のPDFデータを作る\\ - Parent \>: \>Figpdf() を使うときに使用する。\\ - ParaF \>: Parafolder(); \>パラパラ動画のデータを作る\\ - Anime \>: Mkanimation(); \>アニメーションPDFを作る\\ - Flip \>: Mkflipanime(); \>パラパラ動画PDFを作る + 12345678\=1234567897890123456\=\kill + Figure \>: Viewtex(); \>現在の画面のPDFデータを作る\\ + Parent \>:複数のスクリプト \>Figpdf() を使うときに使用する。\\ + ParaF \>: Parafolder(); \>アニメーションのデータを作る\\ + Anime \>: Mkanimation(); \>アニメーションPDFを作る\\ + Flip \>: Mkflipanime(); \>パラパラ動画PDFを作る \end{tabbing} アニメーションの作成は,フレームを定義する関数を作成し,Mkanimation() 関数を実行する(Animeボタン)。 %たとえば,Fhead が "hoge" の場合,TeX の文書には\\ -% \verb|\input{hogemoviefigs.tex}|\\ +% \verb|\begin{center} \input{hogemoviefigs.tex}|\\ %で動画を挿入することができる。 %ただし,動画のできるPDFを作成するには,ドキュメントクラスと使用パッケージについて注意が必要である。 @@ -4218,133 +5242,620 @@ Cinderellaの作図機能とCindyscriptを用いてアニメーションがで %ドキュメントクラスは,article または jarticle とする。jsarticle は使えない。 %パッケージは animate に dvipdfmx オプションをつける。\\ -% \verb|\usepackage[dvipdfmx]{animate}| +% \verb|\usepackage[dvipdfmx]{animate}| なお,アニメーションPDFでアニメーションを行うにはAdobe Acrobat Reader など,アニメーションに対応したPDFリーダーが必要である。WindowsのSumatraPDF,Macの プレビューでは動かない。 Flipボタンを押すと,フレームに分割したPDFが生成されて表示される。 -\subsection{設定} -KeTCindymvでは,KeTCindyと若干異なる設定が必要である。 +\subsection{関数} +\begin{description} + +\hypertarget{setpara}{} +\item[関数] Setpara(fname,funcstr,range,options1,options2) +\item[機能] アニメーションの設定をする +\item[説明] fname は出力するファイル名,funcstrは動画関数名,rangeは範囲 + +options1 はアニメーションのデータを作るための設定。 +\begin{tabbing} +1234567890123\=90123456789012345678\=\kill +m/r \> データの作成 / 既存データがある場合の読み込み( 初期設定は r )\\ +Div=n \> フレーム数。初期値は25。 +\end{tabbing} +options2 はアニメーションについての設定で,次の通り。 +\begin{tabbing} +1234567890123\=90123456789012345678\=\kill +Frate=n \>1秒間のフレーム数。初期値は20。 \\ +Title=str \> タイトル。\\ +Scale=n \> 図の大きさの拡大率 \\ +opA \> animate.sty のためのオプション。 \\ + \> loop:loopする,controls:ボタンを表示,buttonsize:ボタンのサイズ\\ + \> step:コマ送りモード\\ + \> 初期設定は loop,controls,buttonsize=3mm\\ + \> +をつけるとモードが追加される。たとえば \verb|"OpA=+step"| で\\ + \> \verb|"OpA=[loop,controls,buttonsize=3mm,step]"| となる。 +\end{tabbing} + +\vspace{\baselineskip} +\item[関数] Parafolder(funcstr,fname,range,options) +\item[機能] アニメーションのフレームデータを作成する +\item[説明] funcstrは動画関数名,fname は出力するフォルダ名,rangeは範囲 + +作業フォルダ(fig)内に,フレームデータを格納した fname フォルダを作る。ひな形(s0601cycloid)にある ParaF ボタンに割り当てられており,通常はそのまま使えばよい。 + +\vspace{\baselineskip} +\item[関数] Mkanimation(path,folder) +\item[機能] アニメーションのPDFを作る +\item[説明] 作業フォルダ(fig)内に,フレームデータを格納した fname フォルダを作り,ここからアニメーションのPDFを作る。Setpara() で設定したファイル名を fname とすると,生成する TeX ファイルは,animatefname.tex (PDF作成のTeXファイル)と animfname.tex (動画データ)で,PDFの名称は,animatefname.pdf となる。 + +ひな形(s0601cycloid)にある Anime ボタンに割り当てられており,通常はあらためて設定せずそのまま使えばよい。 + +\vspace{\baselineskip} +\item[関数] Mkflipanime(path,folder) +\item[機能] パラパラ動画のPDFを作る +\item[説明] 作業フォルダ(fig)内に,フレームデータを格納した fname フォルダを作り,ここからパラパラ動画のPDFを作る。Setpara() で設定したファイル名を fname とすると,生成する TeX ファイルは,flipanimefname.tex (PDF作成のTeXファイル)で,PDFの名称は,flipanimefname.pdf となる。 + +ひな形にある Flip ボタンに割り当てられており,通常はあらためて設定せずそのまま使えばよい。 + +\end{description} + +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} + +\subsection{制作例} + +%\begin{description} +\vspace{\baselineskip} +【例】定円上を動く点Pと,定点Aを結ぶ線分の中点をQとして動きを見る。 +アニメーションを定義する関数は,時間を $t$ とすれば,時刻 $t$ における図(動くものだけ)を定義する。時刻は単なる媒介変数であるので,$t$ でなく $s$ などでもよい。 + +\begin{verbatim} + Setax(["","","sw","","sw"]); + Slider("A-C-B",[0,YMIN-1],[2*pi,YMIN-1]); + Circledata("1",[[0,0],[0,2]]); + mf(t):=( + pt=2*[cos(t),sin(t)]; + mp=(pt+[4,0])/2; + Listplot("1",[[4,0],pt]); + Pointdata("1",[mp,pt],["Size=2"]); + if(t==0, + ptlist=[mp]; + , + ptlist=append(ptlist,mp); + ); + Letter([[4,0],"s","A",pt,"en","P",mp,"ne","Q"]); + Pointdata("2",ptlist,["Size=2","Color=red"]); + ); + mf(C.x); + Setpara("middle","mf(t)","t=[0,4*pi]"); +\end{verbatim} + +この例の場合,\verb|mf(C.x)| を実行するとスライダを動かすことでインタラクティブに軌跡を表示できる。 +Cinderellaの画面は次のようになる。 + +\vspace{\baselineskip} +\hspace{20mm} \includegraphics[bb=0.00 0.00 608.03 367.02,width=8cm]{Fig/moviedata01.pdf} + +アニメーションを作成するときは \verb|//mf(C.x)| とコメントアウトしてから Anime ボタンをクリックする。次の図は,でき上がった animatemiddle.pdf の始めの画面である。 + +\hspace{30mm}\includegraphics[bb=0.00 0.00 470.02 394.02,width=6cm]{Fig/moviedata02.pdf} + +また,次のようにオプションを指定すると,5秒間のアニメーションとなる。 + + \verb| Setpara("middle","mf(t)","t=[0,4*pi]",["Div=30"],["Frate=6"]);| + +\verb|["Div=150"],["Frage=30"]|とすると,やはり5秒間のアニメーションとなるが,1秒間のフレーム数が多いため,なめらかな動きとなる。これは標準的なビデオのフレームレートである。ただし,ファイルサイズは約5倍となる。 + + +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} + +%\end{description} + +\newpage + + +%==================== Slide =============== +\section{\ketcindy スライド} +\subsection{概要と制作手順} +\ketcindy で作成した図とテキストを統合してプレゼンテーション用のスライドPDFを作成する。必要なファイルは,スライドの内容を記述したテキストファイル(ここではコンテンツファイルと呼ぶ)と,タイトルや図を作成し,コンテンツファイルと統合する \ketcindy のファイルである。この2つのファイルは,拡張子が txt と cdy で,ファイル名は同一とする。たとえば,コンテンツファイルを makeslide.txt , \ketcindy ファイルを makeslide.cdy としたときの,制作イメージを次の図に示す。 + +\hspace{10mm}\input{Fig/makeslide} + +\hspace{10mm}makeslide.cdy + +\hspace{10mm}\includegraphics[bb=0.00 0.00 881.05 451.02,width=10cm]{Fig/slide01.pdf} + +\vspace{\baselineskip} +ひな形として,サンプルとして提供されている samples フォルダの中の s0701basic.cdy をコピーし,適当にリネームして使うのがよいだろう。必要なボタンと,最低限のスクリプトが記述されている。 + +以下では,\ketcindy のファイルを makeslide.cdy , コンテンツファイルを makeslide.txt として説明を進める。制作手順は次の通り。 + +(1) makeslide.cdy に \verb|Settitle| コマンドでタイトルを書き,「Titile」ボタンで書き出す。 + +タイトルスライドが作業フォルダに,makeslide.txt が makeslide.cdy と同じフォルダに作成される。makeslide.txt がすでにある場合には上書きはされず,タイトルスライドだけが上書きされる。 + +(2) makeslide.txt に,スライドの各ベージごとの内容を記述する。 + +(3) 必要な図やアニメーションのコードを書き,ボタンをクリックしてファイルを作る。 + +\hspace{10mm}Figure : 図を挿入するとき + +\hspace{10mm}ParaF : アニメーションやパラパラスライドを挿入するとき + +(4) Slide ボタンでスライドPDFを作成する。 + +PDFと,関連する中間ファイルは,作業フォルダではなく,makeslide.cdyのあるフォルダに作成される。また,スライドPDFはアニメーションと同様,Adobe Reader で開く必要がある。 + +\subsection{コンテンツファイル} + +コンテンツファイルは次のような構成にする。 + +\begin{tabbing} +1234567890\=12345678912345678901234567890\=\kill + \>title::slide0// \> タイトルスライド。title はコマンド。\\ + \>main::三角比と三角関数// \> セクション1のタイトル。main はコマンド。\\ + \> 直角三角形と三角比// \> 1ページ目の表示内容。\\ + \> ・・・・// \\ + \> new::角の概念の拡張// \> 新しいページとタイトル。new はコマンド。\\ + \> enumerate::[(1)]// \> 2ページ目の表示内容。enumerate はコマンド。\\ + \> ・・・・// \\ + \> new::負の角// \> 新しいページとタイトル。\\ + \> ・・・・// \\ + \>main::三角関数のグラフ// \> セクション2のタイトル。\\ + \> $f(x)=\sin x$// \> \hspace{10mm}以下同様\\ + \> new::振幅と周期// \\ + \> ・・・・// \\ +\end{tabbing} +%あまりスマートな方法ではないが,枠をKeTCindyで作ってレイヤーで表示 +\begin{layer}{150}{0} +\hspace{7mm}\input{Fig/boxframeslide} +\end{layer} + + +・すべての行の末尾には必ず // をつける。 + +\hspace{10mm} 注)urlの指定で // を用いるときは,$||||$ とすれば // に変換される。 + +・ページの内容は,コマンドでレイアウトなどを指定し,表示する文をテキストで書く。 + +\vspace{\baselineskip} +{\bf コマンド} + +コマンドにおいて,各ブロックの引数の区切りは \verb|::| とし,各行の終わりには必ず//をつける。 + +\vspace{\baselineskip} + {\bf 【タイトルと壁紙】} + + タイトルスライドをつけるときは, + + \hspace{10mm}\verb|title::slide0//| + + を1行目に置く。タイトルスライドは makeslide.cdy で作る。slide0は 初期設定のタイトルスライドのファイル名。このファイル名を変更(たとえば "start")したときは,makeslide.cdy で,Settile() のオプションに "Title=start" をつけて,ファイル名が一致するようにしておく。 + + タイトルスライドをつけないときはスライド名をつけないでおく。 + +\hspace{10mm} \verb|title:://| + +注)title コマンドは必須で,これを1行目に書かないとスライドは作成されない。 + +\vspace{\baselineskip} +壁紙(背景)を表示するときは,タイトルコマンドに続けて壁紙ファイル名を書く。 + + \hspace{10mm}\verb|title::slide0::wallpaper//| + +wallpaper は壁紙のファイル名。壁紙ファイルはTeXのファイルで,作業フォルダ(fig)に入れておく。 + +壁紙ファイルの一例 + +\begin{verbatim} + {\color[cmyk]{0.6,0.2,0.8,0}\huge\rm\normalsize + \newpage + \begin{layer}{120}{0} + \lineseg{0}{2}{125}{0} + \lineseg{0}{88}{125}{0} + \putnotese{0}{90}{\ketcindy} + \end{layer} + } +\end{verbatim} + +\vspace{\baselineskip} +{\bf 【セクションタイトル】} + +\hspace{10mm}\verb|main::セクションタイトル名//| + +セクションを分けないときはなくてもよい。 + +\vspace{\baselineskip} + {\bf 【新しいページ】} + +\hspace{10mm}\verb|new(::行下げ)::タイトル((::位置)::読み込みファイル)//| + + 例)\verb|new::[10]::はじめに::{50}{20}::figure//| + +読み込みファイルの表示サイズを変更するときは + + \hspace{10mm}\verb|new::[10]::はじめに::{50}{20}::figure,0.8//| + +のようにする。 + +読み込みファイルがなければ,figure は省略。 + +\vspace{\baselineskip} + {\bf 【箇条書き】} + +番号つき箇条書きは + + \hspace{10mm}\verb|enumerate//| + + で,enumerate環境の始まりを示す。 + +番号にかっこをつけるなど,番号の形式を変えるには, + +\hspace{10mm}\verb|enumerate::[(1)]| + +のように,\verb|::|で区切って形式を示す。 初期設定は,かっこなしの番号。 + +記号つき箇条書きは + +\hspace{10mm}\verb|itemize//| + +で itemize環境の始まりを示す。記号は中黒。 + +enumerate,itemizeのいずれも + +\hspace{10mm}\verb|item::文//| + +で itemを記述する。 + +環境の終わりは, + +\hspace{10mm}\verb|end//| + +で示す。 + +\vspace{\baselineskip} +{\bf 【項目の順表示】} + +1枚のスライド内で,項目を段階的に表示するときは,\verb|new| の次の行に + +\hspace{10mm}\verb| %repeat=m(,para)//| + +を書く。mは段階数で,たとえば,そのスライドの内容を3段階で表示したい場合は + +\hspace{10mm}\verb| %repeat=3//| + +とする。実際には3枚のスライドが作られる。 + +para をつけると,右下にコントローラが表示され,前後に進めやすくなる。 + +\hspace{10mm}\verb| %repeat=3,para//| + +段階的に表示したい行の先頭に,表示する順番を,2番目以降から +\begin{verbatim} + %[2,-]::text// + %[3,-]::text// +\end{verbatim} + +のように書く。 + +番号指定を \verb| [-, 3] | とすると,3番目まで表示する。 + +\verb| [1..3,5 ]| とすると,1番目から3番目までと5番目に表示する。(4番目をスキップ) + +\vspace{\baselineskip} + {\bf 【薄文字】} + + 順表示したい項目の全体像を見せておいて,そのうちの現在までの項目を示すような場合に用いる。番号指定の前に thin をつけ, + + \begin{verbatim} + %thin[2,-]::text// + %thin[3,-]::text// +\end{verbatim} + +のように書くと,現段階の項目よりあとは薄文字で表示される。 + +薄文字の濃さは, + +\hspace{10mm} \verb|\setthin{alpha}//| + +で指定できる。alphaは0から1までの数で, 初期設定は0.1。 + +\verb|\setthin{0}//| のとき,指定段階以降の項目は非表示になる。 + + 初期設定の薄文字の濃さは,makeslide.cdy の Setslidebodyの第3引数で設定できる。たとえば, + +\hspace{10mm}\verb|Setslidebody(["","",0.2]);| -まず,Initialization スロットでは,KeTCindy で\\ - \verb|Shellfile="";|\\ -になっているのを\\ - \verb| Shellfile="mv";|\\ とする。 -次に,Draw スロットでは,次のように \verb|Ketinit();| に加え,\verb|Ketinitmv();| が必要である。また,画面表示のために,\verb|Windispg();| のかわりに \verb|Mvdispg();| を用いる。 +item とともに用いるときは,\verb|%thin[n,-]| を先に書く。 + +\vspace{\baselineskip} +【例】項目の順表示 + +図は,3番目のJavaまで進んだところである。右下にコントローラがある。 + +\begin{layer}{150}{0} +\putnotese{70}{10} {\includegraphics[bb=0.00 0.00 777.04 516.03,width=7cm]{Fig/sliderepeat.pdf} } +\end{layer} \begin{verbatim} - Fhead="templatemv"; - Texparent=""; - Ketinit(); - Ketinitmv(); + new::プログラミング言語 // + %repeat=6,para// + \slidepage// + itemize// + item::Python// + %thin[2,-]::item::Ruby// + %thin[3,-]::item::Java// + %thin[4,-]::item::JavaScript// + %thin[5,-]::item::CindyScript// + %thin[6,-]::item::C// + end// +\end{verbatim} + +\vspace{\baselineskip} + {\bf 【図ファイルの順表示】} + +作業フォルダ(fig)の中にあるサブフォルダ(例えばsubfig)の図ファイルすべてを順に表示する。 + + パラパラ動画のときに用いる。パラパラ動画では,ParaFボタンをクリックすると,作業フォルダ(fig)の中に,動画のフレームファイルが入ったフォルダが作られる。そのフォルダのファイルをアルファベット順に表示する。もちろん,パラパラ動画以外のファイルの順表示に使ってもよい。 + +\verb|new| の次に + +\hspace{10mm} \verb|%repeat=//| + +\hspace{10mm} \verb|%para=subfig:{0}:s{60}{10}:input(:倍率)//| + +を書く。TeXのソースには, + +\hspace{10mm}\verb| layer{120}{0}, \putnotes{60}{10 初期設定put...}| + +の形で書き入れられる。 - ここにスクリプトを書く +また,2行に分けずに - Mvdispg(); +\hspace{10mm} \verb|%repeat=,para=... |と続けて書いてもよい。 + + +\vspace{\baselineskip} +{\bf 【レイヤー】} + +\hspace{10mm}\verb|layer::{範囲}{0}//| + +で layer環境の始まりを示す。layer環境の終わりは + +\hspace{10mm}\verb|end//| + + レイヤーの中に作業フォルダ(fig)にある図を表示するには + +\hspace{10mm}\verb|putnote::方向と位置::読み込みファイル//| + +とする。 + + 例) figure.texを(30,10)の位置の南東(原点は左上)に表示する。 + +\hspace{10mm} \verb|putonote::se{30}{10}::figure//| + + 例) figの中のfigure.texを0.8倍にして表示する。 + +\hspace{10mm} \verb|putonote::se{30}{10}::figure,0.8//| + + + 例)includegraphics で figure.pdf を表示する。 + +\hspace{10mm} \verb|putonote::se{30}{10}::include[width=5cm]::figure.pdf//| + + + 注)\verb|KeTpicStyle.pdf|を参照。文字などは本来の書式を用いて次のように入れる。 + +\hspace{10mm} \verb|\putonotee{30}{10}{文字}//| + +\vspace{\baselineskip} +{\bf 【テキストと動画】} + +コマンド以外のテキストはそのまま \TeX\ に書き出される。行末には // をつける。 +テキストを途中で改行するには,\TeX\ の 強制改行マーク \textbackslash \textbackslash をつける。 + +動画の場合は,動画の設定をして(アニメーションの節を参照)ファイルを作る。 + +パラパラ動画の場合は,ParaFボタンをクリックすると,figフォルダ内に動画のフレームファイルが入ったフォルダ(たとえば sincurve)が作られる。これを, + +\hspace{10mm} \verb|%repeat=//| + +\hspace{10mm} \verb|%para=sincurve:{0}:s{60}{10}:input(:倍率)//| + +で表示する。 + +アニメーションの場合は,スライドのために,makeslide.cdy のスクリプトに, \verb|Addpackage(["[dvipdfmx]{animate}"]);| を追加しておく。 + +Animeボタンをクリックすると,パラパラアニメと同様に動画のフレームファイルが入ったフォルダが作られ,動画用の\TeX\ ファイルができる。Setpara() で設定したファイル名が "sincurve" のとき,動画用の\TeX\ ファイルは "animsincurve.tex" となるので,\verb|%repeat| ではなく \verb|\input{fig/animsincurve}//| で表示する。 + + +\vspace{\baselineskip} +{\bf 【コメント行】} + + コマンドや文をコメントアウトするときは,\verb|%%| とする。 + +\vspace{\baselineskip} +{\bf 【空白行】} + +空白行を入れたいときは,\verb|...//| とする。 + +\vspace{\baselineskip} +{\bf 【タブ】} + +\hspace{10mm}\verb|\Ltab{長さ}{文1}文2| + +とすると,文1が行頭から,文2が長さ分の字下げをした位置から表示される。長さは 20mm のように指定。 + +\vspace{\baselineskip} +{\bf 【ページ番号】} + +page番号を表示するときは次のようにする。 + + mainの場合は \verb|\slidepage[m]//| + +それ以外の場合は \verb|%repeatの後に \slidepage//| + + 注)総ページ数を取得するため,TeXを2度コンパイルすることが必要である。そのため,Slideボタンを2度クリックすると総ページ数が表示される。 + +\vspace{\baselineskip} +{\bf mp3/mp4ファイルの追加} + +makeslide.txtのタイトルコマンドの後に,以下を追加する。 +\begin{verbatim} + title::slide0(::wallpaper) + ::\usepackage{ketmedia} + ::\usepackage[dvipdfmx]{media9}// \end{verbatim} -なお,ひながたの templatemv.cdy ではこの設定がすでにしてある。 -\newpage -\subsection{描画} +mp3ファイルを追加するときは,\verb|\inputsound|または\verb|\inputsoundclick|を用いる。\\ +\hspace{10mm}\verb|\inputsountclik[90]{フォルダ/}{ファイル}|\\ +\verb|\inputsound|は「自動再生」,\verb|\inputsoundclick|は「クリック再生」である。 +最初の引数は,ボタンの水平位置(単位mm)でデフォルトは90である.またフォルダには\verb|/|をつける。\vspace{2mm} + +mp4ファイルを追加するときは,\verb|\inputmovie|を用いる。\\ +\hspace{10mm}\verb|\inputsountclik[90]{1}{0.4}{フォルダ/}{ファイル}|\\ +2番目と3番目の引数は,幅と高さの\verb|\linewidth|からの倍率である。 + +\subsection{関数} +makeslide.cdy で使う,\ketcindy の関数。 + \begin{description} -\hypertarget{moviedata}{} -\item[関数] Moviedata(str1,str2,options) -\item[機能] アニメーションデータを作る -\item[説明] str1 はアニメーションを定義する関数名を文字列とする。str2 は定義域。\\ - optionsは,Cut と Div \\ - Cut : 1秒のフレーム数。初期値は20。\\ - Div : 全体のフレーム数。初期値は80。\\ - したがって,初期値では4秒間のアニメーションとなる。\\ - \\ -【例】定円上を動く点Pと,定点Aを結ぶ線分の中点をQとして動きを見る。\\ -まず,定円を,原点中心、半径2として描いておく。\\ -アニメーションを定義する関数は,時間を $t$ とすれば,時刻 $t$ における図(動くものだけ)を定義する。時刻は単なる媒介変数であるので,$t$ でなく $s$ などでもよい。 -\begin{verbatim} - Mf(t):=( - pt=2*[cos(t),sin(t)]; - Listplot("2",[[4,0],pt]); - Pointdata("2",mid(pt,[4,0])); - Letter([[4,0],"s","A",pt,"en","P",mid(pt,[4,0]),"ne","Q"]); - ); -\end{verbatim} -ここで,\verb|Mf(t)| の中で使っているユーザー定義関数\verb|mid()| は,端点を引数として線分の中点を返すもので,\\ - \verb|mid(p1,p2):=(p1+p2)/2;|\\ -として定義しておく。\\ -また,点の大きさを適宜設定しておく。\\ -以上の準備の後,\\ - \verb|Moviedata("Mf(t)","t=[0,2*pi]");|\\ -を実行する。\\ -ここでは,角度を媒介変数としているので,時間の$t$ でなく$s$ として\\ - \verb|Moviedata("Mf(s)","s=[0,2*pi]");|\\ -としてもよい。\\ -次のようにオプションを指定すると,5秒間のアニメーションとなる。\\ - \verb|Moviedata("Mf(s)","s=[0,2*pi]",["Div=50","Cut=10"]);|\\ -\verb|["Div=150","Cut=30"]|とすると,やはり5秒間のアニメーションとなるが,1秒間のフレーム数が多いためなめらかな動きとなる。ビデオのフレームレートである。ただし,ファイルサイズは約3倍となる。\\ -Cinderellaの画面は次のようになる。\\ - \\ - \includegraphics[bb=0 0 1054 706 , width=8cm]{Figmv/moviedata01.png}\\ - \\ -TexMvボタン または TexParaボタンを押すと画面上でもアニメーションが実行される。その後 Exekc ボタンを押すとファイルが作成される。 - -この図では,点が明示されるのは Q だけである。A,Pとも点を明示する場合のスクリプトの全体を示しておく。 -\begin{verbatim} - Fhead="mid"; - Texparent=""; - Ketinit(); - Ketinitmv(); - mid(p1,p2):=(p1+p2)/2; - Circledata("1",[[0,0],[2,0]]); - Ptsize(4); - Pointdata("1",[4,0]); - Mf(t):=( - pt=2*[cos(t),sin(t)]; - Listplot("2",[[4,0],pt]); - Pointdata("2",pt); - Pointdata("3",mid(pt,[4,0])); - Letter([[4,0],"s","A",pt,"en","P",mid(pt,[4,0]),"ne","Q"]); - ); - Moviedata("Mf(s)","s=[0,2*pi]",["Div=30","Cut=10"]); - Mvdispg(); -\end{verbatim} -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} +\hypertarget{setslidebody}{} +\item[関数] Setslidebody(bodycolor,bodystyle,density) +\item[機能] 全体の文字スタイルと薄文字の濃さ(0-1)の設定 +\item[説明] 引数の意味は次の通り。 +\begin{tabbing} +1234567890123\=4567890\=\kill +bodycolor \> 文字色 : 初期設定は "blue"\\ +bodystyle \> フォントタイプ : 初期設定は \verb|"\Large\bf\boldmath"|\\ +density \> 薄文字の濃さ : 初期設定は 0.1 +\end{tabbing} -\hypertarget{setpara}{} -\item[関数] Setpara(str) -\item[機能] parapa のタイトルを指定する -\item[説明] パラパラ動画のタイトルを str にする。デフォルトは Fhead。\\ - "" にした場合はタイトルを表示しない。 +引数がない場合や( \verb|Setslidebody()|)この関数を書かない場合は初期値が使われる。 -\end{description} +ある引数だけを指定したい場合は,それより前は空にする。 -\newpage +【例】\verb|Setslidebody(,"\large")| +\vspace{\baselineskip} +\hypertarget{setslidehyper}{} +\item[関数] Setslidehyper("dvipdfmx",options) +\item[機能] 順表示でページ送りのコントローラを設定する。 +\item[説明] 順表示しないときもこの関数の記述は必須と考えてよい。 -%== 3D =============== -\section{\ketcindy 3D} -\subsection{概要} -\ketcindy 3Dの画面は次のように構成される。 +パッケージ hyperref.styを読み込み,かつ,options の値を与える。 + +\verb|Setslidehyper();| は無効。初期設定で使う場合は \verb|Setslidehyper("");| とする。 + +第1引数は hyperref.sty の第1パラメータ。初期設定は "dvipdfmx" -Cinderellaの描画面に,白の矩形で囲んだ領域が2つできる。NE,SWを対角とする左側の領域を主画面,右側の領域を副画面という。\\ +options は ["cl=bool,lc=col,fc=col","Pos=[x,y]","Size=n"] - \includegraphics[bb=0 0 1776 998 , width=8cm]{Fig3d/3dstart.png}\\ +\begin{tabbing} +12345\=4567890\=\kill +cl \> colorlinks : リンクに色をつけるかどうか。true / false で指定。 初期設定は true\\ +lc \> linkcolor : コントローラの色。色名で指定。 初期設定は blue\\ +fc\> filecolor リンクの色。色名で指定。 初期設定は blue\\ +以上3つは,セットで指定。一部初期値を使う場合は\verb|lc=,| のように右辺を空にする。\\ +Pos \> コントローラの位置。 初期設定は [125,73] (左上が原点)\\ +Size \> コントローラの大きさ。 初期設定は1 +\end{tabbing} -主画面は平面の場合と同様,TeXに出力される範囲を示し,NE,SWの2点をドラッグすることにより変更できる。 -副画面は,Start3d() 関数により作成される。座標軸は,Xyzax3data() 関数によって描くことができる。主画面の下方のスライダで視点が移動でき,主画面上では軸が回転する。副画面は,xy平面上に視点を置いたものと考えればよい。 +\vspace{\baselineskip} +\hypertarget{setslidemain}{} +\item[関数] Setslidemain([letterc,boxc,boxd,framec,xpos,size]) +\item[機能] メインスライド(セクション区切り)の設定 +\item[説明] 引数の一部を 初期設定値とする場合は [,,,,3] や [,"red"] などとする。 +\begin{tabbing} +1234567\=4567890\=\kill +letterc \> 文字の色。 初期設定は CMYKで [0.98,0.13,0,0.43]\\ +boxc \> ボックスの色。 初期設定は [0,0.32,0.52,0] \\ +frame\> フレームの色。 初期設定は [0,0.32,0.52,0]\\ +xpos \> タイトルの水平位置。 初期設定は 62\\ +size \> タイトルの倍率。 初期設定は 2 +\end{tabbing} -主画面上にCinderellaの作図ツールで点や線分を作図すると,Start3d() 関数により副画面に対応する点が作図される。主画面上の点をドラッグするとx,y座標を変更でき,副画面上の点をドラッグするとz座標を変更できる。空間内の点は,Putpoint3d()関数によって座標を指定して作成することもできる。次のような図はCinderellaの作図ツールだけでも作ることができるし,Putpoint3d()関数を用いても作ることができる。\\ - \includegraphics[bb=0 0 1892 840 , width=10cm]{Fig3d/3dscreen.png}\\ +\vspace{\baselineskip} +\hypertarget{setslidepage}{} +\item[関数] Setslidepage([letterc,boxc,boxd,framec,shadowc,xpos,size]) +\item[機能] ページの設定をする。 +\item[説明] 引数の一部を 初期設定値とする場合は [,,,,3] や [,"red"]などとする。 -主画面と副画面の対応する点をドラッグすることにより,インタラクティブに図形を描くことができるが、実際には描画関数を用いて図形を描き,スライダで視点を変えて見やすい図をTeXに出力することになるだろう。 +\begin{tabbing} +1234567\=4567890\=\kill +letterc \> 文字の色。 初期設定は CMYKで [0.98,0.13,0,0.43]\\ +boxc \> ボックスの色。 初期設定は [0,0.32,0.52,0] \\ +frame\> フレームの色。 初期設定は [0,0.32,0.52,0]\\ +shadowc \> 影の色。 初期設定は [0,0,0,0.5]\\ +xpos \> タイトルの水平位置。 初期設定は 6\\ +size \> タイトルの倍率。 初期設定は 1.3 +\end{tabbing} + +\vspace{\baselineskip} +\hypertarget{setslidemargin}{} +\item[関数] Setslidemargin([leftmarginchange,topmarginchange]) +\item[機能] スライドの左上マージンをデフォルトから変更する場合の値。 +\item[説明] Setslidemargin([+5,-10]);(横方向に$+5$mm,縦方向に$-10$mm変更) -KeTCindy3Dでは,点・直線・曲線・面の描画を描画関数を用いて行うことができる。線や面については陰線処理を行い,立体的な図を作成することができる。しかし,陰線処理は処理にかなりの時間がかかるので,CindyscriptではなくScilabで行っているが,それでも相当時間がかかることを覚悟しなければならない。Scilabでの計算は,バッチファイル/シェルファイルで行っているが,Cindyscriptではその計算結果が出るのを待つため一時的に反応がなくなる。したがって,反応がなくなってもハングアップではないので,Cinderellaを強制終了しないように。 +\vspace{\baselineskip} +\hypertarget{settitle}{} +\item[関数] Settitle(タイトルリスト,options) +\item[機能] タイトルスライドを作る +\item[説明] タイトルリストはコンマ区切りで位置と文を文字列で与える。例を参照。 +「Title」ボタンをクリックすると,コンテンツファイルがない場合は新たに作る。すでにある場合は上書きせずタイトルスライドのみを作る。 -一例を示すと,球面をメッシュ入りで座標軸とともに陰線処理して描いた場合,次のような図が画面に表示されるまでの時間は,MacBookPro13' (Late 2013) Core i7 2.8GHz 8GB (OSX 10.11.6) の場合で約124秒であった。スクリプトは \hyperlink{wireparadata}{Wireparadata() } の例を参照されたい。\\ - \input{Fig3d/wirepara4} +Settitleのオプションは次をリストで与える。 + +\begin{tabbing} +123456789012\=4567890\=\kill +"Title=" \> タイトルスライドのファイル名。 初期設定は "slide0"。\\ +"Layery=" \> タイトルの縦位置。 初期設定は0。0でないときは方眼を表示。 \\ +"Color="\> 文字の色。 初期設定は blue。 +\end{tabbing} + +\vspace{\baselineskip} +【例】タイトルの設定 + +\begin{verbatim} + Settitle([ + "s{60}{20}{メインタイトル}", + "s{60}{50}{名前}", + "s{60}{60}{所属}", + "s{60}{70}{情報}" + ] , + ["Title=SlideA","Color=[1,1,0,0]"]); +\end{verbatim} + +出力する \TeX\ ファイルに,\verb|\begin{layer}| の設定をする。 \verb|s| は,東西南北の\verb|s| 。 + +例のように,タイトルリストは改行すると見やすい。 + +\end{description} +\newpage +%================== 3D =============== +\section{\ketcindy 3D} +\subsection{概要} +\ketcindy 3Dの画面は次のように構成される。 + +Cinderellaの描画面に,白の矩形で囲んだ領域が2つできる。NE,SWを対角とする左側の領域を主画面,右側の領域を副画面という。 + +\vspace{\baselineskip} +\begin{center} + \includegraphics[bb=0 0 879.05 447.02 , width=8cm]{Fig/3dstart.pdf} +\end{center} +主画面は平面の場合と同様,TeXに出力される範囲を示し,NE,SWの2点をドラッグすることにより変更できる。主画面の下方のスライダで視点が移動でき,主画面上では軸が回転する。副画面は,xy平面上に視点を置いたものと考えればよい。 + +主画面上にCinderellaの作図ツールで点や線分を作図すると,副画面に対応する点が作図される。主画面上の点をドラッグするとx,y座標を変更でき,副画面上の点をドラッグするとz座標を変更できる。 + +\vspace{\baselineskip} +\begin{center} + \includegraphics[bb=0.00 0.00 863.04 378.52 , width=10cm]{Fig/3dscreen.pdf} +\end{center} + +KeTCindy3Dでは,線や面についての陰線処理を行う。陰線処理はC言語との連携により処理を速めている。C言語を使う環境整備が必要であるが,現在はこれを標準としている。C言語が使えない場合はRで計算する関数を用いることになるが,その場合はかなり時間がかかる。(場合にもよるが2分程度) \newpage \subsection{設定・定義} @@ -4352,1683 +5863,1696 @@ KeTCindy3Dでは,点・直線・曲線・面の描画を描画関数を用い \begin{description} \hypertarget{ketinit3d}{} -\item[関数] Ketinit3d() -\item[機能] KeTCindy3Dの使用宣言 -\item[説明] Cinderellaの画面を3Dモードにする。\\ - Cinderellaの描画面に,視点移動のための2つのスライダを作る。スライダは初期位置が左端になる。\\ - KeTCindyの使用宣言 Ketinit() とともに用いるが,この関数は一度だけ実行すればよいので,通常は Initialization スロットに置く。Ketinit() も,平面の場合と異なり Initialization スロットに置けばよい。ただし,平面の関数を多用する場合は,Ketinit() は Drawスロットに書いておく。場合によって変数の初期化などが必要なためである。KeTCindy3Dにおける変数の初期化などは,Start3d()で行われる。\\ - \\ +\item[関数] Ketinit3d() +\item[機能] KeTCindy3Dの使用宣言 +\item[説明] Cinderellaの画面を3Dモードにする。 +Cinderellaの描画面に,視点移動のための2つのスライダを作る。スライダは初期位置が左端になる。 + +\textcolor{red}{<重要>} + + この関数は Initialization スロットに置く。Ketinit() も,平面の場合と異なり Initialization スロットに置く。KeTCindy3Dにおける変数の初期化などを行う,Start3d()はDrawスロットに書く。 + +\vspace{\baselineskip} \hypertarget{start3d}{} -\item[関数] Start3d(option) -\item[機能] 3Dの画面設定と空間点の認識 -\item[説明] 副画面を作り,幾何点を3Dの点として認識する。この関数は必須で,Drawスロットのはじめの方に置く。\\ - Cinderellaの作図ツールで,点・線分を作図すると,内部関数の Ptseg3data() によってそれらを空間の点として認識し,副画面上に対応する点をとる。ただし,始めはz座標を0とする。点の名前がAであれば,副画面上の点はAzとなる。点をポイントして選択すると副画面の上に座標が表示される。\\ - 作図した点の名称をインスペクタで変更した場合,新しい名称に対応する点を副画面上に作成するが,以前の点は消えないので要注意。たとえば,点Aを作図した後,主画面上の点Aをインスペクタで点Dに変えた場合,副画面上に新たにDzができるが,以前のAzも残る。残ったAzは,選択しておいて作図ツールの消去ボタン \includegraphics[bb=0 0 27 21 , width=0.6cm]{Cindytool/delete.png}で消すことができる。\\ - optionに,除外点のリストを与えると,その点は空間点としない。(始点を移動しても位置は変わらない)\\ -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} +\item[関数] Start3d(option) +\item[機能] 3Dの画面設定と空間点の認識 +\item[説明] 副画面を作り,幾何点を3Dの点として認識する。この関数は必須で,Drawスロットの先頭に書く。 + +Cinderellaの作図ツールで,点・線分を作図すると,内部関数の Ptseg3data() によってそれらを空間の点として認識し,副画面上に対応する点をとる。ただし,始めはz座標を0とする。点の名前がAであれば,副画面上の点はAzとなる。点をポイントして選択すると副画面の上に座標が表示される。 + +作図した点の名称をインスペクタで変更した場合,新しい名称に対応する点を副画面上に作成するが,以前の点は消えないので要注意。たとえば,点Aを作図した後,主画面上の点Aをインスペクタで点Dに変えた場合,副画面上に新たにDzができるが,以前のAzも残る。残ったAzは,選択しておいて作図ツールの消去ボタン \includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/delete.pdf}で消すことができる。 + +optionに,除外点のリストを与えると,その点は空間点としない。(始点を移動しても位置は変わらない) + +\vspace{\baselineskip} +\hypertarget{startsurf}{} +\item[関数] Startsurf(options) +\item[機能] 曲面描画の初期化と定数の設定 +\item[説明] options で定数を設定する。定数としては,分割数,Cのサイズ,誤差の限界を設定する。 + +optionsがないときは,以下の 初期設定を用いる。 + + [50,50],[1500,500,200],[0.01,0.1] + +設定後に初期値にリセットするときは,文字列 "reset" を引数に与える。 + +これにより,陰線処理をともなう面の描画の手順は,次のようになる。 + +(1) Startsurf(); で面描画の宣言をする。 + +(2) 描画関数でプロットデータを作る。 + +(3) ExeccmdC(); で,C言語を用いてまとめて描画する。 + + +\vspace{\baselineskip} +\hypertarget{isangle}{} +\item[関数] Isangle() +\item[機能] 角度スライダ(視点スライダ)の選択判断 +\item[説明] 角度スライダを選択しているときは true ,そうでないときは false を返す。 + +曲面の描画・陰線処理には時間がかかるため,角度スライダを動かすと反応が悪くなる。そこで,角度スライダを選択しているときは曲面の描画をしないようにすることで反応がよくなる。 + +\vspace{\baselineskip} +【例】放物面の描画 + +次のようにすると,スライダの点を選んでいる間はワイヤフレームモデルが描かれ,画面上の他の部分をクリックして選択状態が解除されると陰線処理された放物面が描かれる。 +\begin{verbatim} + fd=[ + "z=4-(x^2+y^2)", + "x=R*cos(T)","y=R*sin(T)", + "R=[0,2]","T=[0,2*pi]","e" + ]; + if(Isangle(), + Sf3data("1",fd); + , + Startsurf(); + Sfbdparadata("1",fd); + Crvsfparadata("1","ax3d","sfbd3d1",fd); + ExeccmdC("1"); + ); +\end{verbatim} \end{description} + +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} + \newpage \subsection{描画} \begin{description} \hypertarget{bezier3d}{} -\item[関数] Bezier3d(name,リスト1,リスト2) -\item[機能] 空間ベジェ曲線を描く -\item[説明] 引数はリスト1が端点リスト,リスト2が制御点リスト\\ - 1組の端点につき,2つの制御点を使う。\\ - \\ -【例】いくつかの点をベジェ曲線で結ぶ\\ - 端点A,Bに対し,制御点をD,Eとする。\\ - \verb|Bezier3d("1",["A","B"],["D","E"]);| \\ - 端点A,Bに対し,制御点をD,Eとし,端点BCに対し制御点をE,Fとする。\\ - \verb|Bezier3d("1",["A","B","C"],["D","E","E","F"]);|\\ - 端点A,Bに対し,制御点をD,Eとし,端点BCに対し制御点をF,Gとする。(図)\\ - \verb|Bezier3d("1",["A","B","C"],["D","E","F","G"]);|\\ - \input{Fig3d/bezier3d1} - -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} - -\hypertarget{changstyle3d}{} -\item[関数] Changstyle3d(リスト,リスト) -\item[機能] 3Dプロットデータの属性を変更 -\item[説明] 第1引数のプロットデータの属性を,第2引数に変更する。\\ -たとえば,補助線など,画面には描いてもTeXに書き出さない線を描画するときは,optionに["notex"] をつけるが,これをあとから付加したい場合に利用する。プロットデータはリストにできるので,複数のプロットデータの属性をまとめて変更することができて便利である。\\ - \\ -【例】4つの点で四面体の辺を描き,まとめて notex にする。点A,B,C,Dはとってあるものとする。 -\begin{verbatim} - Spaceline("1",[A,B]); - Spaceline("2",[A,C]); - Spaceline("3",[B,C]); - Spaceline("4",[A,D]); - Spaceline("5",[B,D]); - Spaceline("6",[C,D]); - edges=apply(1..6,"sl3d"+text(#)); - Changestyle3d(edges,["notex"]); -\end{verbatim} - -\hypertarget{concatobj}{} -\item[関数] Concatobj(リスト,option) -\item[機能] いくつかのobjデータを結合する -\item[説明] 多面体の各面の頂点リストから面データ(頂点リストと面リスト)を作る。\\ - \\ -【例】4点A,B,C,Dを頂点とする四面体を描く。\\ - 四面体は4つの面からなっている。頂点をA,B,C,Dとすると,4つの面は\\ - △ABC,△ABD,△ACD,△BCD\\ - である。\\ - \input{Fig3d/concatobj}\\ - そこで\\ - \verb|Concatobj([[A,B,C],[A,B,D],[A,C,D],[B,C,D]]);|\\ - とすると,面データ [[A,B,C,D],[[1,2,3],[1,2,4],[1,3,4],[2,3,4]]] が返される。\\ - この面データを使って四面体を描くことができる。コード例は,\hyperlink{vertexedgeface}{VertexEdgeFace()} を参照のこと。 - -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} +\item[関数] Bezier3d(name,リスト1,リスト2) +\item[機能] 空間ベジェ曲線を描く +\item[説明] 引数はリスト1が端点リスト,リスト2が制御点リスト + +1組の端点につき,2つの制御点を使う。 + +\vspace{\baselineskip} +【例】いくつかの点をベジェ曲線で結ぶ + + 端点A,Bに対し,制御点をD,Eとする。 + + \verb|Bezier3d("1",["A","B"],["D","E"]);| \vspace{\baselineskip} + + 端点A,Bに対し,制御点をD,Eとし,端点BCに対し制御点をE,Fとする。 + + \verb|Bezier3d("1",["A","B","C"],["D","E","E","F"]);| + + 端点A,Bに対し,制御点をD,Eとし,端点BCに対し制御点をF,Gとする。(図) + + \verb|Bezier3d("1",["A","B","C"],["D","E","F","G"]);| + + \begin{center} \input{Fig/bezier3d1} \end{center} + +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} + +\hypertarget{changestyle3d}{} +\item[関数] Changestyle3d(リスト,リスト) +\item[機能] 3Dプロットデータの属性を変更 +\item[説明] 第1引数のプロットデータの属性を,第2引数に変更する。 + +たとえば,補助線など,画面には描いてもTeXに書き出さない線を描画するときは,optionに["notex"] をつけるが,これをあとから付加したい場合に利用する。プロットデータはリストにできるので,複数のプロットデータの属性をまとめて変更することができて便利である。 + +\vspace{\baselineskip} +【例】4つの点で四面体の辺を描き,まとめて notex にする。点A,B,C,Dはとってあるものとする。 +\begin{verbatim} + Spaceline("1",[A,B]); + Spaceline("2",[A,C]); + Spaceline("3",[B,C]); + Spaceline("4",[A,D]); + Spaceline("5",[B,D]); + Spaceline("6",[C,D]); + edges=apply(1..6,"sl3d"+text(#)); + Changestyle3d(edges,["notex"]); +\end{verbatim} + +\hypertarget{concatobj}{} +\item[関数] Concatobj(リスト,option) +\item[機能] いくつかのobjデータを結合する +\item[説明] 多面体の各面の頂点リストから面データ(頂点リストと面リスト)を作る。 + +\vspace{\baselineskip} +【例】4点A,B,C,Dを頂点とする四面体を描く。 + +四面体は4つの面からなっている。頂点をA,B,C,Dとすると,4つの面は + + △ABC,△ABD,△ACD,△BCD\\ +である。 + + \begin{center} \input{Fig/concatobj} \end{center} + +そこで + + \verb|Concatobj([[A,B,C],[A,B,D],[A,C,D],[B,C,D]]);| + +とすると,面データ [[A,B,C,D],[[1,2,3],[1,2,4],[1,3,4],[2,3,4]]] が返される。 + +この面データを使って四面体を描くことができる。コード例は,\hyperlink{vertexedgeface}{VertexEdgeFace()} を参照のこと。 + +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} \hypertarget{crvsfparadata}{} -\item[関数] Crvsfparadata(name,PD1,PD2,式,options1,options2) -\item[機能] 曲線の曲面による陰線処理 -\item[説明] 曲線PD1を表示するにあたり,曲面PD2によって隠れる部分を非表示にする。\\ -通常は曲面PD2も表示するので,Sfbdparadata() も同時に用いることになる。曲面を表示しなければ,曲線だけが陰線処理された状態で表示される。\\ -第4引数の式は,PD2を描くための式。\\ -options1 には"r","m", "Wait=n" が指定できる。Wait の初期値は20\\ - "r","m"に関しては,オプションなしまたは,”” のとき\\ - i) データファイルがなければ,新しく作る\\ - ii) データファイルが既にあればそれを読み込む\\ - "m" のとき,強制的にデータファイルを作り直す。\\ - "r" のとき,すでにあるデータファイルを読み込む。\\ -options2 には 軸の陰線の表示について "nodisp" または線種が指定できる。デフォルトは "nodisp"。\\ -options2だけを指定したい場合は,options1 を空リスト [ ] にする。\\ - \\ -【例】回転放物面と座標軸,線分を描く。\\ -デフォルトでは陰線は非表示である。(下図左) -\begin{verbatim} - Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]"); - Putpoint3d(["A",[0,-3,0],"B",[0,3,3]],"fix"); - Spaceline([A,B]); - fd=["z=4-(x^2+y^2)","x=R*cos(T)","y=R*sin(T)","R=[0,2]","T=[0,2*pi]","e"]; - Sfbdparadata("1",fd); - Crvsfparadata("1","AB3d","sfbd3d1",fd); - Crvsfparadata("2","ax3d","sfbd3d1",fd); -\end{verbatim} -options2に線種指定 ["do"] をつけると,陰線は点線で表示される。(下図右) -\begin{verbatim} -Sfbdparadata("1",fd,[],["do"]); -Crvsfparadata("1","AB3d","sfbd3d1",fd,[],["do"]); -Crvsfparadata("2","ax3d","sfbd3d1",fd,[],["do"]); -\end{verbatim} - - \input{Fig3d/crvsfparadata1} \input{Fig3d/crvsfparadata2} - \\ -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} - -\hypertarget{datalist}{} -\item[関数] Datalist2d() -\item[機能] 画面上のプロットデータのリストを取得する -\item[説明] 画面に描かれているすべてのプロットデータのリストを返す。\\ -空間図形は,Cinderellaの画面上に射影し表示する。そのため,KeTCindy3Dは,空間におけるプロットデータと,画面上に表示するプロットデータの2つを作っている。Datalist2d()では,画面上に表示するプロットデータのリストを返す。\\ - \\ +\item[関数] Crvsfparadata(name,PD1,PD2,式) +\item[機能] 曲面による曲線の陰線処理を行う。 +\item[説明] 曲線PD1を表示するにあたり,曲面PD2によって隠れる部分処理を行う。 + +曲面PD2のプロットデータを作るため,Sfbdparadata() も同時に用いることになる。nameは,Sfbdparadata() と同じものにする。 + +作図例は,\hyperlink{execcmdc}{ExeccmdC()} を参照のこと。 + +C言語が使えない場合は,CrvsfparadataR(name,PD1,PD2,式,options1,options2) を使う。 +options1 は分割数と誤差限界, options2 は陰線の線種。 + +\vspace{\baselineskip} +\hypertarget{datalist}{} +\item[関数] Datalist2d() +\item[機能] 画面上のプロットデータのリストを取得する +\item[説明] 画面に描かれているすべてのプロットデータのリストを返す。 + +空間図形は,Cinderellaの画面上に射影し表示する。そのため,KeTCindy3Dは,空間におけるプロットデータと,画面上に表示するプロットデータの2つを作っている。Datalist2d()では,画面上に表示するプロットデータのリストを返す。 + +\vspace{\baselineskip} 【例】 \begin{verbatim} - Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]"); - Putpoint3d(["A",[0,-3,0],"B",[0,3,3]],"fix"); - Spaceline([A,B]); - println("PD="+Datalist2d()); + Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]"); + Putpoint3d(["A",[0,-3,0],"B",[0,3,3]],"fix"); + Spaceline("1",[A,B]); + println("PD="+Datalist2d()); \end{verbatim} -とすると,コンソールに PD=[ax2d,AB2d] と表示される。ax2dは座標軸のプロットデータ ax3d に,AB2d は線分ABのプロットデータ AB3d に対応している。\\ - \\ +とすると,コンソールに PD=[ax2d,AB2d] と表示される。ax2dは座標軸のプロットデータ ax3d に,AB2d は線分ABのプロットデータ AB3d に対応している。 +\vspace{\baselineskip} \hypertarget{datalist}{} -\item[関数] Datalist3d() -\item[機能] 空間のプロットデータのリストを取得する -\item[説明] 空間に描かれているすべてのプロットデータのリストを返す\\ - \\ +\item[関数] Datalist3d() +\item[機能] 空間のプロットデータのリストを取得する +\item[説明] 空間に描かれているすべてのプロットデータのリストを返す + +\vspace{\baselineskip} 【例】 \begin{verbatim} - Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]"); - Putpoint3d(["A",[0,-3,0],"B",[0,3,3]],"fix"); - Spaceline([A,B]); - println("PD="+Datalist3d()); + Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]"); + Putpoint3d(["A",[0,-3,0],"B",[0,3,3]],"fix"); + Spaceline("1",[A,B]); + println("PD="+Datalist3d()); \end{verbatim} -とすると,コンソールに PD=[ax3d,AB3d] と表示される。\\ +とすると,コンソールに PD=[ax3d,AB3d] と表示される。 -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} + +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} \hypertarget{dist3d}{} -\item[関数] Dist3d(a1,a2) -\item[機能] 空間の2点間の距離を返す -\item[説明] 引数a1,a2 は作図点の名称,空間点の名称のいずれでもよい。\\ -次の3通りの記法は同じ結果を返す。混在も可 +\item[関数] Dist3d(a1,a2) +\item[機能] 空間の2点間の距離を返す +\item[説明] 引数a1,a2 は作図点の名称,空間点の名称のいずれでもよい。 + +次の3通りの記法は同じ結果を返す。混在も可 \begin{verbatim} - Dist3d("A","B"); - Dist3d(A,B); - Dist3d(A3d,B3d); + Dist3d("A","B"); + Dist3d(A,B); + Dist3d(A3d,B3d); \end{verbatim} - \\ +\vspace{\baselineskip} \hypertarget{drawpoint3d}{} -\item[関数] Drawpoint3d(座標) -\item[機能] 空間点を描く -\item[説明] 引数で与えた空間座標の点を描く。この点は幾何点ではない。また,TeX にも出力されない。幾何点にするには \hyperlink{putpoint3d}{Putpoint3d()} と用いる。TeXに点を出力するには,\hyperlink{pointdata}{Pointdata()} または \hyperlink{drwpt}{Drawpoint()} を用いる。\\ +\item[関数] Drawpoint3d(座標) +\item[機能] 空間点を描く +\item[説明] 引数で与えた空間座標の点を描く。この点は幾何点ではない。また,TeX にも出力されない。幾何点にするには \hyperlink{putpoint3d}{Putpoint3d()} を用いる。TeXに点を出力するには,\hyperlink{pointdata3d}{Pointdata3d()} を用いる。 + 引数は,座標のリストにすることもできる。\\ - \\ +\vspace{\baselineskip} 【例】 \begin{verbatim} - Drawpoint3d([1,1,1]); - Drawpoint3d([[1,1,1],[0,1,0]]); + Drawpoint3d([1,1,1]); + Drawpoint3d([[1,1,1],[0,1,0]]); +\end{verbatim} +\vspace{\baselineskip} + +\hypertarget{execcmdc}{} +\item[関数] ExeccmdC(name,options1,options2) +\item[機能] 曲面を表示する。戻り値は,対象にしたプロットデータのリスト。 +\item[説明] データが作成された曲面を表示する。 + +options1 には"r","m", "Wait=n" と輪郭線の線種が指定できる。Wait の初期値は20 + + "r","m"に関しては,オプションなしまたは,”” のとき + + i) データファイルがなければ,新しく作る + + ii) データファイルが既にあればそれを読み込む + + "m" のとき,強制的にデータファイルを作り直す。 + + "r" のとき,すでにあるデータファイルを読み込む。 + +options2 には 軸の陰線について "nodisp" または線種が指定できる。 初期設定は "do"。 + +options2だけを指定したい場合は,options1 を空リスト [ ] にする。 + + +\vspace{\baselineskip} +【例】回転放物面と座標軸,線分を陰線処理したデータを作って表示する。線分の端点A,Bはあらかじめ作図しておく。 + + 初期設定では陰線は点線で表示される。(下図左) +\begin{verbatim} + Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]"); + Putpoint3d(["A",[0,-3,0],"B",[0,3,3]],"fix"); + Spaceline([A,B]); + fd=["z=4-(x^2+y^2)","x=R*cos(T)","y=R*sin(T)","R=[0,2]","T=[0,2*pi]","e"]; + Startsurf(); + Sfbdparadata("1",fd); + Crvsfparadata("1","AB3d","sfbd3d1",fd); + Crvsfparadata("2","ax3d","sfbd3d1",fd); + ExeccmdC("1"); +\end{verbatim} +options2を ["nodisp"] にすると,陰線は非表示になる。(下図右) +\begin{verbatim} + ExeccmdC("1",[],["nodisp"]); \end{verbatim} - \\ + \begin{center} \input{Fig/crvsfparadata2} \input{Fig/crvsfparadata1} \end{center} + +戻り値を使うと,陰線のスタイル(線種,色)を変えることができる。戻り値と同じものがコンソールに「readoutdata from template3D1.txt : 」として表示されるので,これを見て操作対象を決めればよい。たとえば,上の左図で,線分ABの陰線はリストの4番目の crvsfh3d1 なので, + +\begin{verbatim} + ret=ExeccmdC("1"); + Changestyle3d(ret_4,["da","Color=red"]); +\end{verbatim} + +とすると,赤の破線になる。 + +\hspace{20mm} \input{Fig/execcmdc1} + +この他,\hyperlink{sfbdparadata}{Sfbdparadata()},\hyperlink{wireparadata}{Wireparadata()} も参照のこと。 + +\vspace{\baselineskip} \hypertarget{embed}{} -\item[関数] Embed(name,PDリスト,式,変数リスト) -\item[機能] 2D図形の空間内平面へ埋め込む -\item[説明] 第2引数は2Dの図形のプロットデータのリスト,式と変数は平面を記述する式と変数。平面は原点$vo$と2つの基本ベクトル $\overrightarrow{vx},\overrightarrow{vy}$を用いて,$vo+x \cdot \overrightarrow{vx}+y \cdot \overrightarrow{vy}$ の形で表すことができる。変数(基本ベクトルの係数)は$x,y$ でなく,$s,t$ でもよい。式,変数リストともに文字列にする。また,基本ベクトルは直交していなくてもよいし,長さが異なってもよいが,縦横同じスケールの直交座標系にするのがわかりやすいだろう。\\ - \\ +\item[関数] Embed(name,PDリスト,式,変数リスト) +\item[機能] 2D図形の空間内平面へ埋め込む +\item[説明] 第2引数は2Dの図形のプロットデータのリスト,式と変数は平面を記述する式と変数。平面は原点$vo$と2つの基本ベクトル $\overrightarrow{vx},\overrightarrow{vy}$を用いて,$vo+x \cdot \overrightarrow{vx}+y \cdot \overrightarrow{vy}$ の形で表すことができる。変数(基本ベクトルの係数)は$x,y$ でなく,$s,t$ でもよい。式,変数リストともに文字列にする。また,基本ベクトルは直交していなくてもよいし,長さが異なってもよいが,縦横同じスケールの直交座標系にするのがわかりやすいだろう。 + +\vspace{\baselineskip} 【例】正三角形と外接円を空間内の平面に埋め込む \begin{verbatim} - Xyzax3data("","x=[-5,4]","y=[-10,4]","z=[-5,5]",["a","O"]); - Spaceline("1",[[3,0,0],[3,6,0],[3,6,6],[3,0,6],[3,0,0]]); - Defvar("vo=[3,3,3]"); - Defvar("vx=[0,1,0]"); - Defvar("vy=[0,0,1]"); - Putpoint3d(["A",[3,3,3]],"fix"); - Circledata("1",[[0,0],[2,0]],["nodisp"]); - Listplot("1",[[0,2],[-sqrt(3),-1],[sqrt(3),-1],[0,2]],["nodisp"]); - Embed("1",["cr1","sg1"],"vo+x*vx+y*vy","[x,y]"); - Ptsize(3); - Drawpoint(A); -\end{verbatim} - \input{Fig3d/embed01} - - ここで,Embed()で引き渡す vo,vx,vy については,Scilabでの変数定義が必要なので(KeTCindyでは行わない)Defvar() によって定義をしている。 + Xyzax3data("","x=[-5,4]","y=[-10,4]","z=[-5,5]",["a","O"]); + Spaceline("1",[[3,0,0],[3,6,0],[3,6,6],[3,0,6],[3,0,0]]); + Defvar("vo=[3,3,3]"); + Defvar("vx=[0,1,0]"); + Defvar("vy=[0,0,1]"); + Putpoint3d(["A",[3,3,3]],"fix"); + Circledata("1",[[0,0],[2,0]],["nodisp"]); + Listplot("1",[[0,2],[-sqrt(3),-1],[sqrt(3),-1],[0,2]],["nodisp"]); + Embed("1",["cr1","sg1"],"vo+x*vx+y*vy","[x,y]"); + Ptsize(3); + Drawpoint(A); +\end{verbatim} + \begin{center} \input{Fig/embed01} \end{center} + +ここで,Embed()で引き渡す vo,vx,vy については,Rでの変数定義が必要なので(\ketcindy では行わない)Defvar() によって定義をしている。 + 原点,基本ベクトルを,点を作図して次のようにすることもできる。この場合は Defvar() は不要。 + \begin{verbatim} - Putpoint3d(["A",[3,3,3],"B",[0,1,0],"C",[0,0,1]],"fix"); - Embed("1",["cr1","sg1"],"A3d+x*B3d+y*C3d","[x,y]"); + Putpoint3d(["A",[3,3,3],"B",[0,1,0],"C",[0,0,1]],"fix"); + Embed("1",["cr1","sg1"],"A3d+x*B3d+y*C3d","[x,y]"); \end{verbatim} - \includegraphics[bb=0 0 954 766 , width=6cm]{Fig3d/embed03.png}\\ +\begin{center} +\includegraphics[bb=0 0 477.02 383.02 , width=6cm]{Fig/embed03.pdf} +\end{center} この場合,点B,Cの座標がそのまま基本ベクトルとなっているが,原点Aに対して描画平面上にはB,Cがないので図がわかりにくい。図をわかりやすくするならば次のようにする。 \begin{verbatim} - Putpoint3d(["A",[3,3,3],"B",[3,4,3],"C",[3,3,4]],"fix"); - Embed("1",["cr1","sg1"],"A3d+x*(B3d-A3d)+y*(C3d-A3d)","[x,y]"); + Putpoint3d(["A",[3,3,3],"B",[3,4,3],"C",[3,3,4]],"fix"); + Embed("1",["cr1","sg1"],"A3d+x*(B3d-A3d)+y*(C3d-A3d)","[x,y]"); \end{verbatim} - また,平面を記述するのに,平面の原点と法線ベクトルを用いて Perpplane() を用いると,基本ベクトルが生成されるので、これを利用することができる。次のスクリプトでは,Skeletonparadata() を用いて陰線処理もしている。 + また,平面を記述するのに,平面の原点と法線ベクトルを用いて Perpplane() を用いると,基本ベクトルが生成されるので、これを利用することができる。次のスクリプトでは,Skeletonparadata() を用いて陰線処理もしている。 \begin{verbatim} - Xyzax3data("","x=[-5,5]","y=[-8,5]","z=[-5,5]"); - Putpoint3d(["O",[0,0,0],"P",[1,1,2]],"fix"); - Perpplane("E-F","P",P3d-O3d,"put"); - vec1=3*(E3d-P3d); - vec2=3*(F3d-P3d); - Putpoint3d(["A",P3d+vec1+vec2],"fix"); - Putpoint3d(["B",P3d+vec1-vec2],"fix"); - Putpoint3d(["C",P3d-vec1-vec2],"fix"); - Putpoint3d(["D",P3d-vec1+vec2],"fix"); - Spaceline([A,B,C,D,A]); - Circledata("1",[[0,0],[2,0]],["nodisp"]); - Listplot("1",[[0,2],[-sqrt(3),-1],[sqrt(3),-1],[0,2]],["nodisp"]); - Embed("1",["cr1","sg1"],"P3d+x*(E3d-P3d)+y*(F3d-P3d)","[x,y]"); - Ptsize(3); - Drawpoint(P); - Skeletonparadata("1"); + Xyzax3data("","x=[-5,5]","y=[-8,5]","z=[-5,5]"); + Putpoint3d(["O",[0,0,0],"P",[1,1,2]],"fix"); + Perpplane("E-F","P",P3d-O3d,"put"); + vec1=3*(E3d-P3d); + vec2=3*(F3d-P3d); + Putpoint3d(["A",P3d+vec1+vec2],"fix"); + Putpoint3d(["B",P3d+vec1-vec2],"fix"); + Putpoint3d(["C",P3d-vec1-vec2],"fix"); + Putpoint3d(["D",P3d-vec1+vec2],"fix"); + Spaceline("1",[A,B,C,D,A]); + Circledata("1",[[0,0],[2,0]],["nodisp"]); + Listplot("1",[[0,2],[-sqrt(3),-1],[sqrt(3),-1],[0,2]],["nodisp"]); + Embed("1",["cr1","sg1"],"P3d+x*(E3d-P3d)+y*(F3d-P3d)","[x,y]"); + Ptsize(3); + Drawpoint(P); + Skeletonparadata("1"); \end{verbatim} - \input{Fig3d/embed02} + \begin{center} \input{Fig/embed02} \end{center} -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} \hypertarget{intersectcrvsf}{} -\item[関数] Intersectcrvsf(name,PD,式) -\item[機能] 曲線と曲面の交点の座標を求める -\item[説明] PDは曲線のプロットデータ。式は曲面の式。\\ - \\ -【例】回転放物面と線分の交点の座標を表示する。曲面は表示されていなくてもよい。 -\begin{verbatim} -Putpoint3d(["A",[0,-3,0],"B",[0,3,2]],"fix"); -Spaceline([A,B]); -fd=["z=4-(x^2+y^2)","x=R*cos(T)","y=R*sin(T)","R=[0,2]","T=[0,2*pi]","e"]; -println("Intersect="+Intersectcrvsf("1","AB3d",fd)); +\item[関数] Intersectcrvsf(name,PD,式) +\item[機能] 曲線と曲面の交点の座標を求める +\item[説明] PDは曲線のプロットデータ。式は曲面の式。 + + 曲面は,Sfbdparadata()でデータを作成し,ExeccmdC()で表示しておく。交点の座標は,"intercrvsf"+name に代入される。コマンドの実行順序は次の例のようにする。 + +\vspace{\baselineskip} +【例】回転放物面と線分の交点の座標を表示する。 +\begin{verbatim} + Putpoint3d(["A",[0,-3,0],"B",[0,3,2]],"fix"); + Spaceline("1",[A,B]); + fd=[ + "z=4-(x^2+y^2)","x=R*cos(T)","y=R*sin(T)", + "R=[0,2]","T=[0,2*pi]","e" + ]; + Startsurf(); + Sfbdparadata("1",fd); + Intersectcrvsf("1","sl3d1",fd); + ExeccmdC("1",[""]); + println("Intersect="+intercrvsf1); + Drawpoint3d(intercrvsf1); \end{verbatim} 実行すると,コンソールに\\ - \verb|Intersect=[[0,-1.91,0.36,1.18],[0,1.57,1.52,1.76]] | -と表示される。\\ + \verb|Intersect=[[0,1.57,1.52],[0,-1.91,0.36]] | +と表示され,画面には緑で交点が表示される。。 + +\vspace{\baselineskip} \hypertarget{intersectsgpL}{} -\item[関数] IntersectsgpL(点名,線分,面,描画方法) -\item[機能] 空間の線分と平面の交点を作図する -\item[説明] 引数の線分は線分の端点を "A-B" の形もしくは座標のリスト形で与える。\\ - 引数の面は,面内の3点を "C-D-E" の形もしくは座標のリストで与える。\\ - 描画方法は,"put" または "draw" で,描画方法を指定しない場合は "draw" と同じ。"draw"では交点が緑の点で表示されるだけで,幾何点はできない。"put" では幾何点を作る。\\ - \\ +\item[関数] IntersectsgpL(点名,線分,面,描画方法) +\item[機能] 空間の線分と平面の交点を作図する +\item[説明] 引数の線分は線分の端点を "A-B" の形もしくは空間座標のリストで与える。 + + 引数の面は,面内の3点を "C-D-E" の形もしくは空間座標のリストで与える。 + + 描画方法は,"put" または "draw" で,描画方法を指定しない場合は "draw" と同じ。"draw"では交点が緑の点で表示されるだけで,幾何点はできない。"put" では幾何点を作る。 + +\vspace{\baselineskip} 【例】座標のリストで与える記述例\\ - \verb|IntersectsgpL("P",[p1,p2],[p3,p4,p5],"draw");| \\ - \\ -【例】立方体を平面で切った図を描く。\\ - いろいろな手順が考えられるが,ここでは次の手順で描く。\\ - (1) 立方体の頂点をとる。1辺の長さをHnとする。\\ - ここでは軸上の点はPutaxes3d()でとる。\\ -(2) 切断面を決める点E,F,Gを辺上の自由点としてPutonseg3d()でとる。\\ -(3) E,F,Gを通る平面と,辺AC,DYとの交点をとり,M,Nとする。\\ + \verb|IntersectsgpL("P",[p1,p2],[p3,p4,p5],"draw");| + +\vspace{\baselineskip} +【例】立方体を平面で切った図を描く。 + + いろいろな手順が考えられるが,ここでは次の手順で描く。 + + (1) 立方体の頂点をとる。1辺の長さをHnとする。 + + ここでは軸上の点はPutaxes3d()でとる。 + +(2) 切断面を決める点E,F,Gを辺上の自由点としてPutonseg3d()でとる。 + +(3) E,F,Gを通る平面と,辺AC,DYとの交点をとり,M,Nとする。 + (4) 全体を多面体として面データを作って描画する。 \begin{verbatim} - Hn=3; - Putaxes3d(Hn); - Putpoint3d("A",[Hn,Hn,0],"fix"); - Putpoint3d("B",[Hn,0,Hn],"fix"); - Putpoint3d("C",[Hn,Hn,Hn],"fix"); - Putpoint3d("D",[0,Hn,Hn],"fix"); - Putonseg3d("E",X,B); - Putonseg3d("F",Z,B); - Putonseg3d("G",Z,D); - IntersectsgpL("M","A-C","E-F-G","put"); - IntersectsgpL("N","D-Y","E-F-G","put"); - phd=Concatobj([[O,X,A,Y],[X,A,M,E],[A,Y,N,M],[Y,N,G,Z,O], - [O,Z,F,E,X],[Z,F,G],[E,M,N,G,F]]); - VertexEdgeFace("1",phd,["Edg=nogeo"]); - Nohiddenbyfaces("1","phf3d1"); -\end{verbatim} -Cinderellaの描画面はつぎのようになる。点E,F,Gをドラッグして,適当な位置の断面にできる。ただし,M,Nは辺上にあることが条件である。 -\\ - \\ -\includegraphics[bb=0 0 1426 654 , width=12cm]{Fig3d/IntersectsgpL0.png}\\ + Hn=3; + Putaxes3d(Hn); + Putpoint3d("A",[Hn,Hn,0],"fix"); + Putpoint3d("B",[Hn,0,Hn],"fix"); + Putpoint3d("C",[Hn,Hn,Hn],"fix"); + Putpoint3d("D",[0,Hn,Hn],"fix"); + Putonseg3d("E",X,B); + Putonseg3d("F",Z,B); + Putonseg3d("G",Z,D); + IntersectsgpL("M","A-C","E-F-G","put"); + IntersectsgpL("N","D-Y","E-F-G","put"); + phd=Concatobj([[O,X,A,Y],[X,A,M,E],[A,Y,N,M],[Y,N,G,Z,O], + [O,Z,F,E,X],[Z,F,G],[E,M,N,G,F]]); + VertexEdgeFace("1",phd,["Edg=nogeo"]); + Nohiddenbyfaces("1","phf3d1"); +\end{verbatim} +Cinderellaの描画面はつぎのようになる。点E,F,Gをドラッグして,適当な位置の断面にする。ただし,M,Nは辺上にあることが条件である。 + +\vspace{\baselineskip} +\includegraphics[bb=0 0 713.04 327.02 , width=12cm]{Fig/IntersectsgpL0.pdf} + できた図は下図左。これに,次のスクリプトを追加すれば,断面上方の立方体の各辺も点線で描かれる。(下図右) \begin{verbatim} - Spaceline([E,B,F],["do"]); - Spaceline([B,C,M],["do"]); - Spaceline([C,D,N],["do"]); - Spaceline([D,G],["do"]); + Spaceline("1",[E,B,F],["do"]); + Spaceline("2",[B,C,M],["do"]); + Spaceline("3",[C,D,N],["do"]); + Spaceline("4",[D,G],["do"]); \end{verbatim} -\input{Fig3d/IntersectsgpL1} \input{Fig3d/IntersectsgpL2} +\begin{center} \input{Fig/IntersectsgpL1} \input{Fig/IntersectsgpL2} \end{center} -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} \hypertarget{invparapt}{} -\item[関数] Invparapt(座標,PD) -\item[機能] 描画面上の座標に対応する曲線上の点の座標を返す -\item[説明] Cinderellaの描画面上の座標を与えて,それに対応する曲線上の3次元座標を返す。 +\item[関数] Invparapt(座標,PD) +\item[機能] 描画面上の座標に対応する曲線上の点の座標を返す +\item[説明] Cinderellaの描画面上の座標を与えて,それに対応する曲線上の3次元座標を返す。 \\ -空間内の曲線を作図すると,曲線の空間内のプロットデータとともに,描画面上に描くためのプロットデータも作られる。これを利用すると,描画面上の位置から曲線上の座標を求めることができる。\\ - \\ -【例】螺旋と線分を描いたとき,描画面上での交点(空間内の交点ではない)に対応する螺旋上の点の座標を求め部分曲線を描く。\\ +空間内の曲線を作図すると,曲線の空間内のプロットデータとともに,描画面上に描くためのプロットデータも作られる。これを利用すると,描画面上の位置から曲線上の座標を求めることができる。 + +\vspace{\baselineskip} +【例】螺旋と線分を描いたとき,描画面上での交点(空間内の交点ではない)に対応する螺旋上の点の座標を求め部分曲線を描く。 + \begin{verbatim} - Spaceline("1",[[-1,-1,-1],[1,2,3]]); - Spacecurve("1","[2*cos(t),2*sin(t),0.2*t]","t=[0,4*pi]",["do"]); - tmp=Intersectcrvs("sl2d1","sc2d1"); - p1=Invparapt(tmp_1,"sc3d1"); - p2=Invparapt(tmp_2,"sc3d1"); - Partcrv3d("1",p1,p2,"sc3d1"); + Spaceline("1",[[-1,-1,-1],[1,2,3]]); + Spacecurve("1","[2*cos(t),2*sin(t),0.2*t]","t=[0,4*pi]",["do"]); + tmp=Intersectcrvs("sl2d1","sc2d1"); + p1=Invparapt(tmp_1,"sc3d1"); + p2=Invparapt(tmp_2,"sc3d1"); + Partcrv3d("1",p1,p2,"sc3d1"); \end{verbatim} - \input{Fig3d/invparapt}\\ -ここで,sl2d1,sc2d1 は線分と螺旋の描画面上での(平面の)プロットデータである。Intersectcrvs() で平面上の交点の座標(複数あるのでリストが返る)を求め,Invparapt() で対応する螺旋上の点の座標を求めて部分曲線を描いている。実際に交わる点での部分曲線ではないことに注意。\\ - \\ + \begin{center} \input{Fig/invparapt} \end{center} + +ここで,sl2d1,sc2d1 は線分と螺旋の描画面上での(平面の)プロットデータである。Intersectcrvs() で平面上の交点の座標(複数あるのでリストが返る)を求め,Invparapt() で対応する螺旋上の点の座標を求めて部分曲線を描いている。実際に交わる点での部分曲線ではないことに注意。 +\vspace{\baselineskip} \hypertarget{mkbezierptcrv3d}{} -\item[関数] Mkbezierptcrv3d(点リスト) -\item[機能] 制御点を自動的にとる空間ベジェ曲線 -\item[説明] リストで与えた点に対し,制御点を自動的に生成してベジェ曲線を描く。\\ - 制御点は,2つの点に対して,その点を端点とする線分上に2つ作られる。これを適宜移動して任意の曲線にすることができる。\hyperlink{bezier3d}{空間ベジェ曲線 Bezier3d()} を参照のこと。\\ - \\ +\item[関数] Mkbezierptcrv3d(点リスト) +\item[機能] 制御点を自動的にとる空間ベジェ曲線 +\item[説明] リストで与えた点に対し,制御点を自動的に生成してベジェ曲線を描く。 + + 制御点は,2つの点に対して,その点を端点とする線分上に2つ作られる。これを適宜移動して任意の曲線にすることができる。\hyperlink{bezier3d}{空間ベジェ曲線 Bezier3d()} を参照のこと。 + +\vspace{\baselineskip} 【例】\verb|Mkbezierptcrv3d(["A","B","C","D"]);|\\ - 線分AB上に2点a1p,a2p,線分BC上に2点a2p,a2q,線分CD上に2点a3p,a3qができる。\\ + 線分AB上に2点a1p,a2p,線分BC上に2点a2p,a2q,線分CD上に2点a3p,a3qができる。 + -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} \hypertarget{nohiddenbyfaces}{} -\item[関数] Nohiddenbyfaces(name,PD1,PD2,option1,option2) -\item[機能] 面に対し曲線を陰線処理する -\item[説明] PD2で与えられた面に対し,曲線PD1の面に隠れている部分を陰線処理する。\\ -引数PD1を省略するとすべての曲線が対象となる。陰線処理された線は初期設定では点線で表される。この線種はoption2で変更できる。たとえば,["da"] とすると破線になる。option1は曲線全体のoptionであるので,option2 だけを指定する場合は,option1 として空リスト[ ] が必要である。\\ - \\ +\item[関数] Nohiddenbyfaces(name,PD1,PD2,option1,option2) +\item[機能] 面に対し曲線を陰線処理する +\item[説明] PD2で与えられた面に対し,曲線PD1の面に隠れている部分を陰線処理する。 + +引数PD1を省略するとすべての曲線が対象となる。陰線処理された線は初期設定では点線で表される。この線種はoption2で変更できる。たとえば,["da"] とすると破線になる。option1は曲線全体のoptionであるので,option2 だけを指定する場合は,option1 として空リスト[ ] が必要である。 +option2では,"Eps=" で,陰線処理時の許容限界を設定できる。陰線処理がうまくいかないときは,この値を \verb|Eps=10^(-4)| のように変えてみるとよい。初期設定は \verb|Eps=10^(-2)|。 + +\vspace{\baselineskip} 【例】座標平面上に正四面体を描き,各軸と正四面体の辺を陰線処理する。(下図左) \begin{verbatim} Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,4]"); Putpoint3d("A",2*[-1,-1/sqrt(3),0],"fix"); Putpoint3d("B",2*[1,-1/sqrt(3),0],"fix"); Putpoint3d("C",2*[0,sqrt(3)-1/sqrt(3),0],"fix"); -Putpoint3d("D",2*[0,0,sqrt(3)],"fix"); +Putpoint3d("D",2*[0,0,2*sqrt(6)/3],"fix"); phd=Concatobj([[A,B,C],[A,B,D],[A,C,D],[B,C,D]]); VertexEdgeFace("1",phd,["Edg=nogeo"]); Nohiddenbyfaces("1","phf3d1"); \end{verbatim} - \verb|VertexEdgeFace("1",phd,["Edg=nogeo"]);| によって,辺,頂点,面のプロットデータが作られる。\verb|phf3d1| は,面のプロットデータである。\\ - ここで,\verb|Nohiddenbyfaces("1","phe3d1","phf3d1",["dr,2"],["da"]); | とすると,座標軸は陰線処理されず,正四面体の辺(\verb|phe3d1|)だけが陰線処理されて破線で描かれる。四面体は太く描かれる。(下図右)\\ - \\ - \input{Fig3d/nohiddenbyfaces1} \input{Fig3d/nohiddenbyfaces2}\\ -同様に,\\ - \verb|Nohiddenbyfaces("1","ax3d","phf3d1",[],["da"]);|\\ -とすれば,座標軸だけが陰線処理されて破線で描かれる。\\ -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} + \verb|VertexEdgeFace("1",phd,["Edg=nogeo"]);| によって,辺,頂点,面のプロットデータが作られる。\verb|phf3d1| は,面のプロットデータである。 + +ここで,\verb|Nohiddenbyfaces("1","phe3d1","phf3d1",["dr,2"],["da"]); | とすると,座標軸は陰線処理されず,正四面体の辺(\verb|phe3d1|)だけが陰線処理されて破線で描かれる。四面体は太く描かれる。(下図右) + +\vspace{\baselineskip} + \begin{center} \input{Fig/nohiddenbyfaces1} \input{Fig/nohiddenbyfaces2} \end{center} +同様に, + + \verb|Nohiddenbyfaces("1","ax3d","phf3d1",[],["da"]);| + +とすれば,座標軸だけが陰線処理されて破線で描かれる。 +%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +\vspace{\baselineskip} \hypertarget{parapt}{} -\item[関数] Parapt(座標) -\item[機能] 点の投影面での座標 -\item[説明] 引数の空間座標に対応するCinderellaの描画面の座標を返す。\\ - \\ -【例】\verb|Parapt([2,1,5]);| により,点(2,1,5) が表示されている描画面の座標,たとえば [-0.52,3.27] が返される。\\ -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} +\item[関数] Parapt(座標) +\item[機能] 点の投影面での座標 +\item[説明] 引数の空間座標に対応するCinderellaの描画面の座標を返す。 -\hypertarget{perpplane}{} -\item[関数] Perpplane(点名,点,ベクトル,option) -\item[機能] 点を通り線分に垂直な平面上に基準点を2つとる -\item[説明] 引数の点名は,作成する2点で "A-B" の形\\ - 第2引数は通る点の名称または座標\\ - 第3引数は法線ベクトル\\ - optionは "put" で,2つの幾何点を作図する。optionがない場合は幾何点は作らず,無名の点のみを表示する。put以外の文字列を書いたときは無効な命令とし,何も作成されない。\\ - 記述例を示すと\\ - \verb|Perpplane("A-B","P",[1,1,1],"put");|\\ - 点Pを通り,法線ベクトル(1,1,1)に垂直な平面上に点A,Bをとる。\\ - \verb|Perpplane("A-B","P",P3d-O3d);|\\ - 点Pを通り,線分OPに垂直な平面上に点A,Bをとる。\\ - これらにおいて,PAとPBは垂直で,PA=PB=1 となる。\\ - \\ -【例】ベクトル $\vec{p}=(1,1,1)$ に垂直で点$(1,1,1)$を通る平面を描く。 -\begin{verbatim} - Putaxes3d(2); - Putpoint3d(["P",[1,1,1]],"fix"); - Ptseg3data(); - Perpplane("E-F","P",P3d-O3d,"put"); - vec1=2*(E3d-P3d); - vec2=2*(F3d-P3d); - Putpoint3d(["A",P3d+vec1+vec2],"fix"); - Putpoint3d(["B",P3d+vec1-vec2],"fix"); - Putpoint3d(["C",P3d-vec1-vec2],"fix"); - Putpoint3d(["D",P3d-vec1+vec2],"fix"); - Spaceline([A,B,C,D,A]); - Letter([P,"w","P",A,"ne","A",B,"e","B",C,"ws","C",D,"nw","D",]); - Skeletonparadata("1"); -\end{verbatim} - \input{Fig3d/perpplane} -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} - \\ +\vspace{\baselineskip} +【例】\verb|Parapt([2,1,5]);| により,点(2,1,5) が表示されている描画面の座標,たとえば [-0.52,3.27] が返される。 +%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -\hypertarget{perppt}{} -\item[関数] Perppt(点名,点,点リスト,option) -\item[機能] 平面に下ろした垂線の足を求める -\item[説明] 第2引数の点から,第3引数の点リストで決まる平面に下した垂線の足を,第1引数の名前の点とする。\\ -オプションは次の通り。デフォルトは "draw"\\ - draw:点を打つ。幾何点は作らない\\ - put :幾何点を作る\\ - none:計算だけ行い,点は作図しない。\\ - \\ -【例】原点から点ABCを通る平面に下した垂線の足Hの座標を求める。\\ - \verb|Perppt("H","O","A-B-C","none");| 表示はされない。\\ - \verb|Perppt("N","O","A-B-C");| Hの位置に緑色の点が表示される。\\ - \verb|Perppt("N","O","A-B-C","put");| 幾何点Hが作図される。\\ - いずれの場合も,Hの座標は変数H3d に代入される\\ - \\ -作図例 -\begin{verbatim} - Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,4]"); - Putpoint3d("O",[0,0,0],"fix"); - Putpoint3d("A",[3,0,0],"fix"); - Putpoint3d("B",[0,3,0],"fix"); - Putpoint3d("C",[0,0,3],"fix"); - Perppt("H","O","A-B-C","put"); - Spaceline([A,B,C,A]); - Spaceline([O,H]); - Letter([A,"nw","A",B,"ne","B",C,"ne","C",O,"nw","O",H,"ne","H"]); -\end{verbatim} - \\ - \input{Fig3d/perppt} - \\ +\vspace{\baselineskip} +\hypertarget{perpplane}{} +\item[関数] Perpplane(点名,点,ベクトル,option) +\item[機能] 点を通り線分に垂直な平面上に基準点を2つとる +\item[説明] 引数の点名は,作成する2点で "A-B" の形 -\hypertarget{partcrv3d}{} -\item[関数] Partcrv3d(name,始点,終点,PD) -\item[機能] 部分曲線のプロットデータを作成する -\item[説明] 曲線PDにおいて,始点から終点までのプロットデータを作成する。\\ -始点と終点は,プロットデータの番号もしくは曲線上にとった点の識別名で示す。\\ - -【例】螺旋を描き,CからDまでの部分を太くする。PutonCurve3d() で螺旋上に点C,Dをとり,ドラッグして適当な位置に移動する。 -\begin{verbatim} - Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,4]"); - Spacecurve("1","[2*cos(t),2*sin(t),0.2*t]","t=[0,4*pi]",["Num=100"]); - PutonCurve3d("C","sc3d1"); - PutonCurve3d("D","sc3d1"); - Partcrv3d("1",C,D,"sc3d1",["dr,3"]); - Letter([C,"n2","C",D,"n2","D"]); -\end{verbatim} - ここで,\verb|"sc3d1"| は,螺旋のプロットデータ,\verb|"part3d1"| は,部分曲線のプロットデータである。\\ - \input{Fig3d/partcrv3d1}\\ - \\ -【例】稲妻状の螺旋を点線で描き,その一部を実線にする。位置はプロットデータの番号で示す。小数にすると曲線を分割している線分の途中の位置になる。 -\begin{verbatim} -Spacecurve("1","[2*cos(t),2*sin(t),0.2*t]","t=[0,4*pi]",["Num=10","do"]); -Partcrv3d("1",3.3,8.5,"sc3d1"); -\end{verbatim} - \input{Fig3d/partcrv3d2}\\ +第2引数は通る点の名称または座標 + +第3引数は法線ベクトル + +optionは "put" で,2つの幾何点を作図する。optionがない場合は幾何点は作らず,無名の点のみを表示する。put以外の文字列を書いたときは無効な命令とし,何も作成されない。 + +記述例を示すと + + \verb|Perpplane("A-B","P",[1,1,1],"put");| + +点Pを通り,法線ベクトル(1,1,1)に垂直な平面上に点A,Bをとる。 -\hypertarget{phparadata}{} -\item[関数] Phparadata(name,name2,options) -\item[機能] 多面体を陰線処理して描く -\item[説明] 多面体を陰線処理して描く。多面体は面データ(頂点リストと面リスト)を与えて,VertexEdgeFace() でプロットデータを作る。このプロットデータに対し,隠れている面(辺)を非表示にして表示する。第1引数は通常のname,第2引数のname2は,VertexEdgeFace() で与えたnameと同じものとする。\\ - optionsは,全体の線種("dr,2"など)と,陰線の線種を"Hidden=線種" で指定できる。デフォルトでは陰線は表示しない。\\ - \\ -【例】小林・鈴木・三谷による多面体データ polyhedrons obj から,s06の切頂二十面体(サッカーボール型)を描く。 -\begin{verbatim} - Setdirectory( Dirhead+"/data/polyhedrons_obj"); - phd=Readobj("s06.obj",["size=3"]); - Setdirectory(Dirwork); - VertexEdgeFace("s06",phd,["Edg=nogeo"]); - Phparadata("1","s06"); -\end{verbatim} - VertexEdgeFace() の name は通常の "1" でもよい。その場合は,\verb|Phparadata("1","1");| とするが,わかりにくいので上のようにした。\\ - 実行すると,Cinderellaの描画面は次のように頂点だけが描かれる。\\ - \\ - \includegraphics[bb=0 0 1452 730 , width=12cm]{Fig3d/phparadata01.png}\\ - \\ -「Texview」「Exekc」ボタンを押すと陰線処理したデータがFhead.txt に書き出され,これを用いてFhead.texが作成される。そのため,Exekcボタンを押してから処理が完了するまでにかなり時間がかかる。(下図左)\\ - なお,もう一度実行すると,こんどは,Fhead.txt ができているために,これを読み込んでCinderellaの画面でも陰線処理された図が描かれる。\\ - 全体の線種と,陰線の線種を\\ - \verb|Phparadata("1","s05",["dr,2","Hidden=do"]);|\\ -で指定したのが下図右である。\\ - - \input{Fig3d/phparadata02} \input{Fig3d/phparadata03}\\ - -【注意】\\ - polyhedrons obj のデータを使って,続けて異なる多面体を描きたい場合は注意が必要である。Readobj()だけを変更して別のデータを読めばよさそうであるが,VertexEdgeFace() のname も(したがって,Phparadata()の第2引数も)書き換えないと,前のデータが残っていてうまくいかない。たとえば,上のコードで切頂十二面体を描いた後,正八面体(r02)を描こうとするならば, -\begin{verbatim} - Setdirectory( Dirhead+"/data/polyhedrons_obj"); - phd=Readobj("r02.obj",["size=3"]); - Setdirectory(Dirwork); - VertexEdgeFace("2",phd,["Edg=nogeo"]); - Phparadata("1","2"); -\end{verbatim} - のようにする。\\ - -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} + \verb|Perpplane("A-B","P",P3d-O3d);| + + 点Pを通り,線分OPに垂直な平面上に点A,Bをとる。 + これらにおいて,PAとPBは垂直で,PA=PB=1 となる。 + +\vspace{\baselineskip} +【例】ベクトル $\vec{p}=(1,1,1)$ に垂直で点$(1,1,1)$を通る平面ABCDを描く。 -\hypertarget{projcoordpara}{} -\item[関数] Projcoordpara(座標) -\item[機能] 投影座標を求める -\item[説明] 空間座標を投影した座標を求める。\\ - 戻り値の第1,第2要素はCinderellaの描画面のx,y座標。第3要素はxy平面に垂直なzの座標で.投影面からの(符号付)距離を表す。\\ - \\ -【例】\verb|Projcoordpara([3,1,2]);|\\ - 戻り値は [-0.65,1.7,3.27] となる。\\ + 点A,B,C,Dは作図ツールで適当に取っておく。正確な位置はスクリプトで決める。 +\begin{layer}{120}{0} +\putnotese{80}{20}{ \input{Fig/perpplane}} +\end{layer} -\hypertarget{putaxes3d}{} -\item[関数] Putaxes3d([x,y,z]) -\item[機能] 軸上に幾何点を作る。 -\item[説明] 引数のリスト [x,y,z] に対し,点X(x,0,0) ,Y(0,y,0) , Z(0,0,z) および 原点Oを主画面上にとり,副画面上に対応する点Xz,Yz,Zz,Oz を作る。すでに同じ名称の点がある場合は,指定された位置に移動する。\\ - 引数は,実数にすることもでき,Putaxes3d(a) は,Putaxes3d([a,a,a]) と同じになる。\\ -【例】Putaxes3d(5); 原点と,$x(5,0,0),y(0,5,0),z(0,0,5)$ を作る。\\ - Putaxes3d([1,2,3]); 原点と,$x(1,0,0),y(0,2,0),z(0,0,3)$ を作る。\\ +\begin{verbatim} + Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,4]"); + Putpoint3d(["O",[0,0,0]],"fix"); + Putpoint3d(["P",[1,1,1]],"fix"); + Perpplane("E-F","P",P3d-O3d,"put"); + vec1=2*(E3d-P3d); + vec2=2*(F3d-P3d); + Putpoint3d(["A",P3d+vec1+vec2],"fix"); + Putpoint3d(["B",P3d+vec1-vec2],"fix"); + Putpoint3d(["C",P3d-vec1-vec2],"fix"); + Putpoint3d(["D",P3d-vec1+vec2],"fix"); + Spaceline("1",[A,B,C,D,A]); + Arrowdata([O,P],["dr,2"]); + Letter([P,"w","P",A,"ne","A",B,"e","B",C,"ws","C",D,"nw","D",]); + Skeletonparadata("1"); +\end{verbatim} -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} -\hypertarget{putonCurve3d}{} -\item[関数] PutonCurve3d(点名,PD) -\item[機能] 空間曲線上に点をとる -\item[説明] プロットデータPDの曲線上に,点名の点をとる。\\ - とった点は固定点ではなく,曲線上にインシデントとなる。したがって,ドラッグして曲線上を動かすことができる。例は \hyperlink{partcrv3d}{Partcrv3d()} を参照のこと。\\ - \\ +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +\vspace{\baselineskip} -\hypertarget{putonseg3d}{} -\item[関数] Putonseg3d(点名,点1,点2) -\item[機能] 線分上に点を取る -\item[説明] 点1と点2の中点に,指定された名前の点を取る。点1と点2が線分として結ばれていなくてもよい。とった点は線分にインシデントとなる(線分が描かれていなくても)。点1と点2はリストにすることもできる。\\ - \\ -【例】AとBの中点に点Cをとる。つぎのいずれでもよい。\\ - \verb|Putonseg3d("C",A,B);|\\ - \verb|Putonseg3d("C",[A,B]);|\\ - \\ +\hypertarget{perppt}{} +\item[関数] Perppt(点名,点,点リスト,option) +\item[機能] 平面に下ろした垂線の足を求める +\item[説明] 第2引数の点から,第3引数の点リストで決まる平面に下した垂線の足を,第1引数の名前の点とする。 -\hypertarget{putpoint3d}{} -\item[関数] Putpoint3d(リスト,option) -\item[機能] 空間に幾何点を作図する -\item[説明] 点の名称と座標を与えて点を作図する。複数の点を一度に作図できる。\\ - optionは,"fix" または "free" (デフォルト)。\\ - "fix" をつけると,固定点(ドラッグで移動できない点)とする。同じ名称の点がすでに存在する場合は,指定した位置に移動して固定点とする。\\ - "free" をつけると,自由点(ドラッグで移動できる)とする。同じ名称の点がすでに存在する場合はなにもしない。\\ - \\ -【例】いくつか記述例を示す。\\ - \verb|Putpoint3d(["A",[2,1,3]]);|\\ - \verb|Putpoint3d(["A",[1,1,1],"C",[1,0,1]],"fix");|\\ - \verb|Putpoint3d(["A",[2,1,3]],"free");|\\ - \\ - なお,この関数は幾何点を作るものであり,TeXには出力されない。TeXに点を出力するには,\hyperlink{pointdata}{Pointdata()} または \hyperlink{drwpt}{Drawpoint()}を併用する。\\ - 空間における点の座標は,点名に"3d"を付加した名前の変数に代入される。たとえば,点Aの座標はA3dである。これにより,点の座標を取得できる。 - -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} +オプションは次の通り。 初期設定は "draw" -\hypertarget{readobj}{} -\item[関数] Readobj(ファイル名) -\item[機能] objファイルを読み込む. -\item[説明] 小林・鈴木・三谷による多面体データ polyhedrons\_obj を読み込む。\\ -オプションは ["size=n"] で,n倍したデータにする。負の数にすると上下が反転される。\\ -データはKeTCindyのdataフォルダの中にある。したがって,次のようなスクリプトを書く。読み込むのは一度だけなので, Draw スロットではなくInitialization スロットに置けばよいが,コードの可読性を高めるには Draw スロットでもよい。 -\begin{verbatim} - Setdirectory( Dirhead+"/data/polyhedrons_obj"); - polydt=Readobj("r02.obj"); - Setdirectory(Dirwork); -\end{verbatim} -これで,r02.obj データが,変数 polydt に代入される。\\ -この多面体データは,頂点リストと面リストからなっているが,頂点リストは座標のリストなので,読み込んで表示するときには,点の名称を v1,v2,・・・ とする。\\ -読み込んだあとの使い方を含めて例を示す。\\ +draw:点を打つ。幾何点は作らない -【例】正八面体を描く -\begin{verbatim} - Setdirectory( Dirhead+"/data/polyhedrons_obj"); - polydt=Readobj("r02.obj",["size=2"]); - Setdirectory(Dirwork); - VertexEdgeFace("1",polydt,["Edg=nogeo"]); - Nohiddenbyfaces("1","phf3d1"); -\end{verbatim} - \input{Fig3d/readobj} +put :幾何点を作る -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} +none:計算だけ行い,点は作図しない。 -\hypertarget{reflectpoint3d}{} -\item[関数] Reflectpoint3d(座標,リスト) -\item[機能] 点の鏡映点を求める -\item[説明] 第2引数のタイプにより,点に関する鏡映,直線に関する鏡映,面に関する鏡映のそれぞれの点の座標を返す。\\ - \\ -【例】点A,B,C,Dを空間にとり,点Aの鏡映点の座標を求める。\\ - 点Bに関する鏡映点 \verb|Reflectpoint3d(A3d,[B3d]);|\\ - 直線BCに関する鏡映点 \verb|Reflectpoint3d(A3d,[B3d,C3d]);|\\ - 平面BCDに関する鏡映点 \verb|Reflectpoint3d(A3d,[B3d,C3d,D3d]);|\\ - -\hypertarget{rotate3pt}{} -\item[関数] Rotate3pt(座標,vec,角度,中心点) -\item[機能] 点を回転する -\item[説明] 第1引数の座標の点を回転する。vecは回転軸の方向ベクトル。中心点は方向ベクトルの始点。第4引数を省略した場合は原点とする。\\ - \\ -【例】点Aを(0,-1,0) に置いたときの記述例と結果(戻り値)\\ - \verb|Rotate3pt(A3d,[0,0,1],pi/2)|; 戻り値は [1,0,0]\\ - \verb|Rotate3pt(A3d,[0,0,1],pi/2,[1,1,1]);| 戻り値は[3,0,0]\\ - \\ +\vspace{\baselineskip} +【例】原点から点ABCを通る平面に下した垂線の足Hの座標を求める。 -\hypertarget{rotatedata3d}{} -\item[関数] Rotatedata3d(name,PDリスト,vec,角度,options) -\item[機能] プロットデータを回転 -\item[説明] プロットデータを,原点を始点とするベクトルvec 周りに回転する。複数のプロットデータをまとめて回転することができる。\\ -options として,中心点(vecの始点),線種を指定することができる。\\ - \\ -【例】コード例と結果を示す。 + \verb|Perppt("H","O","A-B-C","none");| 表示はされない。 + + \verb|Perppt("H","O","A-B-C");| Hの位置に緑色の点が表示される。 + + \verb|Perppt("H","O","A-B-C","put");| 幾何点Hが作図される。 + + いずれの場合も,Hの座標は変数H3d に代入される + +\vspace{\baselineskip} +作図例 \begin{verbatim} - Xyzax3data("","x=[-5,4]","y=[-5,5]","z=[-5,4]",["a","O"]); - Putpoint3d(["A",[0,-2,0],"B",[2,-2,0],"C",[1,-2,2],"D",[1,-2,3]],"fix"); - Spaceline("1",[A,B,C,A]); - Spaceline([C,D]); - Rotatedata3d("1",["sl3d1","CD3d"],[0,0,1],pi/2,["dr,2"]); - Letter([A,"s","A",B,"w","B",C,"ne","C",D,"ne","D"]); + Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,4]"); + Putpoint3d("O",[0,0,0],"fix"); + Putpoint3d("A",[3,0,0],"fix"); + Putpoint3d("B",[0,3,0],"fix"); + Putpoint3d("C",[0,0,3],"fix"); + Perppt("H","O","A-B-C","put"); + Spaceline("1",[A,B,C,A]); + Spaceline("2",[O,H]); + Letter([A,"nw","A",B,"ne","B",C,"ne","C",O,"nw","O",H,"ne","H"]); \end{verbatim} -これを\\ - \verb|Rotatedata3d("1",["sl3d1","CD3d"],[0,0,1],pi/2,[[1,0,0],"dr,2"]);|\\ -とした場合が右図である。\\ - \input{Fig3d/rotatedata3d01} \input{Fig3d/rotatedata3d02}\\ +\vspace{\baselineskip} +\begin{center} \input{Fig/perppt} \end{center} -\hypertarget{sf3data}{} -\item[関数] Sf3data(name,リスト,options) -\item[機能] 陰線処理なしの曲面をワイヤーフレームモデルで描く -\item[説明] リストは,関数式と定義域,境界指定をそれぞれ文字列にしたもののリスト。\\ -optionsは,解像度(各変数に対応する分割数)とメッシュの密度,境界指定。\\ -解像度は,"Num=[a,b]" で指定。初期値はa,bとも25\\ -メッシュ密度は,縦横で "Wire=[a,b]" で指定。初期値はa,bとも20\\ -境界指定は"ewsn"で行う。"ewsn" の意味は次のように考える。\\ - 変数が u,v のとき,u,v平面において,$a \leq u \leq b,c \leq v \leq d$ の矩形を考え,\\ - その東西南北(ewsn)の境界を示す。\\ - \input{Fig/ewsn}\\ - \\ -関数式のパターンはつぎの3通り。\\ - \\ -(1) $z=f(x,y)$\\ - 【例】:$z=x^2-y^2$を定義域$x=[-2,2],y=[-2,2]$ で描画する。\\ - \verb|Sf3data("1",["z=x^2-y^2","x=[-2,2]","y=[-2,2]"])|;\\ - \input{Fig3d/saddle1}\\ - 【例】:同じく,解像度をx,yとも10,メッシュの数を縦横とも10にする。\\ - 解像度,メッシュ密度とも下げるので粗い描画となる。\\ - \verb|Sf3data("1",["z=x^2-y^2","x=[-2,2]","y=[-2,2]"],|\\ - \verb|["Num=[10,10]","Wire=[10,10]"]);|\\ - \\ -(2) $z=f(x,y),x=g(R,T),y=h(R,T)$\\ - x,y の媒介変数 r,t は大文字にする。\\ - 【例】:次図左\\ - \verb|fd=["z=4-(x^2+y^2)","x=R*cos(T)","y=R*sin(T)","R=[0,2]","T=[0,2*pi]"];|\\ - \verb|Sf3data("1",fd);|\\ - 【例】:次図右\\ - \verb|fd=["z=sin(sqrt(abs(x^2+y^2)))","x=r*cos(t)","y=r*sin(t)",|\\ - \verb|"r=[0,3]","t=[0,2*pi]"];|\\ - \verb|Sf3data("1",fd);|\\ -\\ - \input{Fig3d/parabola} \input{Fig3d/sf3ddata3}\\ -\\ -(3) $x=f(u,v),y=g(u,v),z=h(u,v),$\\ - この場合,(2)と区別するために,"p" を先頭につけておく。\\ - 【例】球面\\ - \verb|fd=["p","x=2*sin(u)*cos(v)","y=2*sin(u)*sin(v)","z=2*cos(u)",|\\ - \verb|"u=[0,pi]","v=[0,2*pi]"];|\\ - \verb|Sf3data("1",fd);|\\ - - \input{Fig3d/sf3ddata4}\\ +\vspace{\baselineskip} +\hypertarget{partcrv3d}{} +\item[関数] Partcrv3d(name,始点,終点,PD) +\item[機能] 部分曲線のプロットデータを作成する +\item[説明] 曲線PDにおいて,始点から終点までのプロットデータを作成する。 -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} +始点と終点は,プロットデータの番号もしくは曲線上にとった点の識別名で示す。 -\hypertarget{sfbdparadata}{} -\item[関数] Sfbdparadata(name,式,options1,options2) -\item[機能] 空間曲面の陰線処理 -\item[説明] 曲面について陰線処理を行う。 - 曲面の式はSf3data()の場合と同じ。ただし,(2) と(3)のパターンでは式の最後に境界の指定 ewns を明示する必要がある。(3)では境界の指定を" "(中は半角スペース)とする。省略すると不要な境界線が表示されることがある。境界指定については,Sf3data()の項を参照のこと。\\ -options1は,"Wait=n","r","m",線種。Wait の初期値は30。\\ - "r","m"に関しては,オプションなしまたは,”” のとき\\ - i) データファイルがなければ,新しく作る\\ - ii) データファイルが既にあればそれを読み込む\\ - "m" のとき,強制的にデータファイルを作り直す。\\ - "r" のとき,すでにあるデータファイルを読み込む。\\ -options2は,陰線に関するoptionで,"nodisp" または 線種。"nodisp" にすると陰線は消去されるため,輪郭線だけが描かれることになる(デフォルト)。options2 だけを指定する場合は,options1 を空リストにしてつける必要がある。\\ - - \textcolor{red}{【注意】} この処理はScilabで行うが,非常に時間がかかるため,この関数を実行した状態で画面上のスライダを動かしたりしないこと。何か操作を行う場合は,いったん行頭に//を書いてコメント化してから行う。\\ - -【例】サドル面\\ -陰線を消去して表示(デフォルト)(下図左) -\begin{verbatim} - fd=["x=x^2-y^2","x=[-2,2]","y=[-2,2]"]; - Sfbdparadata("1",fd); -\end{verbatim} -全体を実線で太めにして,陰線を点線で表示(下図右) +\vspace{\baselineskip} +【例】螺旋を描き一部分を太くする。PutonCurve3d() で螺旋上に点C,Dができるので,ドラッグして適当な位置に移動する。 \begin{verbatim} - fd=["x=x^2-y^2","x=[-2,2]","y=[-2,2]"]; - Sfbdparadata("1",fd,["dr,2"],["do"]); + Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,4]"); + Spacecurve("1","[2*cos(t),2*sin(t),0.2*t]","t=[0,4*pi]",["Num=100"]); + PutonCurve3d("C","sc3d1"); + PutonCurve3d("D","sc3d1"); + Partcrv3d("1",C,D,"sc3d1",["dr,3"]); + Letter([C,"n2","C",D,"n2","D"]); \end{verbatim} - \input{Fig3d/sfbdpara01} \input{Fig3d/sfbdpara02} + ここで,\verb|"sc3d1"| は,螺旋,\verb|"part3d1"| は,部分曲線のプロットデータである。 + +\begin{center} \input{Fig/partcrv3d1} \end{center} -【例】放物面\\ -デフォルト(下図左) -\begin{verbatim} - fd=["z=4-(x^2+y^2)","x=R*cos(T)","y=R*sin(T)","R=[0,2]","T=[0,2*pi]","e"]; - Sfbdparadata("1",fd); -\end{verbatim} -陰線を破線で表示(下図右) +\vspace{\baselineskip} +【例】稲妻状の螺旋を点線で描き,その一部を実線にする。位置はプロットデータの番号で示す。小数にすると曲線を分割している線分の途中の位置になる。 \begin{verbatim} - fd=["z=4-(x^2+y^2)","x=R*cos(T)","y=R*sin(T)","R=[0,2]","T=[0,2*pi]","e"]; - Sfbdparadata("1",fd,[],["da"]); +Spacecurve("1","[2*cos(t),2*sin(t),0.2*t]","t=[0,4*pi]",["Num=10","do"]); +Partcrv3d("1",3.3,8.5,"sc3d1"); \end{verbatim} - \input{Fig3d/sfbdpara03} \input{Fig3d/sfbdpara04 -} + \begin{center} \input{Fig/partcrv3d2} \end{center} -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} +\hypertarget{phparadata}{} +\item[関数] Phparadata(name,name2,options) +\item[機能] 多面体を陰線処理して描く +\item[説明] 多面体を陰線処理して描く。多面体は面データ(頂点リストと面リスト)を与えて,VertexEdgeFace() でプロットデータを作る。このプロットデータに対し,隠れている面(辺)を非表示にして表示する。第1引数は通常のname,第2引数のname2は,VertexEdgeFace() で与えたnameと同じものとする。 -\hypertarget{skeletonparadata}{} -\item[関数] Skeletonparadata(name,PDリスト,PDリスト,option) -\item[機能] 陰線処理(スケルトン処理)をおこなう -\item[説明] 描画されている線と軸について陰線処理をおこなう。\\ -第2引数の線(プロットデータ)が,第3引数の線(プロットデータ)によって隠される部分を消去する。第2,第3引数を省略した場合は,すべての線について,互いの陰線処理をおこなう。optionで消去する部分の長さを指定できる。\\ - \\ -【例】螺旋と線分,座標軸の陰線処理\\ -次のように螺旋と線分,座標軸を描いておく。 + optionsは,全体の線種("dr,2"など)と,陰線の線種を"Hidden=線種" で指定できる。 初期設定では陰線は表示しない。 + +\vspace{\baselineskip} +【例】小林・鈴木・三谷による多面体データ \verb|polyhedrons_obj| から,s06の切頂二十面体(サッカーボール型)を描く。 \verb|polyhedrons_obj| は KeTCindyシステムの data ディレクトリにあるので,Setdirectory() でカレントディレクトリを作業ディレクトリと切替ながら出力する。 \begin{verbatim} - Xyzax3data("","x=[-5,5]","y=[-5,4]","z=[-5,3]"); - Putpoint3d(["A",[0,-2,-2]],"fix"); - Putpoint3d(["B",[-1,1,3]],"fix"); - Spaceline([A,B]); - Spacecurve("1","[2*cos(t),2*sin(t),0.2*t]","t=[0,4*pi]",["Num=100"]); -\end{verbatim} -座標軸のプロットデータは ax3d,線分は AB3d,螺旋は sc3d1 である。これに対し,\\ - \verb|Skeletonparadata("1");|\\ - 描画されている線と軸について陰線処理をおこなう。(図左)\\ - \verb|Skeletonparadata("1",[2]);|\\ - 重なった部分の空きを2にする。(図中央)\\ - \verb|Skeletonparadata("1",["AB3d","ax3d"],["sc3d1"]);|\\ - 螺旋によって隠れる部分だけ消去する。(図右)\\ - -\input{Fig3d/skeletonparadata01} \input{Fig3d/skeletonparadata02} - \input{Fig3d/skeletonparadata03} - -このほか,\\ - \verb|Skeletonparadata("1",["AB3d","ax3d"],["sc3d1"],[2]);|\\ - \verb|Skeletonparadata("1",["AB3d"],["ax3d","sc3d1"]);|\\ -も可能である。 + Setdirectory( Dirhead+"/data/polyhedrons_obj"); + phd=Readobj("s06.obj",["size=3"]); + Setdirectory(Dirwork); + VertexEdgeFace("s06",phd,["Edg=nogeo"]); + Phparadata("1","s06"); +\end{verbatim} + VertexEdgeFace() の name は通常の "1" でもよい。その場合は,\verb|Phparadata("1","1");| とするが,わかりにくいので上のようにした。 + +実行すると,Cinderellaの描画面は次のように頂点だけが描かれる。 -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} +\vspace{\baselineskip} +\begin{center} + \includegraphics[bb=0 0 726.04 365.02 , width=10cm]{Fig/phparadata01.pdf} +\end{center} + +\vspace{\baselineskip} +全体の線種と,陰線の線種を + +\verb|Phparadata("1","s06",["dr,2","Hidden=do"]);| -\hypertarget{skeletondatacindy}{} -\item[関数] Skeletondatacindy(name,PDリスト,PDリスト,option) -\item[機能] 陰線処理(スケルトン処理)をCindyscriptでおこなう -\item[説明] 描画されている線と軸について陰線処理をおこなう。\\ - Scilabを呼ばず,Cindyscriptだけで行うので,多面体などでインタラクティブに図を動かすことができる。ただし,曲線では処理が遅くなる。\\ +で指定したのが下図右である。 + \begin{center} \input{Fig/phparadata02} \input{Fig/phparadata03} \end{center} -\hypertarget{spacecurve}{} -\item[関数] Spacecurve(name,式,定義域,options) -\item[機能] 空間曲線を描く -\item[説明] 媒介変数で表された曲線を描く。optionは解像度 Num\\ - \\ -【例】螺旋を描く\\ - \verb|Spacecurve("1","[2*cos(t),2*sin(t),0.2*t]","t=[0,4*pi]",["Num=100"]);|\\ - \\ - \input{Fig3d/rasen}\\ +【注意】 -\hypertarget{spaceline}{} -\item[関数] Spaceline(リスト) -\item[機能] 折れ線を描く -\item[説明] 点の名称または座標のリストを与えて折れ線を描く。平面での Listplot() にあたる。\\ -【例】Spaceline("1",[[2,5,1],[4,2,3]]); 指定された2点を結んだ線分を描く。\\ - Spaceline([A,B,C,A]); 作図されている2点A,B,Cを結んだ三角形を描く。\\ - options は線種(dr,da,do)\\ - \\ - -\hypertarget{translatedata3d}{} -\item[関数] Translatedata3d(name,PD,平行移動量) -\item[機能] 空間プロットデータを平行移動 -\item[説明] PDで表される図形を,平行移動する。\\ - \\ -【例】曲線 sc3d1 をy軸方向に2だけ平行移動する。\\ - \verb|Translatedata3d("1",["sc3d1"],[0,2,0]);|\\ - 結果として,もとの曲線と平行移動した曲線の2つが描かれる。\\ - \\ -【例】多面体の平行移動\\ - VertexEdgeFace() で描いた多角形はこの関数では平行移動できないので,面データを直接操作して平行移動を行う。\\ - たとえば,小林・鈴木・三谷による多面体データ polyhedrons obj を用いて正八面体を描く場合,次のようにする。$y$軸方向に2だけ平行移動する場合である。\\ + polyhedrons obj のデータを使って,続けて異なる多面体を描きたい場合は注意が必要である。Readobj()だけを変更して別のデータを読めばよさそうであるが,VertexEdgeFace() のname も(したがって,Phparadata()の第2引数も)書き換えないと,前のデータが残っていてうまくいかない。たとえば,上のコードで切頂二十面体を描いた後,正八面体(r02)を描こうとするならば, \begin{verbatim} - Setdirectory( Dirhead+"/data/polyhedrons_obj"); - phd=Readobj("r02.obj",["size=2"]); - Setdirectory(Dirwork); - dn=length(phd_1); - repeat(dn,s,phd_1_s=phd_1_s+[0,2,0]); - VertexEdgeFace("1",phd,["Edg=nogeo"]); + Setdirectory( Dirhead+"/data/polyhedrons_obj"); + phd=Readobj("r02.obj",["size=3"]); + Setdirectory(Dirwork); + VertexEdgeFace("2",phd,["Edg=nogeo"]); + Phparadata("1","2"); \end{verbatim} - \input{Fig3d/translate01} + のようにする。 + -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -\hypertarget{translatept3d}{} -\item[関数] Translatept3d(座標,平行移動量) -\item[機能] 空間点を平行移動 -\item[説明] 点を平行移動する。\\ - \\ -【例】点A(1,0,0) を(-1,1,1)だけ平行移動した点をBとする。点Aの空間座標は A3d で表される。 -\begin{verbatim} - Putpoint3d(["A",[1,0,0]],"fix"); - pt=Translatept3d(A3d,[-1,1,1]); - Putpoint3d(["B",pt],"fix"); -\end{verbatim} - \\ -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} +\hypertarget{pointdata3d}{} +\item[関数] Pointdata3d(名前,点リスト,options) +\item[機能] 点の3Dデータと2Dデータを作成し,画面と\TeX に出力する。 +\item[説明] optionsは\hyperlink{pointdata}{Pointdata()}と同様。 +\vspace{\baselineskip} -\hypertarget{vertexedgeface}{} -\item[関数] VertexEdgeFace(name,面データ,options) -\item[機能] 多面体の面データを用いて多面体を描く -\item[説明] 面データは,頂点リストと,面リストからなる。面リストは,各面を構成する頂点を,外側から見て反時計回り(左回り)に並べたリストである。\\ -たとえば,四面体ABCDの面データは,[[A,B,C,D],[[1,2,3],[1,2,4],[1,3,4],[2,3,4]]] となる。\\ -4点A,B,C,Dをとっておき,このリストを引数に与えると,四面体の辺が描かれる。\\ -このとき,option がなければ,Cinderellaの幾何要素として辺が描かれるが,それだけではTeXには書き出されないので注意が必要である。(変数未定義のエラーになる) TeXに書き出すには,optionとして ["Edg=nogeo"] をつける。このときは各辺は幾何要素にならない。\\ -また,"Pt=free" optionをつけると,頂点は自由点となり,マウスドラッグで動かすことができる。\\ -生成されるプロットデータは,\\ -phv3d:頂点のリスト\\ -phe3d:辺のリスト\\ -phf3d:面リスト\\ -なお,それぞれ末尾にnameが付加される。\\ - \\ -【例】:正四面体を描く +【例】 \begin{verbatim} - Putpoint3d("A",2*[-1,-1/sqrt(3),0],"fix"); - Putpoint3d("B",2*[1,-1/sqrt(3),0],"fix"); - Putpoint3d("C",2*[0,sqrt(3)-1/sqrt(3),0],"fix"); - Putpoint3d("D",2*[0,0,sqrt(3)],"fix"); - phd=Concatobj([[A,B,C],[A,B,D],[A,C,D],[B,C,D]]); - VertexEdgeFace("1",phd,["Edg=nogeo"]); + Pointdata3d("1",[[1,1,1],[0,1,0]],["Size=2","Color=red"]); \end{verbatim} - \input{Fig3d/vertex01} +\vspace{\baselineskip} -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -\hypertarget{wireparadata}{} -\item[関数] Wireparadata(name,PD,式,整数,整数,optons1,options2) -\item[機能] 曲面のワイヤフレームを陰線処理して描く -\item[説明] PDは,第3引数の式で描いたワイヤフレームモデルのプロットデータ名。第4,第5引数は分割線の数。\\ -options1 には "r","m","Wait=n" が指定できる。Wait の初期値は30。\\ - "r","m"に関しては,オプションなしまたは,”” のとき\\ - i) データファイルがなければ,新しく作る\\ - ii) データファイルが既にあればそれを読み込む\\ - "m" のとき,強制的にデータファイルを作り直す。\\ - "r" のとき,すでにあるデータファイルを読み込む。\\ -optons2 には陰線の表示方法について "nodisp" または線種 がある。デフォルトは"nodisp" 。何も指定しないときは,[""] (空文字)を書いておく。\\ -曲面の陰線処理を行うので,Sfbdparadata() とペアで使う。\\ - \\ - \textcolor{red}{【注意】} \\ - この処理はScilabで行うが,Sfbdparadata() とペアで使うために非常に時間がかかる。コンピュータの性能にもよるが2分以上かかこともある。したがって,この関数を実行した状態で画面上のスライダを動かしたりしないこと。何か操作を行う場合は,いったん行頭に//を書いてコメント化してから行う。球面やトーラスのタイプでは,Texview や Exekc ボタンの反応も鈍くなる。Exekc が動作しない(タイムアウト)場合は,kc.sh(Mac) / kc.bat(Windows)を直接起動すれば TeX の図ができる。\\ - \\ -【例】式のタイプ別に例を示す。\\ - \\ -サドル面:下図左 -\begin{verbatim} - fd=["z=x^2-y^2","x=[-2,2]","y=[-2,2]"]; - Sfbdparadata("1",fd); - Wireparadata("1","sfbd3d1",fd,4,5,[""]); -\end{verbatim} - \\ -回転放物面:下図中央 -\begin{verbatim} - fd=["z=4-(x^2+y^2)","x=r*cos(t)","y=r*sin(t)","r=[0,2]","t=[0,2*pi]","e"]; - Sfbdparadata("1",fd); - Wireparadata("1","sfbd3d1",fd,5,7,[""]); -\end{verbatim} - \\ -球面:下図右\\ - このタイプでは,媒介変数形式の識別のため,先頭に "p" をつけておくとよい。 -\begin{verbatim} - fd=["p","x=2*sin(u)*cos(v)","y=2*sin(u)*sin(v)","z=2*cos(u)","u=[0,pi]", - "v=[0,2*pi]","s"]; - Sfbdparadata("1",fd); - Wireparadata("1","sfbd3d1",fd,12,12,[""]); -\end{verbatim} - \\ -\input{Fig3d/wirepara1} \input{Fig3d/wirepara2} \input{Fig3d/wirepara3}\\ - \\ -【例】球面で座標軸を陰線処理して点線で表す。(次図左) -\begin{verbatim} - fd=["p","x=2*sin(u)*cos(v)","y=2*sin(u)*sin(v)","z=2*cos(u)","u=[0,pi]", - "v=[0,2*pi]","s"]; - Sfbdparadata("1",fd); - Wireparadata("1","sfbd3d1",fd,12,12,[""]); - Crvsfparadata("1","ax3d","sfbd3d1",fd,[],["do"]); -\end{verbatim} -【例】トーラスを描く(次図右) -\begin{verbatim} - fd=["p","x=(2+cos(u))*cos(v)","y=(2+cos(u))*sin(v)","z=sin(u)", - "u=[0,2*pi]","v=[0,2*pi]","s"]; - Sfbdparadata("1",fd); - Wireparadata("1","sfbd3d1",fd,12,12,[""]); -\end{verbatim} - \\ - \input{Fig3d/wirepara4} \input{Fig3d/wirepara5}\\ - -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} - \\ -\hypertarget{xyzax3data}{} -\item[関数] Xyzax3data(name,xの範囲,yの範囲,zの範囲,options) -\item[機能] 座標軸を描く -\item[説明] 描画面に座標軸を描く。nameは空文字列でよい。プロットデータ ax3d が作成される。option は次の2つ。\\ -矢じり:"an":nは数字で矢じりの大きさ。nはなくてもよい。\\ -原点O:"Onesw":neswは微小位置。数字も付けられる。neswをつけない場合の初期値はsw。\\ -【例】デフォルトの座標軸\\ - \verb|Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]");|\\ - 矢じりをつける\\ - \verb|Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]","a");|\\ - 矢じりを大きくする\\ - \verb|Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]",["a2"]);|\\ - 原点のOを表示する。\\ - \verb|Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]",["O"]);|\\ - 原点のOの位置を調整して右上に表示する。やじりもつける。\\ - \verb|Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]",["a","Oe2n2"]);|\\ - -【注意】Putaxes3d() で点を取ると原点に点Oが作成される。この点名Oと表示が重複するのが煩わしい場合は,作図後にこのoptionをつけてから出力するとよい。\\ +\hypertarget{projcoordpara}{} +\item[関数] Projcoordpara(座標) +\item[機能] 投影座標を求める +\item[説明] 空間座標を平面に投影した座標を求める。 +戻り値の第1,第2要素はCinderellaの描画面のx,y座標。第3要素はxy平面に垂直なzの座標で.投影面からの(符号付)距離を表す。 -\hypertarget{xyzcoord}{} -\item[関数] Xyzcoord(P.x,P.y,Pz.y) -\item[機能] 主副画面で決まる点の座標 -\item[説明] Cinderellaの描画面上の点が表す空間座標を求める\\ - 点Pについて,主画面の点Pに対応するのが副画面のPzである。点Pの2次元座標はP.x,P.yで,Pzのy座標はPz.yで表される。これを引数として与えると,点Pの空間座標が返される。\\ - \\ -【例】点Aをドラッグして動かしたとき,Aの座標を求める。\\ - \verb|println(Xyzcoord(A.x,A.y,Az.y));|\\ - により,コンソールに座標が表示される。\\ +\vspace{\baselineskip} +【例】\verb|Projcoordpara([3,1,2]);| -\end{description} -\newpage -% 逆引辞典 ================================== -\section{逆引辞典} + 戻り値は [-0.65,1.7,3.27] のようになる。(視点によって値は異なる) -幾何の作図は,補助線などはCinderellaの作図ツールかCindyscriptを用いて描き,TeXに出力する線をKeTCindyで描くと,効率のよい作図ができる。 -関数のグラフも,Cindyscriptで描くものと,TeXに出力するKeTCindyで描くものを使い分けるとよい。 +\vspace{\baselineskip} +\hypertarget{putaxes3d}{} +\item[関数] Putaxes3d([x,y,z]) +\item[機能] 軸上に幾何点を作る。 +\item[説明] 引数のリスト [x,y,z] に対し,点X(x,0,0) ,Y(0,y,0) , Z(0,0,z) および 原点Oを主画面上にとり,副画面上に対応する点Xz,Yz,Zz,Oz を作る。すでに同じ名称の点がある場合は,指定された位置に移動する。 -以下で,【Cinderella】は,Cinderellaの作図ツールを用いた描画,【Cindyscript】はCindyscriptの関数,【KeTCindy】および【KeTCindy3D】はKeTCindyの関数を示す。\\ +引数は,実数にすることもでき,Putaxes3d(a) は,Putaxes3d([a,a,a]) と同じになる。 + +\vspace{\baselineskip} +【例】Putaxes3d(5); 原点と,$x(5,0,0),y(0,5,0),z(0,0,5)$ を作る。 -\subsection{点の作図} -\subsubsection{点をとる} + Putaxes3d([1,2,3]); 原点と,$x(1,0,0),y(0,2,0),z(0,0,3)$ を作る。 -\begin{tabbing} -12\=34567890123456789\=\kill\\ +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -\>【Cinderella】 \>「点を加える」ツール \includegraphics[bb=0 0 27 21 , width=0.6cm]{Cindytool/single-add.png} を用いる\\ - \>【KeTCindy】 \>Drwpt(点),Drawpoint(点),Pointdata(name,リスト),Putpoint(name,座標),\\ - \>【KeTCindy3D】\>Drawpoint3d(座標),Putpoint3d(リスト),\\ -\end{tabbing} +\vspace{\baselineskip} +\hypertarget{putonCurve3d}{} +\item[関数] PutonCurve3d(点名,PD) +\item[機能] 空間曲線上に点をとる +\item[説明] プロットデータPDの曲線上に,点名の点をとる。 -点をとる関数はいくつかある。Cinderellaの描画面上に単に点を表示するもの,幾何点を作るもの,TeXに出力するためのもの,と用途が異なる。 -Putpoint(),Putpoint3d()は座標を与えて幾何点を作るが,作図ツールの「点を加える」で作図しておいてスクリプトで座標を指定してもよい。 +とった点は固定点ではなく,曲線上にインシデントとなる。したがって,ドラッグして曲線上を動かすことができる。例は \hyperlink{partcrv3d}{Partcrv3d()} を参照のこと。 - \\ -【例】座標(1,1) に点Aをとる。\\ - (方法1) 磁石ツール \includegraphics[bb=0 0 27 21 , width=0.6cm]{Cindytool/snap.png} でスナップモードにしておき,作図ツールで点をとる。\\ - (方法2)KeTCindyの関数で \verb|Putpoint("A,[1,1])| とする。 +\vspace{\baselineskip} +\hypertarget{putonseg3d}{} +\item[関数] Putonseg3d(点名,点1,点2) +\item[機能] 線分上に点を取る +\item[説明] 点1と点2の中点に,指定された名前の点を取る。点1と点2が線分として結ばれていなくてもよい。とった点は線分にインシデントとなる(線分が描かれていなくても)。点1と点2はリストにすることもできる。\\ +\vspace{\baselineskip} +【例】AとBの中点に点Cをとる。つぎのいずれでもよい。 -(方法1)では,この点は自由点となる。固定点にするには,インスペクタで「ピンで留める」にする。また,点名はCinderellaが自動的につけるので,変更するには,点を選択しておき,インスペクタを開いて「要素の情報」で変更する。 + \verb|Putonseg3d("C",A,B);| -[1,1] のような格子点でない場合は,作図ツールで適当な位置に点をとったのち,Cindyscriptで \verb|A.xy=[2,sqrt(3)]| のようにして座標を指定する。 + \verb|Putonseg3d("C",[A,B]);| + +\vspace{\baselineskip} -(方法2)では,この点は固定点となる。自由点とするには \verb|Putpoint("A",[1,1],[A.x,A.y])| とする必要がある。 +\hypertarget{putpoint3d}{} +\item[関数] Putpoint3d(リスト,option) +\item[機能] 空間に幾何点を作図する +\item[説明] 点の名称と座標を与えて点を作図する。複数の点を一度に作図できる。 -これらの方法で点を取ったとき,画面上には点が表示されるがTeXの図には出力されない。TeXの図に出力するには,KeTCindyのDrwpt()または,Drawpoint()を用いる必要がある。\\ +optionは,"fix" または "free" ( 初期設定)。 + +"fix" をつけると,固定点(ドラッグで移動できない点)とする。同じ名称の点がすでに存在する場合は,指定した位置に移動して固定点とする。 - 以下は,それぞれの関数についての比較表である。「描画」は緑色の点で描画するが幾何点は作らない。\\ - \\ - \input{Fig/poiintable} -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} +"free" をつけると,自由点(ドラッグで移動できる)とする。同じ名称の点がすでに存在する場合はなにもしない。 -\subsubsection{点の大きさを変える} +\vspace{\baselineskip} +【例】いくつか記述例を示す。 -\begin{tabbing} -12\=34567890123456\=\kill\\ + \verb|Putpoint3d(["A",[2,1,3]]);| + + \verb|Putpoint3d(["A",[1,1,1],"C",[1,0,1]],"fix");| + + \verb|Putpoint3d(["A",[2,1,3]],"free");| + +\vspace{\baselineskip} + なお,この関数は幾何点を作るものであり,TeXには出力されない。TeXに点を出力するには,\hyperlink{pointdata}{Pointdata()} または \hyperlink{drwpt}{Drawpoint()}を併用する。 + + 空間における点の座標は,点名に"3d"を付加した名前の変数に代入される。たとえば,点Aの座標はA3dである。これにより,点の座標を取得できる。 -\>【Cinderella】 \>インスペクタの「表示方法」を使う\\ -\>【Cindyscript】 \>A.size=n\\ - \>【KeTCindy】 \>Ptsize(n),Setpt(n)\\ -\end{tabbing} +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -インスペクタ,Cindyscriptによる点の大きさの設定は画面上には反映されるが,TeXには書き出されない。逆に,KeTCindyで設定した点の大きさは,Cinderellaの画面上には反映されない。そのことを考慮の上,適宜使い分ける必要がある。画面上の点の大きさと,TeXの図の点の大きさは連動しないので注意が必要である。 +\vspace{\baselineskip} +\hypertarget{readobj}{} +\item[関数] Readobj(ファイル名) +\item[機能] objファイルを読み込む. +\item[説明] 小林・鈴木・三谷による多面体データ \verb|polyhedrons_obj| を読み込む。 -KeTCindyの描画関数を使って点をとるときは,["size=n"]オプションをつけて大きさを設定することもできる。 +オプションは "size=n" で,n倍したデータにする。負の数にすると上下が反転される。 -KeTCindyでは,Drwpt() または Drawpoint() に0オプションをつけることで白抜きの点を描くことができる。ただし,この場合,これよりあとに書かれた線は白で抜いたあとに書かれてしまうので,記述の順番を考慮する必要がある。\\ -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} +データはKeTCindyのdataフォルダの中にある。したがって,次のようなスクリプトを書く。読み込むのは一度だけなので, Draw スロットではなくInitialization スロットに置けばよいが,コードの可読性を高めるには Draw スロットでもよい。 +\begin{verbatim} + Setdirectory( Dirhead+"/data/polyhedrons_obj"); + polydt=Readobj("r02.obj"); + Setdirectory(Dirwork); +\end{verbatim} +これで,r02.obj データが,変数 polydt に代入される。 -\subsubsection{曲線上に点をとる} +この多面体データは,頂点リストと面リストからなっているが,頂点リストは座標のリストなので,読み込んで表示するときには,点の名称を v1,v2,・・・ とする。 -\begin{tabbing} -12\=34567890123456789\=\kill\\ +読み込んだあとの使い方を含めて例を示す。 -\>【Cinderella】 \>「点を加える」ツールを用いる\\ -\>【KeTCindy】 \>PutonCurve(name,PD,初期値)\\ -\>【KeTCindy3d】 \>PutonCurve3d(点名,PD)\\ -\end{tabbing} +\vspace{\baselineskip} +【例】正八面体を描く +\begin{layer}{150}{0} +\putnotese{55}{0}{ \input{Fig/readobj}} +\end{layer} -Cinderellaの作図ツールで描いた曲線上には,「点を加える」ツールで点をとることで,その点は曲線上だけを動かすことができるようになる(インシデント)。作図ツールで描いた曲線でなければこの方法では曲線上に点は取れない。 +\begin{verbatim} -Cindyscriptで描いた曲線の場合,たとえば,関数$f(x)$のグラフ上に点を置くには,A.y=[A.x,f(A.x)] のようにすればよい。(あらかじめ点を作図しておく) + Setdirectory( Dirhead+"/data/polyhedrons_obj"); + polydt=Readobj("r02.obj",["size=2"]); + Setdirectory(Dirwork); + VertexEdgeFace("1",polydt,["Edg=nogeo"]); + Nohiddenbyfaces("1","phf3d1"); +\end{verbatim} -KeTCindyのPutonCurve()を使うと,プロットデータを用いて曲線上に点をとることができる。また, -KeTCindyで直線,線分上に取りたい場合は,PutonLine( ),PutonSeg( )を用いることもできる。\\ -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} - -\subsubsection{交点をとる} -\begin{tabbing} -12\=34567890123456789\=\kill\\ +主なデータは次の通り。 -\>【Cinderella】 \>「2つの曲線の交点を求める」ツール \includegraphics[bb=0 0 27 21 , width=0.6cm]{Cindytool/intersection.png} を用いる\\ - \>【KeTCindy】 \>Intersectcrvs(PD,PD), Crosspoint(name,PD,PD,リスト),\\ - \> \> Putintersect(点名,PD,PD)\\ - \>【KeTCindy3D】 \>Intersectcrvsf(name,PD,式), IntersectsgpL(点名,線分,面,方法)\\ -\end{tabbing} +\vspace{\baselineskip} + \input{Fig/kobayashi} + +この他にn01〜n92まで整面凸多面体がある。 + +Webページは,http://mitani.cs.tsukuba.ac.jp/polyhedron/ -Cinderellaの作図機能で作図した幾何要素の交点はCinderellaの「2つの曲線の交点を求める」ツールを用いるのが簡便であるが,関数のグラフや方程式による曲線の場合は,Cinderellaの作図機能は使えないので,KeTCindyの関数を使うことになる。 -KeTCindyの関数は3通りあるが,intersectcrvs() は2曲線の交点のリストを取得する関数なので,既存の点を交点に持ってきたい場合は +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} + +\hypertarget{reflectdata3d}{} +\item[関数] Reflectdata3d(name , PDlist , list , options) +\item[機能] PDの鏡映を作る +\item[説明] 第3引数のタイプにより,点に関する鏡映,直線に関する鏡映,面に関する鏡映を作る。 + +\vspace{\baselineskip} +【例】点A,B,C,D,Eを空間にとり,三角形ABCの鏡映を作る。 + \begin{verbatim} - tmp=Intersectcrvs(gr1, crAB); - P.xy=tmp_1; +Putpoint3d(["A",[0,-2,0],"B",[2,-2,0],"C",[1,-2,2],"D",[1,0,1], + "E",[1,0,0]],"fix"); +Spaceline("1",[A,B,C,A]); \end{verbatim} -のようにすればよい。 -Crosspoint(),Putintersect()では交点に新たな幾何点を作ることができる。 +で点をとり,三角形を描いておく。 -Intersectcrvsf() は曲線と曲面の交点, IntersectsgpL() は直線と平面の交点を求める。 +点Dに関する鏡映 -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} + \verb| Reflectdata3d("1",["sl3d1"],[D3d],["Color=blue","dr,2"]);| -\subsection{線の作図} -\subsubsection{線分を引く} +\hspace{20mm} \input{Fig/reflectdata3d01} -\begin{tabbing} -12\=34567890123456789\=\kill\\ +直線DEに関する鏡映 -\>【Cinderella】 \>「線分を加える」ツール \includegraphics[bb=0 0 27 21 , width=0.6cm]{Cindytool/segment.png} を用いる \\ -\>【Cindyscript】 \>draw([A,B]) \\ - \>【KeTCindy】 \>Listplot([A,B]) \\ - \>【KeTCindy3D】 \>Spaceline([A,B]) \\ -\end{tabbing} - Cinderellaの描画ツールを使うと,描かれた線分は幾何要素となり,インスペクタでその属性(色・太さなど)を変えることができる。また,点を線分上にインシデントさせることができる。Scilabに出力しない線分を描くときはこれで十分で,スクリプトも簡素になる。\\ - Cindyscript のdraw関数とKeTCindyのListplot関数では,線の色,太さ,線種を指定できる。また,点の識別名ではなく座標を引数にすることもできる。\\ - 推奨するのは,補助線などはCinderellaの描画ツールで描き,最終的に必要な線だけListplot()で出力する方法。\\ -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} + \verb| Reflectdata3d("1",["sl3d1"],[D3d,E3d],["Color=blue","dr,2"]);| +\hspace{20mm} \input{Fig/reflectdata3d02} -\subsubsection{折れ線を描く} +平面BDEに関する鏡映 -\begin{tabbing} -12\=34567890123456789\=\kill\\ +\verb| Reflectdata3d("1",["sl3d1"],[D3d,E3d,B3d],["Color=blue","dr,2"]);| -\>【Cindyscript】 \>connect(点のリスト)\\ -\>【KeTCindy】 \>Listplot(点のリスト)\\ -\>【KeTCindy3D】 \>Spaceline(点のリスト)\\ -\end{tabbing} +\hspace{20mm} \input{Fig/reflectdata3d03} + -Cinderellaの描画ツールで折れ線を描くのはインタラクティブではあるが本数が多くなると現実的ではない。ただ,描かれた線分は幾何要素となり,インスペクタでその属性(色・太さなど)を変えることができる。折れ線全体の属性を変えるには,すべての折れ線を同時に選択する。(Shift+クリック) +\vspace{\baselineskip} +\hypertarget{reflectpoint3d}{} +\item[関数] Reflectpoint3d(座標,リスト) +\item[機能] 点の鏡映点を求める +\item[説明] 第2引数のタイプにより,点に関する鏡映,直線に関する鏡映,面に関する鏡映のそれぞれの点の座標を返す。 -Cindyscript のconnect() と KeTCindyの Listplot() ,Spaceline()では,引数に点のリストを与えれば折れ線が描ける。 +\vspace{\baselineskip} +【例】点A,B,C,Dを空間にとり,点Aの鏡映点の座標を求める。 -節点を明示した折れ線を描くには,Listplot()とDrawpoint()を組み合わせることが考えられるが,あらかじめ点のリストを作っておくのが簡便である。 -\begin{verbatim} - Ptsize(3); - pd=[[1,2],[3,4],[6,2]]; - Pointdata("1",pd); - Listplot("1",pd); -\end{verbatim} +点Bに関する鏡映点 \verb| Reflectpoint3d(A3d,[B3d]);| + +直線BCに関する鏡映点 \verb| Reflectpoint3d(A3d,[B3d,C3d]);| + +平面BCDに関する鏡映点 \verb| Reflectpoint3d(A3d,[B3d,C3d,D3d]);| + + +\vspace{\baselineskip} +\hypertarget{rotatedata3d}{} +\item[関数] Rotatedata3d(name,PDリスト,vec,角度,options) +\item[機能] プロットデータを回転 +\item[説明] プロットデータを,原点を始点とするベクトルvec 周りに回転する。複数のプロットデータをまとめて回転することができる。 -KeTCindy3Dの場合は空間座標で点をTeXに書き出すことができないので,次のように点を作って書き出す。 +options として,中心点(vecの始点),線種を指定することができる。 + +\vspace{\baselineskip} +【例】コード例と結果を示す。 \begin{verbatim} - Putpoint3d(["A",[2,0,0],"B",[2,0,2],"C",[2,2,2]],"fix"); - Spaceline([A,B,C]); - Ptsize(3); - Drawpoint([A,B,C]); + Xyzax3data("","x=[-5,4]","y=[-5,5]","z=[-5,4]",["a","O"]); + Putpoint3d(["A",[0,-2,0],"B",[2,-2,0],"C",[1,-2,2],"D",[1,-2,3]],"fix"); + Spaceline("1",[A,B,C,A]); + Spaceline("2",[C,D]); + Rotatedata3d("1",["sl3d1","CD3d"],[0,0,1],pi/2,["dr,2"]); + Letter([A,"s","A",B,"w","B",C,"ne","C",D,"ne","D"]); \end{verbatim} -節点が多い場合は,空間の点のリストと,投影した点のリストを作って描画する。 +これを + + \verb|Rotatedata3d("1",["sl3d1","CD3d"],[0,0,1],pi/2,[[1,0,0],"dr,2"]);| + +とした場合が右図である。 + + \input{Fig/rotatedata3d01} \hspace{5mm} \input{Fig/rotatedata3d02} + +%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +\vspace{\baselineskip} +\hypertarget{rotatepoint3d}{} +\item[関数] Rotatepoint3d(座標, vec , 角度, [点] ) +\item[機能] 点の位置を回転する +\item[説明] 点をvecの周りに回転する。角度は弧度法で与える。 + +第4引数に点を与えた場合,vecの始点が第4引数の位置になる。デフォルトは原点 + +点Aを,$(0,-1,0)$に置いたときの記述例と戻り値 + +\verb| Putpoint3d("A",[0,-1,0]);| \\ +\verb| Rotatepoint3d(A3d,[0,0,1],pi/2); | // 戻り値は [1,0,0]\\ +\verb| Rotatepoint3d(A3d,[0,0,1],pi/2,[1,1,0]); | // 戻り値は [3,0,0]\\ + +\vspace{\baselineskip} +\hypertarget{scaledata3d}{} +\item[関数] Scaledata3d(name , PDリスト , vec , [中心,options]) +\item[機能] PDを拡大/縮小する。 +\item[説明] 点は空間座標,vec は3次元ベクトルで倍率を表す。 + +中心とoptionsはリストで与える。 + +\vspace{\baselineskip} +【例】三角形と円を拡大/縮小する。 + \begin{verbatim} - pt=[[2,0,0],[2,0,2],[2,2,2],[0,2,2],[0,4,2],[0,4,4]]; - pt2d=apply(pt,[Projcoordpara(#)_1,Projcoordpara(#)_2]); - Spaceline("1",pt); - Ptsize(4); - Drawpoint(pt2d); + Putpoint3d(["A",[0,-2,0],"B",[2,-2,0],"C",[1,-2,2]],"fix"); + Spaceline("1",[A,B,C,A]); + Spacecurve("1","[cos(t)+1,sin(t)+1,1]","t=[0,2*pi]",["Num=100"]); + Scaledata3d("1",["sl3d1","sc3d1"],[2,2,2],[[0,0,0],"dr,2"]); \end{verbatim} - \input{Gfig/oresenex01}\\ -点の名前が必要であれば\\ - \verb|pname=apply(1..6,"P"+text(#));|\\ -のようにして,名前リストを作る。\\ -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} +\hspace{20mm}\input{Fig/scaledata3d} +\vspace{\baselineskip} +\hypertarget{scalepoint3d}{} +\item[関数] Scalepoint3d(点,vec,中心) +\item[機能] 点の位置を拡大/縮小する。 +\item[説明] 点は空間座標,vec は3次元ベクトルで与える。 -\subsubsection{直線を引く} +\vspace{\baselineskip} +【例】コード例と結果を示す。 -\begin{tabbing} -12\=34567890123456789\=\kill\\ - \\ -\>【Cinderella】 \>「直線を加える」ツール \includegraphics[bb=0 0 27 21 , width=0.6cm]{Cindytool/multi-add-line.png} を用いる \\ -\>【Cindyscript】 \>draw(join([1,2],[2,-1]))\\ - \>【KeTCindy】 \>Lineplot([A,B]) \\ -\end{tabbing} - Cinderellaの描画ツールを使うと,描かれた線分は幾何要素となり,インスペクタでその属性(色・太さ・線種など)を変えることができる。また,点を直線上にインシデントさせることができる。Scilabに出力しない直線を描くときはこれで十分で,スクリプトも簡素になる。半直線にしたい場合は,線分を描いて一方の端点を描画領域(SW,NE)の外に出して見かけ上半直線にすればよい。 +\begin{verbatim} + Putpoint3d(["A",[2,-1,2]],"fix"); + pt=Scalepoint3d(A3d,[3,2,4],[1,1,1]); + Putpoint3d(["B",pt],"fix"); +\vspace{\baselineskip} +\end{verbatim} -Cindyscript のdraw関数とKeTCindyのLineplot関数では,線の色,太さ,線種を指定することができる。点の識別名ではなく座標を引数にすることもできる。 +点Bの位置は(4,-3,5)になる。 +\vspace{\baselineskip} +\hypertarget{sf3data}{} +\item[関数] Sf3data(name,リスト,options) +\item[機能] 陰線処理なしの曲面をワイヤーフレームモデルで描く +\item[説明] リストは,関数式と定義域,境界指定をそれぞれ文字列にしたもののリスト。 -TeXへの出力は,Lineplot()に "+" オプションをつけると半直線になる。 +optionsは,解像度(各変数に対応する分割数)とメッシュの密度,境界指定。 -KeTCindy3Dには直線を描く関数はないが,線分の外分点を適当にとって線分として描けば,ほとんど直線として扱うことができる。 -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} +解像度は,"Num=[a,b]" で指定。初期値はa,bとも25 +メッシュ密度は,縦横で "Wire=[a,b]" で指定。初期値はa,bとも20 +境界指定は"ewsn"で行う。"ewsn" の意味は次のように考える。 -\subsubsection{点線や破線を描く} +変数が u,v のとき,u,v平面において,$a \leq u \leq b,c \leq v \leq d$ の矩形を考え, -\begin{tabbing} -12\=34567890123456789\=\kill\\ +その東西南北(ewsn)の境界を示す。 -\>【Cinderella】 \>インスペクタの「特別な表示方法」で線種を変える \\ -\>【Cindyscript】 \>修飾子 dashtype を使う \\ - \>【KeTCindy】 \>do ,da オプションをつける\\ - \>【KeTCindy3D】 \>do ,da オプションをつける\\ -\end{tabbing} - Cinderellaの描画ツールで引いた線分・直線の線種は,その要素を選んで「Ctrl+i」(Macは ⌘+i) で表示されるインスペクタを用いて,「特別な表示方法」で変えることができる。点線,破線だけでなく,一点鎖線もある。\\ - Cindyscriptの draw() で引いた線分・半直線は,修飾子を用いて, draw([A,B],dashtype-$>$2) のようにして描く。\\ - KeTCindyでは,オプションに,["do"] (点線:dotline) ["da"](破線:dashline)をつける。 -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} + \begin{center} \input{Fig/ewsn} \end{center} +\vspace{\baselineskip} +関数式のパターンはつぎの3通り。 +\vspace{\baselineskip} +(1) $z=f(x,y)$ -\subsubsection{線の太さを変える} -\begin{tabbing} -12\=34567890123456\=\kill\\ + 【例】:$z=x^2-y^2$を定義域$x=[-2,2],y=[-2,2]$ で描画する。 + + \verb|Sf3data("1",["z=x^2-y^2","x=[-2,2]","y=[-2,2]"])|; + + \begin{center} \input{Fig/saddle1} \end{center} -\>【Cinderella】 \>インスペクタの「表示方法」を使う\\ -\>【Cindyscript】 \>size オプションをつける\\ - \>【KeTCindy】 \>Setpen(n) \\ -\end{tabbing} - インスペクタ,Cindyscriptによる点の大きさの設定は画面上には反映されるが,TeXには書き出されない。逆に,KeTCindyで設定した点の大きさは,Cinderellaの画面上には反映されない。そのことを考慮の上,適宜使い分ける必要がある。画面上の点の大きさと,TeXの図の点の大きさは連動しないので注意が必要である。\\ - KeTCindynの描画関数を使うときは,"size=n" オプションをつけて大きさを設定できるものもある。 -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} + 【例】:同じく,解像度をx,yとも10,メッシュの数を縦横とも10にする。 + + 解像度,メッシュ密度とも下げるので粗い描画となる。 + +\verb|Sf3data("1",["z=x^2-y^2","x=[-2,2]","y=[-2,2]"],| + +\verb|["Num=[10,10]","Wire=[10,10]"]);| + +\vspace{\baselineskip} +(2) $z=f(x,y),x=g(R,T),y=h(R,T)$ + x,y の媒介変数 r,t は大文字にする。 + +\vspace{\baselineskip} +【例】:次図左 + +\verb|fd=["z=4-(x^2+y^2)","x=R*cos(T)","y=R*sin(T)","R=[0,2]","T=[0,2*pi]"];| -\subsubsection{垂線を引く} + \verb|Sf3data("1",fd);| + +【例】:次図右\\ + \verb|fd=["z=sin(sqrt(abs(x^2+y^2)))","x=r*cos(t)","y=r*sin(t)",| -\begin{tabbing} -12\=34567890123456789\=\kill\\ +\verb|"r=[0,3]","t=[0,2*pi]"];| + +\verb|Sf3data("1",fd);| -\>【Cinderella】 \>「垂線を加える」ツール \includegraphics[bb=0 0 27 21 , width=0.6cm]{Cindytool/multi-add-perp.png} を用いる \\ -\>【Cindyscript】 \>perpendicular(A,a)\\ - \>【KeTCindy】 \>作図後,Listplot()で線分を引く\\ - \>【KeTCindy3D】 \>Perppt()で垂線の足を求めて線分を引く\\ + \begin{center} \input{Fig/parabola} \input{Fig/sf3ddata3} \end{center} -\end{tabbing} - Cinderellaの「垂線を描く」ツールを用いて作図するのが簡便だが,何か条件を与えて垂線を引くような場合はCindyscriptを使うことになる。ただし,点と直線(線分)が幾何要素になっていないと垂線は引けない。perpendicular(A,a) で,Aは点の識別子,aは直線(線分)の識別子。TeXには,適当な図が描けたところでLineplot()もしくはListplot()で出力すればよい。 +(3) $x=f(u,v),y=g(u,v),z=h(u,v),$ -対象が幾何要素でない場合は,Cindyscriptで方程式を求めて引くことになる。 + この場合,(2)と区別するために,"p" を先頭につけておく。 + + \vspace{\baselineskip} + 【例】球面 + + \verb|fd=["p","x=2*sin(u)*cos(v)","y=2*sin(u)*sin(v)","z=2*cos(u)",| + +\verb|"u=[0,pi]","v=[0,2*pi]"];| +\verb|Sf3data("1",fd);| -KeTCindy3D の Perppt() 関数は,ある点から平面に下した垂線の足を求める。Perppt() の項にある例を参照のこと。 -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} +\begin{center} \input{Fig/sf3ddata4} \end{center} +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -\subsubsection{平行線を引く} +\hypertarget{sfbdparadata}{} +\item[関数] Sfbdparadata(name,式,options) +\item[機能] 空間曲面の陰線処理 +\item[説明] 曲面について陰線処理を行う。 + 曲面の式はSf3data()の場合と同じ。ただし,(2) と(3)のパターンでは式の最後に境界の指定 ewns を明示する必要がある。(3)では境界の指定を" "(中は半角スペース)とする。省略すると不要な境界線が表示されることがある。境界指定については,Sf3data()の項を参照のこと。 + +optionsは,"Wait=n","r","m",線種。Wait の初期値は30。 -\begin{tabbing} -12\=34567890123456\=\kill\\ + "r","m"に関しては,オプションなしまたは,”” のとき + + i) データファイルがなければ,新しく作る + + ii) データファイルが既にあればそれを読み込む + +"m" のとき,強制的にデータファイルを作り直す。 -\>【Cinderella】 \>「平行線を加える」ツール \includegraphics[bb=0 0 27 21 , width=0.6cm]{Cindytool/multi-add-parallel.png} を用いる \\ -\>【Cindyscript】 \>parallel(B,a)\\ - \>【KeTCindy】 \>作図後,Listplot()で線分を引く\\ -\end{tabbing} - Cinderellaの「平行線を描く」ツールを用いて作図するのが簡便だが,なにか条件を与えて平行線を引くような場合はCindyscriptを使うことになる。ただし,点と直線(線分)が幾何要素になっていないと平行線は引けない。parallel(B,a) で,Bは点の識別子,aは直線(線分)の識別子。 +"r" のとき,すでにあるデータファイルを読み込む。 -TeXには,適当な図が描けたところでLineplot()もしくはListplot() で出力すればよい。 +この処理は時間がかかるため,この関数を実行した状態で画面上のスライダを動かそうとすると反応が悪くなる。そこで,Isangle() を用いて,スライダの点を選択しているときはワイヤフレームモデルを描画するようにするとよい。 -対象が幾何要素でない場合は,Cindyscriptで方程式を求めて引くことになる。 -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} +また,この関数はデータを作るだけなので,表示するには ExeccmdC() を用いる。 -\subsection{多角形を描く} +C言語の環境がない場合は,ExeccmdC() が使えないので,SfbdparadataR(name,式,optons1,optons2) を使う。options2には陰線の表示方法について "nodisp" または線種 を指定する。 初期設定は"nodisp" 。options2のみ指定するときは,options1に [""] (空文字)を書いておく。 -\subsubsection{頂点を与えて多角形を描く} +\vspace{\baselineskip} +【例】サドル面 -\begin{tabbing} -12\=34567890123456789\=\kill\\ +陰線を消去して表示(下図左) +\begin{verbatim} + fd=["x=x^2-y^2","x=[-2,2]","y=[-2,2]"]; + if(Isangle(), + Sf3data("1",fd); + , + Startsurf(); + Sfbdparadata("1",fd); + ExeccmdC("1",[],["nodisp"]); + ); +\end{verbatim} +全体を実線で太めにして,陰線を点線で表示(下図右): \verb|ExeccmdC()| を変更する。 +\begin{verbatim} + ExeccmdC("1",["dr,2"],["do"]); +\end{verbatim} + \begin{center} \input{Fig/sfbdpara01} \input{Fig/sfbdpara02}\end{center} - \>【Cinderella】 \>多角形ツール \includegraphics[bb=0 0 27 21 , width=0.6cm]{Cindytool/polygon.png} を用いる \\ - \>【Cindyscript】 \>drawpoly(点リスト)\\ - \>【KeTCindy】 \>Listplot(点リスト)\\ - \>【KeTCindy3D】 \>Spaceline(点リスト)\\ -\end{tabbing} +【例】放物面 : 式を変更する。 +\begin{verbatim} + fd=["z=4-(x^2+y^2)","x=R*cos(T)","y=R*sin(T)","R=[0,2]","T=[0,2*pi]","e"]; +\end{verbatim} + + 陰線を消去(下図左):\verb|ExeccmdC("1",[],["nodisp"]);| + + 陰線を破線で表示(下図右):\verb|ExeccmdC("1",[],["da"]);| + \begin{center} \input{Fig/sfbdpara03} \input{Fig/sfbdpara04} \end{center} - Cinderellaの描画ツールの多角形ツールは,既存の点を結んで多角形を作り色塗りをするもの。色塗りをしないのであれば,単に線分でつないでいく。 +なお,表示については,\hyperlink{execcmdc}{ExeccmdC()} を参照のこと。 - Cindyscriptのdrawpoly() ,およびKeTCindyのListplot(),Spaceline() での点リストは,既存の幾何点でなく座標でもよい。Listplot() ,Spaceline() の点リストが必ず閉じたリスト([A,B,C,D,A])でなければならないのに対し,Cindyscriptのdrawplory()では閉じている必要はない。drawpoly([A,B,C,D])でよい。 -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +\hypertarget{skeletonparadata}{} +\item[関数] Skeletonparadata(name,PDリスト,PDリスト,option) +\item[機能] 陰線処理(スケルトン処理)をおこなう +\item[説明] 描画されている線と軸について陰線処理をおこなう。 -\subsubsection{1辺を与えて正多角形を描く} - \\ - 平面上で,与えられた線分ABを1辺とする正多角形を描く。 +第2引数の線(プロットデータ)が,第3引数の線(プロットデータ)によって隠される部分を消去する。第2,第3引数を省略した場合は,すべての線について,互いの陰線処理をおこなう。optionで消去する部分の長さを指定できる。 -線分ABは,Cinderellaの作図ツールなどで描かれているものとする。ただし,線分でなく,両端の点が与えられているだけでもよい。点A,Bが複素平面上にあるものとして,多角形の頂点の位置を計算すればよい。 +\vspace{\baselineskip} +【例】螺旋と線分,座標軸の陰線処理 -CindyscriptのDrawスロットに,次のスクリプトを書く。(n=5で正五角形を描く) +次のように螺旋と線分,座標軸を描いておく。 \begin{verbatim} - n=5; - pti=[complex(A),complex(B)]; - th=2*pi/n; - repeat(n-2,s, - z1=pti_s; - z2=pti_(s+1); - z=z2+(z2-z1)*(cos(th)+i*sin(th)); - pti=append(pti,z); - ); - pt=apply(pti,gauss(#)); - pt=append(pt,A.xy); - Listplot("1",pt); + Xyzax3data("","x=[-5,5]","y=[-5,4]","z=[-5,3]"); + Putpoint3d(["A",[0,-2,-2]],"fix"); + Putpoint3d(["B",[-1,1,3]],"fix"); + Spaceline([A,B]); + Spacecurve("1","[2*cos(t),2*sin(t),0.2*t]","t=[0,4*pi]",["Num=100"]); \end{verbatim} -ptiは,各頂点に対応する複素数のリスト,ptが各頂点の座標のリストである。 -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} +座標軸のプロットデータは ax3d,線分は AB3d,螺旋は sc3d1 である。これに対し, +\hspace{10mm} \verb|Skeletonparadata("1");| -\subsubsection{接線を引く} - \\ -曲線上の点における接線を引く -\begin{tabbing} -12\=34567890123456789\=\kill\\ + 描画されている線と軸について陰線処理をおこなう。(図左) -\>【Cinderella】 \>幾何要素の2次曲線の場合,「点の極線を加える」ツール \includegraphics[bb=0 0 27 21 , width=0.6cm]{Cindytool/polar-of-point.png} を用いる\\ -\>【Cindyscript】 \>微分して接線の方程式を求めて直線を引く\\ - \>【KeTCindy】 \>同上 \\ -\end{tabbing} - Cinderellaの作図ツールで描いた2次曲線の場合は,曲線上の点において「点の極線を加える」ツールで接線が引ける。このツールは,初期状態では画面に出ていないので,モードメニューの「直線」から選ぶ。また,「設定」メニューの「上のツールバーをカスタマイズする」で,すべてのツールを表示すれば画面上に出る。 - - Cinderellaの作図ツールで描けない曲線の場合は方程式を求めて直線を引くことになる。微分をする関数は,Cindyscriptでは d(関数,変数),KeTCindyではDerivative(関数, 変数,値) を用いる。\\ - -例:3次関数 $f(x)=x^3-4x$ 上の点$(1,-3)$における接線を引くCindyscriptとKeTCindyの組み合わせ\\ - f(x):=x\verb|^| 3-4*x;\\ - g(x0,x):=d(f(\#),x0)*(x-x0)+f(x0);\\ - p1=[1,-3];\\ - p2=[2,g(1,2)];\\ - plotdata("1","x\verb|^| 3-4*x","x");\\ - Lineplot("1",[p1,p2]);\\ - \\ - このスクリプトでは,g(x0,x)を点$(x_0,f(x_0))$における接線の方程式としている。\\ - また,接点をインタラクティブに決めるには,2点A,Bを作図しておき\\ - \\ - Deffun("f(x)",["regional(y)","y=x\verb|^|3-4*x","y"]);\\ - coef=Derivative("f(x)","x",A.x);\\ - A.y=f(A.x);\\ - B.y=coef*(B.x-A.x)+A.y;\\ - Plotdata("1","f(x)","x");\\ - Lineplot([A,B]);\\ - - として,接点Aをドラッグして位置決めをすることができる。\\ - \\ - <注>\\ - Deffun("f(x)",["regional(y)","y=x\verb|^|3-4*x","y"]);\\ - は\\ - f(x):=x\verb|^| 3-4*x;\\ - でもよい。\\ -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} -\subsection{円の作図} -\subsubsection{円を描く} +\hspace{10mm} \verb|Skeletonparadata("1",[2]);| -\begin{tabbing} -12\=34567890123456789\=\kill\\ + 重なった部分の空きを2にする。(図中央) + +\hspace{10mm} \verb|Skeletonparadata("1",["AB3d","ax3d"],["sc3d1"]);| + +螺旋によって隠れる部分だけ消去する。(図右) -\>【Cinderella】 \>「円を加える」ツール \includegraphics[bb=0 0 27 21 , width=0.6cm]{Cindytool/multi-add-circle.png} を用いる\\ -\>【Cindyscript】 \>drawcircle([a,b],r)\\ - \>【KeTCindy】 \>Circledata([A,B]),Circledata(name,[[a,b],[c,d]])\\ -\end{tabbing} - Cinderellaの円を描くツールは3種類あるが,あとでTeXに書き出すならば「円を加える」ツールがよい。中心からドラッグすると円周上に点ができる。この2点を使ってCircledata([A,B]) で書き出すことができる。TeXに書き出す必要がない補助円などであれば,「半径付き円を加える」 \includegraphics[bb=0 0 27 21 , width=0.6cm]{Cindytool/circle-by-radius.png} が簡便。半径を一定にする(円周ドラッグで大きさが変わらないようにする)のであれば,「固定した半径の円を描く」ツールを用いる。Cinderellaの円を描くツールで描いた円は,インスペクタの「特別な表示方法」で線種を設定できる。 +\begin{center} \input{Fig/skeletonparadata01} \input{Fig/skeletonparadata02} + \input{Fig/skeletonparadata03} \end{center} -Cindyscript では,中心と半径を指定して円を描く。drawcircle([a,b],r) は [a,b] が中心の座標,r が半径(実数)。中心は,Cinderellaの作図ツールでとった点Aを中心とする場合は,drawcircle(A,r)。 +このほか, -KeTCindyのCircledata([A,B])は,中心Aで点Bを通る円を描く。A,Bを座標にする場合は,nameが必要。中心Aで半径rの円を描くのであれば,座標指定になるので,Circledata("1",[A,A+[3,0]]) または Circledata("1",[A.xy,A.xy+[3,0]]) とする。 -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} +\hspace{10mm} \verb|Skeletonparadata("1",["AB3d","ax3d"],["sc3d1"],[2]);| -\subsection{領域を塗る} -\subsubsection{円の内部を塗る} -\begin{tabbing} -12\=34567890123456789\=\kill\\ +\hspace{10mm} \verb|Skeletonparadata("1",["AB3d"],["ax3d","sc3d1"]);| -\>【Cinderella】 \>「円を加える」ツールを用いたのち,インスペクタで設定\\ -\>【Cindyscript】 \>fillcircle(A,r) \\ - \>【KeTCindy】 \>Shade(PD)\\ -\end{tabbing} - 画面上で色を塗るだけならインスペクタの「表示方法」で色塗りをするのが簡便。透明度も設定できる。TeXの図版でも領域を塗るのであれば,Circledata()で円を描いた(プロットデータを作成)のち,Shade()で色を塗る。ここで色指定をすれば画面にも反映される。\\ -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} +も可能である。 +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +\vspace{\baselineskip} -\subsubsection{多角形の内部を塗る} +\hypertarget{spacecurve}{} +\item[関数] Spacecurve(name,式,定義域,options) +\item[機能] 空間曲線を描く +\item[説明] 媒介変数で表された曲線を描く。optionは解像度 Num -\begin{tabbing} -12\=34567890123456789\=\kill\\ +\vspace{\baselineskip} +【例】螺旋を描く -\>【Cinderella】 \>「多角形を加える」ツール \includegraphics[bb=0 0 27 21 , width=0.6cm]{Cindytool/polygon.png} を用いる \\ -\>【Cindyscript】 \>fillpoly(点リスト)\\ - \>【KeTCindy】 \>Shade(PD)\\ -\end{tabbing} - Cinderellaの描画ツールの多角形ツールは,既存の点を結んで多角形を作り色塗りをする。 +\verb|Spacecurve("1","[2*cos(t),2*sin(t),0.2*t]","t=[0,4*pi]",["Num=100"]);| + +\vspace{\baselineskip} + \begin{center} \input{Fig/rasen} \end{center} -Cindyscriptでの点リストは,既存の幾何点でなく座標でもよい。点リストは,始点と終点を結ぶので閉じている必要はない。([A,B,C,D]) +\hypertarget{spaceline}{} +\item[関数] Spaceline(name,list) +\item[機能] 折れ線を描く +\item[説明] 点の名称または座標のリストを与えて折れ線を描く。平面での Listplot() にあたる。 - TeXに書き出すのであれば Shade()を用いる。\\ -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} +options は線種(dr,da,do) +\vspace{\baselineskip} +【例】いくつか示す。 -\subsubsection{曲線で囲まれた領域を塗る} -\begin{tabbing} -12\=34567890123456789\=\kill\\ +・Spaceline("1",[[2,5,1],[4,2,3]]); 指定された2点を結んだ線分を描く。 - \>【KeTCindy】 \>Shade(PD)\\ -\end{tabbing} - Shade()を用いて領域を塗る。Cinderellaの画面にも反映される。\\ -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} +・Spaceline("2",[A,B,C,A]); 作図されている2点A,B,Cを結んだ三角形を描く。 -\subsubsection{領域を斜線で示す} +・節点を表示する場合は,Pointdata3d() で描画する。 -\begin{tabbing} -12\=34567890123456\=\kill\\ - \>【KeTCindy】 \>Hatchdata(name,方向,PD)\\ -\end{tabbing} - 領域を斜線で塗る。Cinderellaの画面にも反映される。Scilabとデータをやり取りしてハッチデータを作るので,バッチファイル(シェルファイル)が裏で実行される。\\\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} +\begin{layer}{150}{0} +\putnotese{80}{10}{ \input{Fig/oresenex01}} +\end{layer} +\begin{verbatim} + pt=[[2,0,0],[2,0,2],[2,2,2],[0,2,2],[0,4,2],[0,4,4]]; + Spaceline("1",pt); + Pointdata3d("1",pt,["Size=3"]); +\end{verbatim} +点の名前が必要であれば -\subsubsection{領域を細かい点で埋める} +\verb|pname=apply(1..6,"P"+text(#));| -\begin{tabbing} -12\=34567890123456\=\kill\\ +のようにして,名前リストを作ることができる。 - \>【KeTCindy】 \>Dotfilldata(name,方向,PD)\\ -\end{tabbing} - 曲線で囲まれた領域を斜線で塗るかわりに細かい点で埋める。 使い方はHatchdata() と同様。\\ -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} +\vspace{\baselineskip} +\hypertarget{translatedata3d}{} +\item[関数] Translatedata3d(name,PD,平行移動量) +\item[機能] 空間プロットデータを平行移動 +\item[説明] PDで表される図形を,平行移動する。 +\vspace{\baselineskip} +【例】曲線 sc3d1 をy軸方向に2だけ平行移動する。 -\subsection{関数のグラフ・曲線} +\verb|Translatedata3d("1",["sc3d1"],[0,2,0]);| + +結果として,もとの曲線と平行移動した曲線の2つが描かれる。 -\subsubsection{関数のグラフを描く} -\begin{tabbing} -12\=34567890123456789\=\kill\\ +\vspace{\baselineskip} +【例】多面体の平行移動\\ +VertexEdgeFace() で描いた多角形はこの関数では平行移動できないので,面データを直接操作して平行移動を行う。 + +たとえば,小林・鈴木・三谷による多面体データ polyhedrons obj を用いて正八面体を描く場合,次のようにする。$y$軸方向に2だけ平行移動する場合である。 -\>【Cindyscript】 \>関数を定義して,plot()で表示する \\ - \>【KeTCindy】 \>(関数を定義して)Plotdata()で表示する \\ -\end{tabbing} +\begin{verbatim} + Setdirectory( Dirhead+"/data/polyhedrons_obj"); + phd=Readobj("r02.obj",["size=2"]); + Setdirectory(Dirwork); + dn=length(phd_1); + repeat(dn,s,phd_1_s=phd_1_s+[0,2,0]); + VertexEdgeFace("1",phd,["Edg=nogeo"]); +\end{verbatim} + \begin{center} \input{Fig/translate01} \end{center} - Cindyscriptでは,f(x):=式 の書式で関数を定義し,plot(fx)) でグラフを描くことができる。関数は,if関数による場合分けも可能。また,この関数概念は数学関数ではなく, プログラミングにおける関数なので,一連の操作を関数として定義して実行することもできる。\\ - KeTCindyでは,Deffun() で関数を定義して,Plotdata()でグラフを描く。Deffunでは,if文による条件分岐も可能だが,ifのネストはできない。\\ - 三角関数などの組み込み関数については,定義は不要で,そのまま plot() もしくは Plotdata()でグラフを描くことができる。ただし,CindyscriptにあってもKeTCindyにはない逆三角関数(arctanなど)はCindyscriptで画面には表示できるがTeXにはできない。\\ +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} +\hypertarget{translatepoint3d}{} +\item[関数] Translatepoint3d(座標,平行移動量) +\item[機能] 空間点を平行移動 +\item[説明] 点を平行移動する。 -\subsubsection{媒介変数表示の曲線を描く} +\vspace{\baselineskip} +【例】点A(1,0,0) を(-1,1,1)だけ平行移動した点をBとする。点Aの空間座標は A3d で表される。 +\begin{verbatim} + Putpoint3d(["A",[1,0,0]],"fix"); + pt=Translatepoint3d(A3d,[-1,1,1]); + Putpoint3d(["B",pt],"fix"); +\end{verbatim} +\vspace{\baselineskip} +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -\begin{tabbing} -12\=34567890123456789\=\kill\\ +\hypertarget{vertexedgeface}{} +\item[関数] VertexEdgeFace(name,面データ,options) +\item[機能] 多面体の面データを用いて多面体を描く +\item[説明] 面データは,頂点リストと,面リストからなる。面リストは,各面を構成する頂点を,外側から見て反時計回り(左回り)に並べたリストである。 -\>【Cindyscript】 \>plot([f(t),g(t)])\\ - \>【KeTCindy】 \>Paramplot(name,式,定義域) \\ - \>【KeTCindy3D】 \>Spacecurve(name,式,定義域) \\ -\end{tabbing} - いずれもoptionで線種などの指定ができる。\\ - 平面における曲線で,Timer Tickスロットに書いてアニメーションを行う場合は,Cindyscriptの plot()の方を勧める。シンプルな分,実行速度において有利である。\\ -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} +たとえば,四面体ABCDの面データは,[[A,B,C,D],[[1,2,3],[1,2,4],[1,3,4],[2,3,4]]] となる。 +4点A,B,C,Dをとっておき,このリストを引数に与えると,四面体の辺が描かれる。 -\subsubsection{2次曲線を描く} - 放物線,楕円,双曲線を描く。 -\begin{tabbing} -12\=34567890123456789\=\kill\\ +このとき,option がなければ,Cinderellaの幾何要素として辺が描かれるが,それだけではTeXには書き出されないので注意が必要である。(変数未定義のエラーになる) TeXに書き出すには,optionとして ["Edg=nogeo"] をつける。このときは各辺は幾何要素にならない。 -\>【Cinderella】 \>焦点などを作図してそれぞれの作図ツールを用いる\\ -\>【Cindyscript】 \>関数もしくは媒介変数で表してplot()で描く\\ - \>【KeTCindy】 \>Plotdata() もしくは Paramplot() ,Parabolaplot() などで描く\\ -\end{tabbing} - これらの曲線を描く方法は何通りかある。全体ではなく一部分を描く場合はCinderellaの作図ツールではできないのでplot()または Paramplot()で描く。 +また,"Pt=free" optionをつけると,頂点は自由点となり,マウスドラッグで動かすことができる。 - これらの曲線上に点をとり,接線を引いてインタラクティブに動かすような場合は,Cinderellaの作図ツールで描くとよい。点をインシデントにするのが容易であり,接線も簡単に引け,さらにその接線も幾何要素となるので都合がよい。 +生成されるプロットデータは, -KeTCindyでは,Plotdata() で媒介変数表示の式を与えるか,Parabolaplot(),Ellipsplot(),Hyperbolaplot() で焦点などを与えて描く。 +phv3d:頂点のリスト -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} +phe3d:辺のリスト +phf3d:面リスト -\subsubsection{陰関数のグラフを描く} +なお,それぞれ末尾にnameが付加される。 -\begin{tabbing} -12\=34567890123456\=\kill\\ +\vspace{\baselineskip} +【例】:正四面体を描く +\begin{verbatim} + Putpoint3d("A",2*[-1,-1/sqrt(3),0],"fix"); + Putpoint3d("B",2*[1,-1/sqrt(3),0],"fix"); + Putpoint3d("C",2*[0,sqrt(3)-1/sqrt(3),0],"fix"); + Putpoint3d("D",2*[0,0,sqrt(3)],"fix"); + phd=Concatobj([[A,B,C],[A,B,D],[A,C,D],[B,C,D]]); + VertexEdgeFace("1",phd,["Edg=nogeo"]); +\end{verbatim} + \begin{center} \input{Fig/vertex01} \end{center} - \>【KeTCindy】 \>Implicitplot()\\ -\end{tabbing} - 陰関数で与えられた曲線を描く方法はCinderella,Cindyscriptにはない。 -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} +%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +\hypertarget{wireparadata}{} +\item[関数] Wireparadata(name,PD,式,整数,整数,optons) +\item[機能] 曲面のワイヤフレームを陰線処理してプロットデータを作る。 +\item[説明] PDは,第3引数の式で描いたワイヤフレームモデルのプロットデータ名。第4,第5引数は分割線の数。 +options には "r","m","Wait=n" が指定できる。Wait の初期値は30。 -\subsubsection{プロットデータを自作して表示する} - \\ - 組み込み関数にない関数などを使ってプロットデータを自作して表示するには,Cindyscriptで作成したプロットデータをListplot() または AddGraph()に渡して描画する。それぞれの項の例を参照のこと。 + "r","m"に関しては,オプションなしまたは,”” のとき + + i) データファイルがなければ,新しく作る + + ii) データファイルが既にあればそれを読み込む + + "m" のとき,強制的にデータファイルを作り直す。 + + "r" のとき,すでにあるデータファイルを読み込む。 + +曲面の陰線処理を行うので,Sfbdparadata() とペアで使う。 -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} +この処理は時間がかかるため,この関数を実行した状態で画面上のスライダを動かそうとすると反応が悪くなる。そこで,Isangle() を用いて,スライダの点を選択しているときはワイヤフレームモデルを描画するようにするとよい。 -\subsection{その他} +また,この関数はデータを作るだけなので,表示するには \hyperlink{execcmdc}{ExeccmdC()} を用いる。 -\subsubsection{幾何要素を非表示にする} -描いた点や線を非表示にする。 -\begin{tabbing} -12\=34567890123456\=\kill\\ +C言語の環境がない場合は,ExeccmdC() が使えないので,WireparadataR(name,PD,式,整数,整数,optons1,optons2) を使う。options2には陰線の表示方法について "nodisp" または線種 を指定する。 初期設定は"nodisp" 。options2のみ指定するときは,options1に [""] (空文字)を書いておく。 -\>【Cinderella】 \>インスペクタの「表示方法」で「表示する」のチェックを切る \\ -\>【Cindyscript】 \>幾何要素のvisibleプロパティをfalseにする \\ - \>【KeTCindy】 \>"notex" または "nodisp" オプションをつける \\ -\end{tabbing} - インスペクタの表示方法」で「表示する」のチェックを切った場合,「表示」に戻すには,「表示」メニューの「式による表示」を開いて,該当の幾何要素を選択し,インスペクタで「表示する」のチェックをつける。\\ - 幾何要素をCindyscriptで非表示/表示にするには,A.visible=false / true とする。幾何要素ではない関数のグラフなどはインスペクタでは非表示にできない。\\ - KeTCindy の "notex" オプションはTeXに出力しない。"nodisp"オプションでは,画面にも表示されない。プロットデータを作成するために使う。\\ -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} +\vspace{\baselineskip} +【例】式のタイプ別に例を示す。 -\subsubsection{角に印をつける} -角に弧または平行四辺形の角の印をつける。 -\begin{tabbing} -12\=34567890123456\=\kill\\ +\vspace{\baselineskip} +サドル面 -\>【Cinderella】 \>「角に印をつける」ツール \includegraphics[bb=0 0 27 21 , width=0.6cm]{Cindytool/angle-mark.png} を用いる(弧の形状のみ)\\ -\>【Cindyscript】 \>なし\\ - \>【KeTCindy】 \>Anglemark() , Paramark() を用いる \\ -\end{tabbing} - TeXに出力しないのであれば,「角に印をつける」ツールを用いるのが簡便。ただし,平行四辺形の印はつけられない。\\ - 角に向きを示す矢印を付加する場合は,Anglemark()で描いておき,Arrowhead()で矢じりをつける。\\ -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} +\begin{layer}{150}{0} +\putnotese{85}{5}{ \input{Fig/wirepara1}} +\end{layer} +\begin{verbatim} + fd=["z=x^2-y^2","x=[-2,2]","y=[-2,2]"]; + if(Isangle(), + Sf3data("1",fd); + , + Startsurf(); + Sfbdparadata("1",fd); + Wireparadata("1","sfbd3d1",fd,4,5); + ExeccmdC("1"); + ); +\end{verbatim} +回転放物面:次を変更 -\subsection{値の取得・変換} -\subsubsection{角度を測る} +\begin{layer}{150}{0} +\putnotese{85}{10}{ \input{Fig/wirepara2}} +\end{layer} +\begin{verbatim} + fd=["z=4-(x^2+y^2)","x=r*cos(t)","y=r*sin(t)","r=[0,2]","t=[0,2*pi]","e"]; + Wireparadata("1","sfbd3d1",fd,5,7); +\end{verbatim} +\vspace{25mm} -\begin{tabbing} -12\=34567890123456789\=\kill\\ +球面 -\>【Cinderella】 \>「角度を測る」ツール \includegraphics[bb=0 0 27 21 , width=0.6cm]{Cindytool/angle.png}を用いる。\\ -\>【Cindyscript】 \>arctan2(ベクトル)を用いる\\ -\end{tabbing} - Cinderellaの「角度を測る」ツールでは,画面上に角度が表示される。この値をスクリプトで利用するためには,その識別名を用いる。識別名は,表示メニューから「式による表示」で出る幾何要素の一覧表で判断する。識別名がα0であれば,変数α0に角の値が入っていると考えてよい。αは日本語入力モードで「あるふぁ」で入力する。たとえば,drawtext([1,1],α0) とすれば,(1,1) の位置に角度が表示される。このときの角は一般角であり,点をドラッグすると360°以上の角や負の角で表示される。また,表示は度数法で行われるが,処理によっては弧度法での表示となる。\\ - Cindyscriptで角度を取得するには,arctan2()を用いるのがよい。引数はベクトルで,x軸の正の方向とのなす角を −π 〜 π の範囲で弧度法で返す。角ABCの場合,th=arctan2(C.xy-B.xy)-arctan2(A.xy-B.xy) で取得できる。\\ -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} +このタイプでは,媒介変数形式の識別のため,先頭に "p" をつけておく。 -\subsubsection{2点間の距離を測る} +\begin{layer}{150}{0} +\putnotese{80}{0}{ \input{Fig/wirepara3}} +\end{layer} +\begin{verbatim} + fd=["p","x=2*sin(u)*cos(v)", + "y=2*sin(u)*sin(v)", + "z=2*cos(u)","u=[0,pi]", + "v=[0,2*pi]","s"]; + Sfbdparadata("1",fd); + Wireparadata("1","sfbd3d1",fd,12,12); +\end{verbatim} -\begin{tabbing} -12\=34567890123456\=\kill\\ +\vspace{8mm} +%\begin{center} \input{Fig/wirepara1} \input{Fig/wirepara2} \input{Fig/wirepara3} \end{center} -\>【Cindyscript】 \>dist(A,B) または $|$A,B$|$ \\ - \>【KeTCindy3D】 \>dist3d(点,点)\\ -\end{tabbing} -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} +\vspace{\baselineskip} +【例】球面で座標軸を陰線処理し,面の陰線は非表示で表す。 -\subsubsection{数値を文字に変換する} -関数の引数に文字列として与えるために数値を文字列に変換したい場合がある。このような場合は,text() 関数を用いる。引数は実数・複素数いずれでも可。\\ +\begin{layer}{150}{0} +\putnotese{70}{5}{ \input{Fig/wirepara4}} +\end{layer} -subsubsection{小数点の桁数を指定して表示} -\begin{tabbing} -12\=34567890123456\=\kill\\ +\begin{verbatim} + fd=["p","x=2*sin(u)*cos(v)", + "y=2*sin(u)*sin(v)", + "z=2*cos(u)", + "u=[0,pi]","v=[0,2*pi]","s"]; + if(Isangle(), + Sf3data("1",fd); + , + Startsurf(); + Sfbdparadata("1",fd); + Wireparadata("1","sfbd3d1",fd,12,12); + Crvsfparadata("1","ax3d","sfbd3d1",fd); + ret=ExeccmdC("1"); + forall(1..length(ret), + if(indexof(ret_#,"wireh")>0, + Changestyle3d([ret_#],["nodisp"]); + ); + ); + ); +\end{verbatim} +【例】トーラスを描く -\>【Cinderella】 \>なし \\ -\>【Cindyscript】 \>format()関数を用いる \\ - \>【KeTCindy】 \>Textformat() 関数を用いる\\ -\end{tabbing} - Cinderellaでは,小数点以下の桁数は第5位を四捨五入して表示するのがデフォルトである。小数点以下の桁数を指定するには,Cindyscriptでは format()関数,KeTCindydでは Textformat()関数を用いる。Textformat()関数は,リストで与えた数でも処理できる。\\ -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} +式を次のように変え,軸は非表示にして,\verb|ExeccmdC("1",[],["nodisp"])| にする。 -\subsection{スライダを作る} -\subsubsection{線分スライダを作る} -変数の値をインタラクティブに決めるスライダを作る。 +\begin{verbatim} + fd=["p","x=(2+cos(u))*cos(v)","y=(2+cos(u))*sin(v)","z=sin(u)", + "u=[0,2*pi]","v=[0,2*pi]","s"]; +\end{verbatim} +\vspace{\baselineskip} + \begin{center} \input{Fig/wirepara5} \end{center} -まず,Cinderellaの作図ツールで,適当な線分(または直線)と,その上の点をとる。このとき,点が線分上にインシデントになるように,点を線分上にドラッグして線分がハイライトしたときにマウスボタンを離す。 +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +\vspace{\baselineskip} +\hypertarget{xyzax3data}{} +\item[関数] Xyzax3data(name,xの範囲,yの範囲,zの範囲,options) +\item[機能] 座標軸を描く +\item[説明] 描画面に座標軸を描き,プロットデータ ax3d を作成する。nameは空文字列でよい。option は次の2つ。 -線分をAB,AB上の点をCとして,AとCの距離 $|$A,C$|$ を用いて変数の値を決めればよい。 +矢じり:"an":nは数字で矢じりの大きさ。nはなくてもよい。 - 例:x=$|$A,C$|$-5; +原点O:"Onesw":neswは微小位置。数字も付けられる。neswをつけない場合の初期値はsw。 -整数を取得したい場合は,天井関数ceil()または,床関数 floor()を用いて整数化する。 +【例】 初期設定の座標軸\\ +\verb|Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]");| + + 矢じりをつける + + \verb|Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]","a");| + + 矢じりを大きくする + + \verb|Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]",["a2"]);| + +原点のOを表示する。 - 例:n=ceil($|$A,C$|$) + \verb|Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]",["O"]);| + + 原点のOの位置を調整して右上に表示する。やじりもつける。 + + \verb|Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]",["a","Oe2n2"]);| + -点Cを端点までドラッグした後,さらに点Cをドラッグしようとすると端点も同時に動いてしまうことがある。そこで,端点を選択してインスペクタで「ピンで留める」にチェックを入れておくとよい。 -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} +【注意】Putaxes3d() で点を取ると原点に点Oが作成される。この点名Oと表示が重複するのが煩わしい場合は,作図後にこのoptionをつけてから出力するとよい。 -\subsubsection{円形スライダを作る} -角の値をインタラクティブに決めるスライダを作る。 -まず,Cinderellaの作図ツールで,適当な円を描き,その上に点をとる。このとき,点が円周上にインシデントになるように,点を円周上にドラッグして円周がハイライトしたときにマウスボタンを離す。 +\vspace{\baselineskip} +\hypertarget{xyzcoord}{} +\item[関数] Xyzcoord(P.x,P.y,Pz.y) +\item[機能] 主副画面で決まる点の座標 +\item[説明] Cinderellaの描画面上の点が表す空間座標を求める -円の中心をA,円周上の点をBとしたとき,B.angleで角度を取得できる。ただし,戻り値は$0^\circ 〜 360^\circ$ + 点Pについて,主画面の点Pに対応するのが副画面のPzである。点Pの2次元座標はP.x,P.yで,Pzのy座標はPz.yで表される。これを引数として与えると,点Pの空間座標が返される。 + +\vspace{\baselineskip} +【例】点Aをドラッグして動かしたとき,Aの座標を求める。 +\verb|println(Xyzcoord(A.x,A.y,Az.y));| + +により,コンソールに座標が表示される。 -arctan2(B.xy-A.xy) で角を取得することもできる。この場合の戻り値は,$-180^\circ 〜 180^\circ$\\ -\begin{flushright} \hyperlink{functionlist3d}{$\Rightarrow$関数一覧}\end{flushright} +\end{description} +\newpage +% 付録 ================================== +\section{付録} +\subsection{用語解説} +Cinderellaで使っている用語に次のものがある。 +\begin{tabbing} +1234567890123\=456789890123456789012\=34567890123\=\kill +インシデント \>点が曲線(直線)上に乗っている状態を表す。\\ + \>曲線上に点をとるとインシデントになり,ドラッグしたとき曲線上だけを動く。\\ + \>インシデントの状態を変えるには,「点の取り付け/取り外し」ツールを使う。\\ +幾何要素 \>Cinderellaの作図ツールで作図した点や直線などの要素\\ +インスペクタ \>幾何要素の大きさや色などの属性を管理するウィンドウ。\\ +幾何点 \>幾何要素としての点。マウスドラッグで動かすことができる。\\ + \>CindyscriptやKeTCindyのスクリプトで取った点は幾何要素にならないことがある。\\ +自由点 \>マウスドラッグで任意に動かすことのできる点。\\ +固定点 \>マウスドラッグで移動することのできない点\\ + \>2曲線の交点などではない単独の点の場合,インスペクタで点を固定できる。\\ +スナップ \>マウスポイントが格子点の近くに来ると格子点上にぴったり移動する。\\ + \>Cinderellaの画面の下方ツールのうち,磁石アイコンによりこのモードになる。\\ + \end{tabbing} + +\hypertarget{geometrytool}{} +\subsection{Cinderellaの作図ツール} + \begin{tabbing} +1234567890123456789890123456789012\=34567890123\=\kill +\includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/move.pdf} 動かすモードにする \>:幾何要素を選択して動かす。これが標準状態\\ +\includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/single-add.pdf} 点を加える \>:クリックして点を作る\\ +\includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/multi-add-line.pdf} 直線を加える \>:2点間をドラッグする\\ +\includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/segment.pdf} 線分を加える \>:2点間をドラッグする\\ +\includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/middle.pdf} 中点を加える \>:2点間をドラッグする\\ +\includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/intersection.pdf} 交点を加える \>:2曲線を順にクリック\\ +\includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/multi-add-parallel.pdf} 平行線を加える \>:直線上から通る点へドラッグ\\ +\includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/multi-add-perp.pdf} 垂線を加える \>:直線上から通る点へドラッグ\\ +\includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/bisector.pdf} 角の二等分線を加える \>:2直線を順にクリック\\ +\includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/multi-add-circle.pdf} 円を加える \>:中心から半径分ドラッグ\\ +\includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/circle-by-radius.pdf} 半径つき円を加える \>:中心から半径分ドラッグ\\ +\includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/ellipse-by-foci.pdf} 焦点と通る点で決まる楕円 \>:焦点と通る点を順にクリック\\ +\includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/hyperbola-by-foci.pdf} 焦点と通る点で決まる双曲線 \>:焦点と通る点を順にクリック\\ +\includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/parabola-by-foci.pdf} 焦点と準線で決まる放物線 \>:焦点と準線を順にクリック\\ +\includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/polygon.pdf} 多角形を加える \>:多角形の頂点を順にクリック\\ +\includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/angle-mark.pdf} 角に印をつける \>:2直線を順にクリック\\ +\includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/angle.pdf} 角度を測る \>:2直線を順にクリック\\ +\includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/delete.pdf} 選択した要素を消去する \>:選択しておいてツールをクリック\\ +\includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/select-points.pdf} 点をまとめて選択する \>:点がすべて選択される\\ +\includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/select-lines.pdf} 線分をまとめて選択する \>:線分がすべて選択される\\ + \end{tabbing} + + \begin{tabbing} +1234567890123456789890123456789012\=34567890123\=\kill +画面ツール(下のツールバー)\\ +\includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/translate-view.pdf} 原点を移動する \>:画面上の任意の位置でドラッグする\\ +\includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/zoom-in.pdf} 矩形領域を画面サイズに拡大 \>:ドラッグしてできる矩形で領域を選択する\\ +\includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/zoom-out.pdf} 画面を矩形領域サイズに縮小 \>:どっらっぐしてで切る矩形で領域を選択する\\ +\includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/snap.pdf} 格子点にスナップする \>:軸と方眼を表示しスナップモードにする\\ +\includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/grid-more.pdf} \includegraphics[bb=0 0 6.48 5.04 , width=0.6cm]{Fig/grid-less.pdf} グリッドを粗く / 細かくする\\ + \end{tabbing} + +\hypertarget{colorcodelist}{} +\subsection{色名とカラーコード一覧} +\vspace{\baselineskip} +\scalebox{0.9}{\input{Fig/colortable}} -% 関数一覧 ================================== +\newpage +%--------------点の作図についての比較表-------------------------------------- +\hypertarget{mkpttable}{} +\subsection{点の作図についての比較表} +\vspace{\baselineskip} +\scalebox{0.9}{\input{Fig/mkpttable}} + +注) Intersectcrvsf は戻り値ではなく,プロットデータを使う。 + +\newpage +% 関数一覧 ================================== \hypertarget{functionlist}{} \section{関数一覧} +\hyperlink{index}{【目次】に戻る} + \begin{tabbing} 12345678901234567890123456789012345678\=\kill 【設定・定義】\\ -\hyperlink{addax}{Addax(0/1)} \>座標軸を描くかどうかを定める\\ -\hyperlink{addcolor}{Addcolor(com,color)} \>描画色を設定する\\ -\hyperlink{colorcode}{Colorcode(文字1,文字2,color)} \>カラーコードの変換\\ -\hyperlink{deffun}{Deffun(関数名 , 定義リスト )} \>関数を定義する\\ -\hyperlink{definecolor}{Definecolor(色名 , 定義リスト )} \>ユーザー定義色の設定\\ -\hyperlink{defvar}{Defvar(文字列)} \>変数を定義する\\ -\hyperlink{drwxy}{Drwxy()} \>座標軸を先に描く\\ -\hyperlink{fontsize}{Fontsize(記号)} \>フォントサイズを設定する\\ -\hyperlink{ketint}{Ketinit(options)} \>\ketcindy を初期化する\\ -\hyperlink{ptsie}{Ptsize(数)} \>表示する点の大きさを設定する\\ -\hyperlink{setax}{Setax(リスト)} \>座標軸の書式を設定する\\ -\hyperlink{setcolor}{Setcolor(color,options)} \>Windispgでの描画色を設定する\\ -\hyperlink{setmarklen}{Setmarklen(数)} \>軸の目盛の長さを設定する\\ -\hyperlink{setorigin}{Setorigin(座標)} \>表示する座標軸の原点の位置を設定する\\ -\hyperlink{setpen}{Setpen(数)} \>線の太さを設定する\\ -\hyperlink{setpt}{Setpt(数)} \>表示する点の大きさを設定する\\ -\hyperlink{setscaling}{Setscaling(数)} \>縦方向の倍率を設定する\\ -\hyperlink{setunitlen}{Setunitlen(数)} \>単位長を設定する\\ -\hyperlink{setwindow}{Setwindow()} \>描画領域を設定する\\ -\hyperlink{slider}{Slider()} \>スライダを作る\\ -\\ +\hyperlink{addax}{Addax(0/1)} \>座標軸を描くかどうかを定める\\ +\hyperlink{addpackage}{Addpackage(package)} \>プレビュー用のパッケージを追加\\ +\hyperlink{changework}{Changework(パス)} \>作業ディレクトリを変更する\\ +\hyperlink{deffun}{Deffun(関数名 , 定義list )} \>関数を定義する\\ +\hyperlink{definecolor}{Definecolor(色名 , 定義list )} \>ユーザー定義色の設定\\ +\hyperlink{defvar}{Defvar(文字列)} \>変数を定義する\\ +\hyperlink{drwxy}{Drwxy()} \>座標軸を先に描く\\ +\hyperlink{fontsize}{Fontsize(記号)} \>フォントサイズを設定する\\ +\hyperlink{ketinit}{Ketinit(options)} \>\ketcindy を初期化する\\ +\hyperlink{ptsize}{Ptsize(数)} \>表示する点の大きさを設定する\\ +\hyperlink{setax}{Setax(list)} \>座標軸の書式を設定する\\ +\hyperlink{setcolor}{Setcolor(color,options)} \>Windispgでの描画色を設定する\\ +\hyperlink{setfiles}{Setfiles(filename)} \>出力するファイル名を設定する\\ +\hyperlink{setparent}{Setparent(filename)} \>Parentで出力するファイル名を設定する\\ +\hyperlink{setmarklen}{Setmarklen(数)} \>軸の目盛の長さを設定する\\ +\hyperlink{setorigin}{Setorigin(座標)} \>表示する座標軸の原点の位置を設定する\\ +\hyperlink{setpen}{Setpen(数)} \>線の太さを設定する\\ +\hyperlink{setpt}{Setpt(数)} \>表示する点の大きさを設定する\\ +\hyperlink{setscaling}{Setscaling(数)} \>縦方向の倍率を設定する\\ +\hyperlink{setunitlen}{Setunitlen(数)} \>単位長を設定する\\ +\hyperlink{setwindow}{Setwindow()} \>描画領域を設定する\\ +\hyperlink{usegraphics}{Usegraphics()} \>グラフィクスパッケージを \verb|"pict2e"| に変更する\\ 【描画】\\ -\hyperlink{anglemark}{Anglemark(点リスト, options)} \>角の印を入れる\\ \hyperlink{addgraph}{AddGraph(name ,プロットデータ)} \>ユーザー定義のプロットデータを描画する\\ -\hyperlink{arrowdata}{Arrowdata(始点,終点,options)} \>2点間を結ぶ矢線を描く\\ -\hyperlink{arrowhead}{Arrowhead(点,方向,options)} \>点に矢じりだけを描く\\ -\hyperlink{bezier}{Bezier(name, リスト,リスト,options )} \>単独のベジェ曲線を描く\\ -\hyperlink{beziersmooth}{Beziersmooth(name , リスト,options )} \>なめらかなベジェ曲線を描く。その1\\ -\hyperlink{beziersym}{Beziersym(name , リスト,options )} \>なめらかなベジェ曲線を描く。その2\\ -\hyperlink{bowdata}{Bowdata(点リスト,options)} \>弓形を描く\\ -\hyperlink{bspline}{Bspline(name,リスト,options )} \>2次 Bスプライン曲線を描く\\ -\hyperlink{changestyle}{Changestyle(PD リスト, options)} \>描画オプションを変更する\\ -\hyperlink{circledata}{Circledata(name,点リスト,options)} \>円または多角形を描く\\ -\hyperlink{crosspoint}{Crosspoint(name,PD,PD,範囲リスト)} \>2曲線の交点を作る\\ -\hyperlink{cspline}{CRspline(name,リスト,options )} \>単独のCatmull-Rom スプライン曲線を描く\\ -\hyperlink{deqplot}{Deqplot(name,式,変数名,初期値,options])} \>微分方程式の解曲線を描く\\ -\hyperlink{dotfilldata}{Dotfilldata(name , 方向, PD , optionss)} \>領域に点を敷き詰める\\ -\hyperlink{drawsegmark}{Drawsegmark(name,リスト,options)} \>線分に印をつける\\ -\hyperlink{drawsegmark}{Segmark(name,リスト,options)} \>線分に印をつける\\ -\hyperlink{drwpt}{Drawpoint([点,options])} \>点を表示する\\ -\hyperlink{drwpt}{Drwpt([点,options])} \>点を表示する\\ -\hyperlink{ellipseplot}{Ellipseplot(name,list,str,options)} \>楕円を描く\\ -\hyperlink{enclosing}{Enclosing(name , [位置,方向,数式])} \>複数の曲線から閉曲線を描く\\ -\hyperlink{expr}{Expr(文字列)} \>\TeX 数式を書く\\ -\hyperlink{exprrot}{Exprrot(位置,向き,文字列)} \>傾いた\TeX 数式を書く\\ -\hyperlink{framedata}{Framedata(name , リスト)} \>矩形を描く\\ -\hyperlink{framedata}{Framedata2(name , リスト)} \>矩形を描く\\ -\hyperlink{hatchdata}{Hatchdata(name , 方向, PD , optionss)} \>領域に斜線を引く\\ -\hyperlink{htickmark}{Htickmark([横座標 , 方向 , 文字])} \>横軸に目盛りを描く\\ -\hyperlink{hyperbolaplot}{Hyperbolaplot(name,list,str,options)} \>双曲線を描く\\ -\hyperlink{implicitplot}{Implicitplot(name,str,,str,str,options)} \>陰関数のグラフを描く\\ -\hyperlink{joincrvs}{Joincrvs(name, PDリスト, options)} \>2つのプロットデータをつなげたデータを作る\\ -\hyperlink{letter}{Letter(「座標,位置,文字列]のリスト」)} \>文字列を表示する\\ -\hyperlink{letterrot}{Letterrot(「座標,方向,移動量,文字列])} \>文字列を回転して表示する\\ -\hyperlink{lineplot}{Lineplot(name,2点のリスト,options)} \>2点を結ぶ直線を描く\\ -\hyperlink{listplot}{Listplot(name,点のリスト,options)} \>点を線分で結ぶ\\ -\hyperlink{mkbeziercrv}{Mkbeziercrv(name,リスト,options)} \>作図した点を使ってベジエ曲線を描く\\ -\hyperlink{mkbezierptcrv}{Mkbezierptcrv(リスト,options ) } \>制御点を自動配置してベジエ曲線を描く\\ -\hyperlink{mkcircle}{Mkcircle()} \>幾何円のすべてのPD を作成する\\ -\hyperlink{mksegments}{Mksegments()} \> 幾何線分のすべてのPD を作成する\\ -\hyperlink{ovaldata}{Ovaldata(name, 点リスト,optionss)} \>角を丸くした矩形を描く\\ -\hyperlink{ospline}{Ospline(リスト,リスト,options )} \>大島のスプライン曲線を描く\\ -\hyperlink{parabolaplot}{Parabolaplot(name,list,str,options)} \>放物線を描く\\ -\hyperlink{parabolaplot}{Parabolaplot(name,点リスト,options)} \>楕円を描く\\ -\hyperlink{paramark}{Paramark(点リスト,options)} \>角の印を入れる\\ -\hyperlink{paramplot}{Paramplot(name,式,変数と定義域,options)} \>媒介変数で表された曲線を表示する\\ -\hyperlink{partcrv}{Partcrv(name,点1,点2,PD)} \>部分曲線を描く\\ -\hyperlink{plotdata}{Plotdata(name,式,変数と定義域,options)} \>関数のグラフを描く\\ -\hyperlink{pointdata}{Pointdata(name,点リスト,optionss)} \>点データを作る\\ -\hyperlink{polygonplot}{Polygonplot(name,点リスト,整数,options)} \>正多角形を描く\\ -\hyperlink{putintersect}{Putintersect(点名,PD1,PD2)} \>2曲線の交点を作る\\ -\hyperlink{putline}{PutonLine(点名,座標1,座標2)} \>直線上に点を作る\\ -\hyperlink{putoncurve}{PutonCurve(name,PD,初期値)} \>曲線上に点を作る\\ -\hyperlink{putpoint}{Putpoint(点名,座標1,座標2)} \>点を作る\\ -\hyperlink{putseg}{PutonSeg(点名,座標1,座標2)} \>線分上に点を作る\\ -\hyperlink{reflectdata}{Reflectdata(name,PD,点リスト,options)} \>プロットデータの鏡映を作成\\ -\hyperlink{reflectpoint}{Reflectpoint(点,対称点/対称軸)} \>点の鏡映を作成\\ -\hyperlink{rotatedata}{Rotatedate(name,PD,角度,中心,options)} \>プロットデータを回転する\\ -\hyperlink{rotatepoint}{Rotatepoint(点,角度,中心)} \>点の位置を回転する\\ -\hyperlink{rulerscale}{Rulerscale(点,リスト,リスト)} \>目盛を打つ\\ -\hyperlink{scaldedata}{Scaledata(name,PD,x,y,中心,options)} \>点を拡大・縮小する\\ -\hyperlink{scalepoint}{Scalepoint(点,比率ベクトル,中心)} \>点の位置を拡大・縮小する\\ -\hyperlink{shade}{Shade(PDリスト , 数)} \>閉曲線の内部にシェードをかける\\ -\hyperlink{translatedata}{Translatedata(name,PD,ベクトル,options)} \>プロットデータを平行移動する\\ -\hyperlink{translatepoint}{Translatepoint(点,ベクトル)} \>点を平行移動する\\ -\hyperlink{vtickmark}{Vtickmark([横座標 , 方向 , 文字])} \>縦軸に目盛りを描く\\ - - \\ -【微積分など】\\ -\hyperlink{derivative}{Derivative(関数式,変数,値)} \>関数の微分係数を求める\\ -\hyperlink{integrate}{Integrate(関数式,変数,範囲,options)} \>関数の定積分値を求める\\ -\hyperlink{inversefun}{Inversefun(関数式,範囲,値)} \>逆関数値を求める\\ - \\ +\hyperlink{anglemark}{Anglemark(点list, options)} \>角の印を入れる\\ +\hyperlink{arrowdata}{Arrowdata(name.[始点,終点],options)} \>2点間を結ぶ矢線を描く\\ +\hyperlink{arrowhead}{Arrowhead(点,方向,options)} \>点に矢じりだけを描く\\ +\hyperlink{bezier}{Bezier(name, list,list,options )} \>単独のベジェ曲線を描く\\ +\hyperlink{beziersmooth}{Beziersmooth(name , list,options )} \>なめらかなベジェ曲線を描く。その1\\ +\hyperlink{beziersym}{Beziersym(name , list,options )} \>なめらかなベジェ曲線を描く。その2\\ +\hyperlink{bowdata}{Bowdata(点list,options)} \>弓形を描く\\ +\hyperlink{bspline}{Bspline(name,list,options )} \>2次 Bスプライン曲線を描く\\ +\hyperlink{changestyle}{Changestyle(PD list, options)} \>描画オプションを変更する\\ +\hyperlink{circledata}{Circledata(name,点list,options)} \>円または正多角形を描く\\ +\hyperlink{crspline}{CRspline(name,list,options )} \>単独のCatmull-Rom スプライン曲線を描く\\ +\hyperlink{deqplot}{Deqplot(name,式,変数名,初期値,options])} \>微分方程式の解曲線を描く\\ +\hyperlink{dotfilldata}{Dotfilldata(name , 方向, PD , options)} \>領域に点を敷き詰める\\ +\hyperlink{drawsegmark}{Drawsegmark(name,list,options)} \>線分に印をつける\\ +\hyperlink{drwpt}{Drawpoint([点,options])} \>点を表示する\\ +\hyperlink{drwpt}{Drwpt([点,options])} \>点を表示する\\ +\hyperlink{ellipseplot}{Ellipseplot(name,list,str,options)} \>楕円を描く\\ +\hyperlink{enclosing}{Enclosing(name , [位置,方向,数式])} \>複数の曲線から閉曲線を描く\\ +\hyperlink{expr}{Expr(文字列)} \>\TeX 数式を書く\\ +\hyperlink{exprrot}{Exprrot(位置,向き,文字列)} \>傾いた\TeX 数式を書く\\ +\hyperlink{fourierseries}{Fourierseries(name,係数,周期,項数)} \>フーリエ級数を描く\\ +\hyperlink{framedata}{Framedata(name , list)} \>矩形を描く\\ +\hyperlink{hatchdata}{Hatchdata(name , 方向, PD , options)} \>領域に斜線を引く\\ +\hyperlink{htickmark}{Htickmark([横座標 , 方向 , 文字])} \>横軸に目盛りを描く\\ +\hyperlink{hyperbolaplot}{Hyperbolaplot(name,list,str,options)} \>双曲線を描く\\ +\hyperlink{implicitplot}{Implicitplot(name,str,,str,str,options)} \>陰関数のグラフを描く\\ +\hyperlink{invert}{Invert(PD)} \>プロットデータの点を逆順にする(reverseと同じ)\\ +\hyperlink{joincrvs}{Joincrvs(name, PDlist, options)} \>2つのプロットデータをつなげたデータを作る\\ +\hyperlink{letter}{Letter(「座標,位置,文字列]のlist」)} \>文字列を表示する\\ +\hyperlink{letterrot}{Letterrot(「座標,方向,移動量,文字列])} \>文字列を回転して表示する\\ +\hyperlink{lineplot}{Lineplot(name,2点のlist,options)} \>2点を結ぶ直線を描く\\ +\hyperlink{listplot}{Listplot(name,点のlist,options)} \>点を線分で結ぶ\\ +\hyperlink{mkbeziercrv}{Mkbeziercrv(name,list,options)} \>作図した点を使ってベジェ曲線を描く\\ +\hyperlink{mkbezierptcrv}{Mkbezierptcrv(list,options ) } \>制御点を自動配置してベジェ曲線を描く\\ +\hyperlink{mkcircles}{Mkcircles()} \>幾何円のすべてのPD を作成する\\ +\hyperlink{mksegments}{Mksegments()} \> 幾何線分のすべてのPD を作成する\\ +\hyperlink{ospline}{Ospline(list,list,options )} \>大島のスプライン曲線を描く\\ +\hyperlink{ovaldata}{Ovaldata(name, 点list,options)} \>角を丸くした矩形を描く\\ +\hyperlink{parabolaplot}{Parabolaplot(name,list,str,options)} \>放物線を描く\\ +\hyperlink{paramark}{Paramark(点list,options)} \>角の印を入れる\\ +\hyperlink{paramplot}{Paramplot(name,式,変数と定義域,options)} \>媒介変数で表された曲線を描く\\ +\hyperlink{polarplot}{Polarplot(name,式,変数と定義域,options)} \>極座標表示の曲線を描く\\\hyperlink{partcrv}{Partcrv(name,点1,点2,PD)} \>部分曲線を描く\\ +\hyperlink{periodfun}{Periodfun(定義式,周期,options)} \>周期関数のグラフを描く\\ +\hyperlink{plotdata}{Plotdata(name,式,変数と定義域,options)} \>関数のグラフを描く\\ +\hyperlink{pointdata}{Pointdata(name,点list,options)} \>点データを作る\\ +\hyperlink{polygonplot}{Polygonplot(name,点list,整数,options)} \>正多角形を描く\\ +\hyperlink{putintersect}{Putintersect(点名,PD1,PD2)} \>2曲線の交点を作る\\ +\hyperlink{putoncurve}{PutonCurve(name,PD,初期値)} \>曲線上に点を作る\\ +\hyperlink{putonline}{PutonLine(点名,座標1,座標2)} \>直線上に点を作る\\ +\hyperlink{putonseg}{PutonSeg(点名,座標1,座標2)} \>線分上に点を作る\\ +\hyperlink{putpoint}{Putpoint(点名,座標1,座標2)} \>点を作る\\ +\hyperlink{reflectdata}{Reflectdata(name,PD,点list,options)} \>プロットデータの鏡映を作成\\ +\hyperlink{reflectpoint}{Reflectpoint(点,対称点/対称軸)} \>点の鏡映を作成\\ +\hyperlink{rotatedata}{Rotatedata(name,PD,角度,中心,options)} \>プロットデータを回転する\\ +\hyperlink{rotatepoint}{Rotatepoint(点,角度,中心)} \>点の位置を回転する\\ +\hyperlink{rulerscale}{Rulerscale(点,list,list)} \>目盛を打つ\\ +\hyperlink{scaledata}{Scaledata(name,PD,x,y,中心,options)} \>点を拡大・縮小する\\ +\hyperlink{scalepoint}{Scalepoint(点,比率ベクトル,中心)} \>点の位置を拡大・縮小する\\ +\hyperlink{drawsegmark}{Segmark(name,list,options)} \>線分に印をつける\\ +\hyperlink{shade}{Shade(PDlist , 数)} \>閉曲線の内部にシェードをかける\\ +\hyperlink{tangentplot}{Tangentplot(name,PD, 位置)} \>曲線の接線を引く\\ +\hyperlink{translatedata}{Translatedata(name,PD,ベクトル,options)} \>プロットデータを平行移動する\\ +\hyperlink{translatepoint}{Translatepoint(点,ベクトル)} \>点を平行移動する\\ +\hyperlink{vtickmark}{Vtickmark([横座標 , 方向 , 文字])} \>縦軸に目盛りを描く\\ 【作表】\\ -\hyperlink{tabledata}{Tabledata("" , 縦横 ,除外 , options)} \>表の枠を作成する\\ -\hyperlink{tabledatalight}{Tabledatalight("" , 縦横 ,除外 , options)} \>幾何点を持たない表の枠を作成する\\ -\hyperlink{changetablestyle}{ChangeTablestyle(罫線リスト, options)} \>Table の罫線の描画オプションを変更する。\\ +\hyperlink{changetablestyle}{ChangeTablestyle(罫線list, options)} \>Table の罫線の描画オプションを変更する。\\ \hyperlink{findcell}{Findcell(列番号, 行番号)} \>セルの情報listを返す\\ \hyperlink{putcell}{Putcell (列番号, 行番号, 位置, 文字)} \>セルに文字列を入れる\\ -\hyperlink{putcol}{PutcoL (列番号, 位置,文字列リスト)} \>1列に順に文字を書き入れる\\ -\hyperlink{putcolexpr}{PutcoLexpr (列番号, 位置,文字列リスト)} \>1列に順に\TeX 書式の文字を書き入れる\\ -\hyperlink{putrow}{Putrow (行番号, 位置,文字列リスト)} \>1行に順に文字を書き入れる\\ -\hyperlink{putrowexpr}{Putrowexpr (行番号, 位置,文字列リスト)} \>1行に順に\TeX 書式の文字を書き入れる\\ -\hyperlink{settable}{Settable((左上) , 右下)} \>表データを書き出す\\ -\hyperlink{tgrid}{Tgird(セルラベル} \>セル(格子点)の座標を返す\\ +\hyperlink{putcol}{PutcoL (列番号, 位置,文字列list)} \>1列に順に文字を書き入れる\\ +\hyperlink{putcolexpr}{PutcoLexpr (列番号, 位置,文字列list)} \>1列に順に\TeX 書式の文字を書き入れる\\ +\hyperlink{putrow}{Putrow (行番号, 位置,文字列list)} \>1行に順に文字を書き入れる\\ +\hyperlink{putrowexpr}{Putrowexpr (行番号, 位置,文字列list)} \>1行に順に\TeX 書式の文字を書き入れる\\ +\hyperlink{tabledata}{Tabledata("" , 縦横 ,除外 , options)} \>表の枠を作成する\\ +\hyperlink{tabledatalight}{Tabledatalight("" , 縦横 ,除外 , options)} \>幾何点を持たない表の枠を作成する\\ +\hyperlink{tgrid}{Tgrid(セルラベル)} \>セル(格子点)の座標を返す\\ \hyperlink{tlistplot}{Tlistplot(セルラベル1,セルラベル2)} \>セルに斜線を引く\\ - \\ +\vspace{\baselineskip} 【値の取得と入出力】\\ -\hyperlink{crossprod}{Crossprod(リスト,リスト)} \>ベクトルの外積を計算する\\ -\hyperlink{dotprod}{Dotoprod(リスト,リスト)} \>ベクトルの内積を計算する\\ -\hyperlink{findarea}{Findarea(PD)} \>プロットデータで囲まれる部分の面積を求める\\ -\hyperlink{findlength}{Findlength(PD)} \>プロットデータで描く曲線の長さを求める\\ -\hyperlink{intersectcrvs}{Intersectcrvs(PD1,PD2,options)} \>プロットデータを交点のリストを返す\\ -\hyperlink{invert}{Invert(PD)} \>プロットデータの点を逆順にする(reverseと同じ)\\ -\hyperlink{meetcurve}{MeetCurve(PD,x,y)} \>曲線上の点を取得する\\ -\hyperlink{lcrd}{Lcrd()} \>幾何点,リスト点の論理座標を取得する\\ -\hyperlink{pcrd}{Pcrd()} \>幾何点,リスト点の物理(表示)座標を取得する\\ -\hyperlink{nearestpt}{Nearestpt(PD,PD)} \>2曲線間の最も近い点を取得する\\ -\hyperlink{nearestptcrv}{Nearestptcrv(点,PD)} \>点に一番近い曲線上の点を取得する\\ -\hyperlink{numptcrv}{Numptcrv(PD)} \>曲線PD の節点データの個数を取得する\\ -\hyperlink{paramoncurve}{ParamonCurve(PD,n,PtL)} \>PD上にある点P のデータを取得する\\ -\hyperlink{pointoncrv}{Pointoncrv(数,PD)} \>パラメータ値をもつプロットデータ上の点\\ -\hyperlink{ptcrv}{Ptcrv(n,PD)} \>曲線PD のn 番目の節点を取得する\\ -\hyperlink{ptstart}{Ptstart(PD)} \>プロットデータの始点を取得する\\ -\hyperlink{ptstart}{Ptend(PD)} \>プロットデータの終点を取得する\\ -\hyperlink{readoutdata}{ReadOutData(ファイル名)} \>外部データを読み込む\\ -\hyperlink{sprintf}{Sprintf(実数,長さ)} \>小数点以下の長さを固定した文字列に変換\\ -\hyperlink{writetosci}{WritetoSci(ファイル名,options)} \>すべてのソースを Scilab 用に書き出す\\ -\hyperlink{writetosci}{WritetoScibody(ファイル名)} \>ボディのソースを Scilab 用に書き出す\\ -\hyperlink{makeshell}{Makeshell(ファイル名)} \>Macのシェルスクリプトを書き出す\\ -\hyperlink{makeshell}{Makebat(ファイル名)} \>Windowsのバッチファイルを書き出す\\ -\hyperlink{textformat}{Textformat(数,桁数)} \>小数点以下の桁数を指定して数値を文字列化する\\ -\hyperlink{viewtex}{Viewtex()} \>\TeX のソースファイルを書き出す。引数なし\\ - \hyperlink{workprocess}{Workprocess()} \>作図の経過を取得する\\ - \\ +\hyperlink{crossprod}{Crossprod(list,list)} \>ベクトルの外積を計算する\\ +\hyperlink{derivative}{Derivative(関数式,変数,値)} \>関数の微分係数を求める\\ +\hyperlink{dotprod}{Dotprod(list,list)} \>ベクトルの内積を計算する\\ +\hyperlink{extractdata}{Extractdata(データ名,属性)} \>ReadOutDataで読み込んだデータに属性をつける。\\ +\hyperlink{findarea}{Findarea(PD)} \>プロットデータで囲まれる部分の面積を求める\\ +\hyperlink{findlength}{Findlength(PD)} \>プロットデータで描く曲線の長さを求める\\ +\hyperlink{integrate}{Integrate(関数式,変数,範囲,options)} \>関数の定積分値を求める\\ +\hyperlink{intersectcrvs}{Intersectcrvs(PD1,PD2)} \>プロットデータの交点の座標listを返す\\ +\hyperlink{intersectcrvspp}{IntersectcrvsPp(PD1,PD2)} \>プロットデータの交点のパラメータlistを返す\\ +\hyperlink{inversefun}{Inversefun(関数式,範囲,値)} \>逆関数値を求める\\ +%\hyperlink{makeshell}{Makeshell(ファイル名)} \>Macのシェルスクリプトを書き出す\\ +%\hyperlink{makeshell}{Makebat(ファイル名)} \>Windowsのバッチファイルを書き出す\\ +\hyperlink{nearestpt}{Nearestpt(PD,PD)} \>2曲線間の最も近い点を取得する\\ +\hyperlink{nearestptcrv}{Nearestptcrv(点,PD)} \>点に一番近い曲線上の点を取得する\\ +\hyperlink{numptcrv}{Numptcrv(PD)} \>曲線PD の節点データの個数を取得する\\ +\hyperlink{paramoncrv}{ParamonCurve(PD,n,PtL)} \>PD上にある点P のデータを取得する\\ +\hyperlink{pointoncrv}{Pointoncrv(数,PD)} \>パラメータ値をもつプロットデータ上の点\\ +\hyperlink{ptcrv}{Ptcrv(n,PD)} \>曲線PD のn 番目の節点を取得する\\ +\hyperlink{ptstart}{Ptstart(PD)} \>プロットデータの始点・終点を取得する\\ +\hyperlink{readoutdata}{ReadOutData(ファイル名)} \>外部データをPDとして読み込む\\ +\hyperlink{viewtex}{Viewtex()} \>\TeX のソースファイルを書き出す。引数なし\\ +\hyperlink{workprocess}{Workprocess()} \>作図の経過を取得する\\ +\hyperlink{writeoutdata}{WriteOutData()} \>PDデータを書き出す\\ +\vspace{\baselineskip} 【その他】\\ -\hyperlink{assign}{Assign(文字列)} \>文字列中のある文字を値で置き換える\\ -\hyperlink{bbdata}{BBdata(ファイル名)} \>画像のサイズを求める\\ -\hyperlink{changework}{Changework(パス)} \>作業ディレクトリを変更する\\ -\hyperlink{com0th}{Com0th(コマンド)} \>ScilabのOpenfileの前に置くコマンドを定義する\\ -\hyperlink{com1st}{Com1st(コマンド)} \>ScilabのOpenfileの前に置くコマンドを定義する\\ -\hyperlink{com2nd}{Com2nd(コマンド)} \>ScilabのOpenfileのあとに置くコマンドを定義する\\ -\hyperlink{com2ndpre}{Com2ndpre(コマンド)} \>ScilabのOpenfileのあとに置くコマンドを定義する\\ -\hyperlink{dashline}{Dashline(PD名)} \>プロットデータを破線で描く\\ -\hyperlink{dottedline}{Dottedline(PD名)} \>プロットデータを点線で描く\\ -\hyperlink{drwline}{Drwline(PD名)} \>プロットデータを実線で描く\\ +\hyperlink{assign}{Assign(文字列)} \>文字列中のある文字を値で置き換える\\ +\hyperlink{bbdata}{BBdata(ファイル名)} \>画像のサイズを求める\\ +%\hyperlink{com0th}{Com0th(コマンド)} \>RのOpenfileの前に置くコマンドを定義する\\ +%\hyperlink{com1st}{Com1st(コマンド)} \>RのOpenfileの前に置くコマンドを定義する\\ +%\hyperlink{com2nd}{Com2nd(コマンド)} \>RのOpenfileのあとに置くコマンドを定義する\\ +%\hyperlink{com2ndpre}{Com2ndpre(コマンド)} \>RのOpenfileのあとに置くコマンドを定義する\\ +\hyperlink{cindyname}{Cindyname()} \>作図しているファイル名を取得する。\\ +\hyperlink{colorcode}{Colorcode(文字1,文字2,color)} \>カラーコードの変換\\ +\hyperlink{dqq}{Dqq(文字列)} \>文字列の前後に\verb|"|をつける。\\ +\hyperlink{factorial}{Factorial(n)} \>nの階乗を計算する。\\ +\hyperlink{norm}{Norm(ベクトル)} \>ベクトルの大きさを計算する。\\ \hyperlink{figpdf}{Figpdf(option)} \>出力枠サイズのPDFを作る\\ -\hyperlink{helplist}{Helplist()} \>ヘルプデータを作る\\ -\hyperlink{help}{Help(str)} \>コマンドヘルプを表示する\\ -\hyperlink{helpkey}{Helpkey(str)} \>キーワードで関数を検索する\\ -\hyperlink{help}{Ketcindylogo()} \>\ketcindy のロゴを書き出す\\ +\hyperlink{help}{Help(str)} \>コマンドヘルプを表示する\\ +\hyperlink{helpkey}{Helpkey(str)} \>キーワードで関数を検索する\\ \hyperlink{indexall}{Indexall(str1,str2)} \>文字列 str1 から str2 を検索しその位置をすべて返す\\ -\hyperlink{op}{Op(n,list)} \> リストまたは文字列から要素を抜き出す\\ +\hyperlink{op}{Op(n,list)} \> listまたは文字列から要素を抜き出す\\ +\hyperlink{isptselected}{Isptselected(点名)} \>点が選択されていればtrueを返す\\ +\hyperlink{isptselected}{Ptselected(点名)} \>点が選択されていればtrueを返す\\ +\hyperlink{slider}{Slider()} \>スライダを作る\\ +\hyperlink{sprintf}{Sprintf(実数,長さ)} \>小数点以下の長さを固定した文字列に変換\\ +\hyperlink{strsplit}{Strsplit(文字列,文字)} \>文字列を分解する。\\ \hyperlink{texcom}{Texcom(コード)} \>\TeX のコードを書き出す\\ -\hyperlink{windispg}{Windispg()} \>定義されたプロットデータを描画面に描く\\ - \\ +\hyperlink{textformat}{Textformat(数,桁数)} \>小数点以下の桁数を指定して数値を文字列化する\\ +\hyperlink{windispg}{Windispg()} \>定義されたプロットデータを描画面に描く\\ +\vspace{\baselineskip} 【Rとの連携】\\ \hyperlink{boxplot}{Boxplot(名前,データ,位置,高さ,option)} \>箱ひげ図を描く\\ -\hyperlink{calcbyr}{CalcbyR(変数名,コマンド列,option)} \>Rのコマンドを実行して結果を返す\\ +\hyperlink{rfun}{Rfun(変数名,コマンド,引数, option)} \>Rの1つコマンドを実行して結果を返す\\ +\hyperlink{calcbyr}{CalcbyR(変数名,コマンド列, option)} \>Rのコマンド列を実行して結果を返す\\ \hyperlink{histplot}{Histplot(name,data)} \>ヒストグラムを描く\\ \hyperlink{plotdatar}{PlotdataR(name,式,変数)} \>Rの関数のグラフを描く\\ \hyperlink{plotdiscr}{PlotdiscR(name,式,変数)} \>離散型のグラフを描く\\ \hyperlink{readcsv}{Readcsv(name,filename,option)} \>csvファイルを読む\\ -\hyperlink{scatterplot}{Scatterplot(name,filename,option)} \>2次元データを読み込み,散布図を描く\\ - \\ +\hyperlink{scatterplot}{Scatterplot(name,filename,option)} \>2次元データを読み込み,散布図を描く\\ +\vspace{\baselineskip} 【Maximaとの連携】\\ -\hyperlink{calcbyM}{CalcbyM(name,リスト,option)} \>Maximaのスクリプトを実行する\\ -\hyperlink{example}{Example("Mxfun",文字)} \>Mxfunの使用例を表示\\ -\hyperlink{mxbatch}{Mxbatch(リスト)} \>Maximaの外部スクリプト用コマンドを作る\\ -\hyperlink{mxfun}{Mxfun(name,式,リスト,option)} \>Maximaの関数を実行する\\ +\hyperlink{calcbyM}{CalcbyM(name,list,option)} \>Maximaのスクリプトを実行する\\ +%\hyperlink{example}{Example("Mxfun",文字)} \>Mxfunの使用例を表示\\ +\hyperlink{mxbatch}{Mxbatch(list)} \>Maximaの外部スクリプト用コマンドを作る\\ +\hyperlink{mxfun}{Mxfun(name,式,list,option)} \>Maximaの関数を実行する\\ \hyperlink{mxtex}{Mxtex(num,式)} \>式をTeX書式にする\\ - \\ +\vspace{\baselineskip} 【Risa/Asirとの連携】\\ -\hyperlink{calcbyA}{CalcbyA(name,リスト,option)} \>Risa/Asirのスクリプトを実行する\\ -\hyperlink{asirfun}{Asirfun(name,式,リスト,option)} \>Risa/Asirの関数を実行する\\ - \\ +\hyperlink{asirfun}{Asirfun(name,式,list,option)} \>Risa/Asirの関数を実行する\\ +\hyperlink{calcbyA}{CalcbyA(name,list,option)} \>Risa/Asirのスクリプトを実行する\\ +\vspace{\baselineskip} 【FriCASとの連携】\\ -\hyperlink{calcbyF}{CalcbyF(name,リスト,option)} \>FriCASのスクリプトを実行する\\ -\hyperlink{frfun}{Frfun(name,式,リスト,option)} \>FriCASの関数を実行する\\ - \\ +\hyperlink{calcbyF}{CalcbyF(name,list,option)} \>FriCASのスクリプトを実行する\\ +\hyperlink{frfun}{Frfun(name,式,list,option)} \>FriCASの関数を実行する\\ +\vspace{\baselineskip} 【MeshLabとの連携】\\ \hyperlink{mkobjcmd}{Mkobjcmd(name,式,option)} \>厚みを持たない曲面のコマンドを作成\\ \hyperlink{mkobjcrvcmd}{Mkobjcrvcmd(name,PD,option)} \>空間曲線のコマンドを作成\\ @@ -6038,65 +7562,67 @@ arctan2(B.xy-A.xy) で角を取得することもできる。この場合の戻 \hyperlink{mkobjsymbcmd}{Mkobjsymbcmd(PD, 実数,実数,vec,vec)} \>文字等のコマンドを作成\\ \hyperlink{mkobjthickcmd}{Mkobjthickcmd(name,式)} \>厚みを持つ曲面のコマンドを作成\\ \hyperlink{mkviewobj}{Mkviewobj(name,PD, options)} \>obj ファイルを作成\\ - \\ +\vspace{\baselineskip} 【表計算ソフトとの連携】\\ -\hyperlink{tab2list}{Tab2list(str,option)} \>str の内容をリストに変換する\\ -\hyperlink{dispmat}{Dispmat(list)} \>リストの内容を行列型にコンソールに表示する\\ +\hyperlink{dispmat}{Dispmat(list)} \>listの内容を行列型にコンソールに表示する\\ +\hyperlink{tab2list}{Tab2list(str,option)} \>str の内容をlistに変換する\\ \hyperlink{writecsv}{Writecsv(namelist,data,option)} \>dataの内容をcsvファイルに書き出す\\ - \\ -%\hypertarget{functionlist3d}{} - -【KeTCindy3D 設定・定義】\\ -\hyperlink{ketinit3d}{Ketinit3d()} \>KeTCindy3Dの使用宣言\\ -\hyperlink{start3d}{Start3d()} \>3Dの開始\\ - \\ -【KeTCindy3D 描画】\\ -\hyperlink{bezier3d}{Bezier3d(name, リスト, リスト)} \>空間ベジェ曲線を描く\\ -\hyperlink{changstyle3d}{Changstyle3d(リスト, リスト)} \>3dプロットデータの属性を変更\\ -\hyperlink{concatobj}{Concatob(リスト,option)} \>いくつかのobjデータを結合\\ -\hyperlink{crvsfparadata}{Crvsfparadata(name,PD,PD2,式,opt,opt)} \>曲線の曲面による陰線処理\\ -\hyperlink{datalist}{Datalist2d()} \>画面に描かれているすべてのプロットデータ\\ -\hyperlink{datalist}{Datalist3d()} \>画面に描かれているすべてのプロットデータ\\ -\hyperlink{dist3d}{Dist3d(点名,点名)} \>空間の2点の距離\\ -\hyperlink{drawpoint3d}{Drawpoint3d(座標)} \>空間点を描く\\ -\hyperlink{embed}{Embed(name,PD,式)} \>埋め込みデータ作成\\ -\hyperlink{intersectcrvsf}{Intersectcrvsf(name,PD,式)} \>曲線と曲面の交点を求める\\ -\hyperlink{intersectsgpL}{IntersectsgpL(点名,線分,面,描画方法)} \>空間の直線と平面の交点\\ -\hyperlink{invparapt}{Invparapt(座標,PD)} \>描画面座標に対応する曲線上の座標\\ -\hyperlink{mkbezierptcrv3d}{Mkbezierptcrv3d(点リスト)} \>制御点を自動的にとる空間ベジェ曲線\\ -\hyperlink{nohiddenbyfaces}{Nohiddenbyfaces(name,PD,PD,opt1,opt2)} \>多面体と空間曲線を陰線処理\\ -\hyperlink{parapt}{Parapt(座標)} \>点の投影面での座標\\ -\hyperlink{partcrv3d}{Partcrv3d(name,始点,終点,PD)} \>曲線PDの部分曲線を作る\\ -\hyperlink{perpplane}{Perpplane(点名, 点, ベクトル,option)} \>点を通り垂直な平面上の基準点\\ -\hyperlink{perppt}{Perppt(点名,点,点リスト,option)} \>平面に下ろした垂線の足\\ -\hyperlink{phparadata}{Phparadata(name,name2,options)} \>多面体を陰線処理して描く\\ -\hyperlink{projcoordpara}{Projcoordpara()} \>投影座標を求める\\ -\hyperlink{putaxes3d}{Putaxes3d([x,y,z])} \>軸上に幾何点をとる\\ -\hyperlink{putonCurve3d}{PutonCurve3d(点名,PD)} \>空間曲線上に点をとる\\ -\hyperlink{putonseg3d}{Putonseg3d(点名,点1,点2)} \>線分上に点をとる\\ -\hyperlink{putpoint3d}{Putpoint3d(リスト,option)} \>空間点をとる\\ -\hyperlink{readobj}{Readobj(ファイル名)} \>objファイルを読み込む\\ -\hyperlink{reflectpoint3d}{Reflectpoint3d(点,リスト)} \>点を鏡映\\ -\hyperlink{rotate3pt}{Rotate3pt( 点,vec,角度,点)} \>空間点を回転\\ -\hyperlink{rotatedata3d}{Rotatedatat3d(name,PD,vec,角度,点)} \>プロットデータを回転\\ -\hyperlink{sf3data}{Sf3data(name, リスト,options)} \>陰線処理なしの空間曲面を描く\\ -\hyperlink{sfbdparadata}{Sfbdparadata(name, 式,options)} \>曲面を陰線処理して描く\\ -\hyperlink{skeletondatacindy}{Skeletondatacindy(name,PD,PD,options)} \>スケルトン処理のデータ作成\\ -\hyperlink{skeletonparadata}{Skeletonparadata(name,PD,PD,options)} \>スケルトン処理のデータ作成\\ -\hyperlink{spacecurve}{Spacecurve(name, 式, 定義域,options)} \>空間曲線のデータ作成\\ -\hyperlink{spaceline}{Spaceline(リスト)} \>空間の折線データ作成\\ -\hyperlink{translatedata3d}{Translatedata3d(name,PD, 平行移動量)} \>空間プロットデータを平行移動\\ -\hyperlink{translatept3d}{Translatept3d(座標,平行移動量)} \>空間点を平行移動\\ -\hyperlink{vertexedgeface}{VertexEdgeFace(面データ,option)} \>頂点と面から辺を求め,辺を描く\\ -\hyperlink{wireparadata}{Wireparadata(name,PD,式,int,int,opt,opt)} \>曲面のワイヤフレームを陰線処理\\ -\hyperlink{xyzax3data}{Xyzax3data(name,文字,文字,文字,options)} \>座標軸の表示\\ -\hyperlink{xyzcoord}{Xyzcoord(P.x,P.y,Pz.y)} \>主副画面で決まる点の座標\\ - \\ -【KeTCindymv】\\ -\hyperlink{moviedata}{Moviedata(str1,str2,options)} \>動画データの作成\\ -\hyperlink{setpara}{Setpata(str)} \>パラパラ動画のタイトル指定\\ +\vspace{\baselineskip} +【アニメーション】\\ +%\hyperlink{moviedata}{Moviedata(str1,str2,options)} \>動画データの作成\\ +\hyperlink{setpara}{Setpata(str)} \>パラパラ動画のタイトル指定\\ +【スライド】\\ +\hyperlink{settitle}{Settitle(タイトルlist,options)} \>スライドのタイトル設定\\ +【KeTCindy3D 設定・定義】\\ +\hyperlink{ketinit3d}{Ketinit3d()} \>KeTCindy3Dの使用宣言\\ +\hyperlink{isangle}{Isangle} \>角度スライダが選択されているか\\ +\hyperlink{start3d}{Start3d()} \>3Dの開始\\ +\hyperlink{startsurf}{Startsurf} \>曲面描画の初期化\\ +\vspace{\baselineskip} +【KeTCindy3D 描画】\\ +\hyperlink{bezier3d}{Bezier3d(name, list, list)} \>空間ベジェ曲線を描く\\ +\hyperlink{changestyle3d}{Changestyle3d(list, list)} \>3dプロットデータの属性を変更\\ +\hyperlink{concatobj}{Concatobj(list,option)} \>いくつかのobjデータを結合\\ +\hyperlink{crvsfparadata}{Crvsfparadata(name,PD,PD2,式,opt,opt)} \>曲線の曲面による陰線処理\\ +\hyperlink{datalist}{Datalist2d()} \>画面に描かれているすべてのプロットデータ\\ +\hyperlink{datalist}{Datalist3d()} \>画面に描かれているすべてのプロットデータ\\ +\hyperlink{dist3d}{Dist3d(点名,点名)} \>空間の2点の距離\\ +\hyperlink{drawpoint3d}{Drawpoint3d(座標)} \>空間点を描く\\ +\hyperlink{embed}{Embed(name,PD,式)} \>埋め込みデータ作成\\ +\hyperlink{execcmdc}{ExeccmdC(name,options1,options2)} \>C言語で命令実行\\ +\hyperlink{intersectcrvsf}{Intersectcrvsf(name,PD,式)} \>曲線と曲面の交点を求める\\ +\hyperlink{intersectsgpL}{IntersectsgpL(点名,線分,面,描画方法)} \>空間の直線と平面の交点\\ +\hyperlink{invparapt}{Invparapt(座標,PD)} \>描画面座標に対応する曲線上の座標\\ +\hyperlink{mkbezierptcrv3d}{Mkbezierptcrv3d(点list)} \>制御点を自動的にとる空間ベジェ曲線\\ +\hyperlink{nohiddenbyfaces}{Nohiddenbyfaces(name,PD,PD,opt1,opt2)} \>多面体と空間曲線を陰線処理\\ +\hyperlink{parapt}{Parapt(座標)} \>点の投影面での座標\\ +\hyperlink{partcrv3d}{Partcrv3d(name,始点,終点,PD)} \>曲線PDの部分曲線を作る\\ +\hyperlink{perpplane}{Perpplane(点名, 点, ベクトル,option)} \>点を通り垂直な平面上の基準点\\ +\hyperlink{perppt}{Perppt(点名,点,点list,option)} \>平面に下ろした垂線の足\\ +\hyperlink{phparadata}{Phparadata(name,name2,options)} \>多面体を陰線処理して描く\\ +\hyperlink{pointdata3d}{Pointdata3d(名前,点list,options)} \>空間点のデータを作成する\\ +\hyperlink{putaxes3d}{Putaxes3d([x,y,z])} \>軸上に幾何点をとる\\ +\hyperlink{putonCurve3d}{PutonCurve3d(点名,PD)} \>空間曲線上に点をとる\\ +\hyperlink{putonseg3d}{Putonseg3d(点名,点1,点2)} \>線分上に点をとる\\ +\hyperlink{putpoint3d}{Putpoint3d(list,option)} \>空間点をとる\\ +\hyperlink{readobj}{Readobj(ファイル名)} \>objファイルを読み込む\\ +\hyperlink{reflectdata3d}{Reflectdata3d(点,PDlist,list,options)} \>PDを鏡映\\ +\hyperlink{reflectpoint3d}{Reflectpoint3d(点,list)} \>点を鏡映\\ +\hyperlink{rotatedata3d}{Rotatedata3d(name,PD,vec,角度,点)} \>プロットデータを回転\\ +\hyperlink{rotatepoint3d}{Rotatepoint(点 , vec , 角度 , 点)} \>点を回転\\ +\hyperlink{scaledata3d}{Scaledata3d(点, vec, 中心)} \>プロットデータを拡大/縮小\\ +\hyperlink{scalepoint3d}{Scalepoint3d(点, vec, 中心)} \>点の位置を拡大/縮小\\ +\hyperlink{sf3data}{Sf3data(name, list,options)} \>陰線処理なしの空間曲面を描く\\ +\hyperlink{sfbdparadata}{Sfbdparadata(name, 式,options)} \>曲面を陰線処理して描く\\ +\hyperlink{skeletonparadata}{Skeletonparadata(name,PD,PD,options)} \>スケルトン処理のデータ作成\\ +\hyperlink{spacecurve}{Spacecurve(name, 式, 定義域,options)} \>空間曲線のデータ作成\\ +\hyperlink{spaceline}{Spaceline(name,list)} \>空間の折線データ作成\\ +\hyperlink{translatedata3d}{Translatedata3d(name,PD, 平行移動量)} \>空間プロットデータを平行移動\\ +\hyperlink{translatepoint3d}{Translatepoint3d(座標,平行移動量)} \>空間点を平行移動\\ +\hyperlink{vertexedgeface}{VertexEdgeFace(面データ,option)} \>頂点と面から辺を求め,辺を描く\\ +\hyperlink{wireparadata}{Wireparadata(name,PD,式,int,int,opt,opt)} \>曲面のワイヤフレームを陰線処理\\ +\hyperlink{xyzax3data}{Xyzax3data(name,文字,文字,文字,options)} \>座標軸の表示\\ +\hyperlink{xyzcoord}{Xyzcoord(P.x,P.y,Pz.y)} \>主副画面で決まる点の座標 \end{tabbing} - -%3D第3節 \end{document} |