01 KeTCindyを始める
詳しくは KetCindy Home( https://s-takato.github.io/ketcindyorg/indexj.html ) へ
KeTCindyはじめの一歩
KeTCindyをインストールしてできた,ketcindyフォルダの中に,「template1basic.cdy」といファイルがあります。名前の通り,基本的なひな形です。これを元にして作図をしていきます。
まず template1basic.cdy のコピーを作りましょう。ketcindyフォルダでもいいですし,デスクトップでもよいです。コピーができたら,適当に名前を変えてダブルクリックして開きます。ここでは innercircle.cdy としました。Cinderellaが起動しますが,単体で起動するより少し時間がかかります。KeTCindyのための設定をするからです。少し待つと,画面に三角形が描かれたCinderellaの画面になります。図が表示されたら,Ctrl+9 ( Windows ) / ⌘ +9 ( Mac ) でスクリプトエディタを開きます。 2つの画面はマルチウィンドウにしておくのがよいでしょう。
この三角形で Cinderella の作図機能を用いて内心を求め,内接円を描きます。
まず,スクリプトエディタの Listplot([A,B,C,A]); の行頭にスラッシュを2本書きいれて,Shift+Enter で実行します。こうすると,この行はコメント行となり実行されない行になります。その結果,三角形が消えて点だけが残ります。
画面上部の作図ツールから「線分を加える」をクリックして選択し,点 A から点 Bへドラッグすると線分が描かれます。同様にして,BC, CA を引きましょう。
次に,角の二等分線を引きます。「角の二等分線を加える」ツールを選択し,辺 BA,BCを順にクリックすると角 ABC の二等分線が引かれます。 このとき,次図左のように,該当する角を表すガイドが出ます。
同様にして,角 A の二等分線を引き,「交点を求める」ツールをクリックして,2本 の二等分線を順にクリックすると交点が求められます。(角 A の二等分線を引いた直後はこれ が選択状態にあるので,角 B の二等分線をクリックすればよい)
内接円の半径を決めるために,辺 AC に垂直で点 D を通る直線を描きます。「垂線を加える」 ツールを選択し,辺 AC 上でマウスボタンを押し,そのまま点 D へドラッグすると垂線が引けます。
最後に,垂線と辺 AC の交点を求めます。
図が描かれたら,「要素を動かす」ツールを選択して,始めの状態(動かすモード) に戻しておきます。
これで内心の作図と半径の作図ができました。内心円は描かなくてもよいです。
スクリプトエディタに戻り,先ほど書いた // を消して Listplot([A,B,C,A]); を有効 にし,次のスクリプトを追加し,Shift+Enter で実行すると,内接円が描かれます。
Circledata([D,E]);
Pointdata("1",[D],["size=3"]);
Letter([A,"sw","A",B,"ne","B",C,"se","C",D,"ne2","I"]);
画面左上の「Figure」ボタンをクリックすると,プレビュー用の PDF ができて表示されます。描画面で点 B をドラッグして三角形の形を変えれば,それに応じて出力する図も変えることができます。
先ほど書いたスクリプトの説明をしておきましょう。
内心円の中心を描くには,
Pointdata("1",[D],["size=3"]);
を書きます。点のデータを作るのです。"1" はそのデータの番号,"size=3" は点の大きさ指定です。
頂点と内心の名前を次のスクリプトで書きます。
Letter([A,"n","A",C,"sw","B",B,"se","C",D,"ne2","I"]);
点は4つあります。それぞれ,位置,方向,名前 をセットにします。
点Aは,作図されているAにします。そこで,点A上に文字Aを書くことにします。「位置」はAで,「方向」が東西南北の北側(nothのn)として "n" ,文字が "A" ですので,A,"n","A" でワンセットです。
B,Cも同様です。点Dは内心 I にし,これらをコンマで区切って並べます。前後を [ ] でくくります。"ne2"の2 は距離を表し,eよりe2の方が東方向に遠くなります。
作図部分のスクリプトの全体を示しておきましょう。
Listplot([A,B,C,A]);
Circledata([D,E]);
Pointdata("1",D,["size=3"]);
Letter([A,"n","A",C,"sw","B",B,"se","C",D,"ne2","I"]);
KeTCindyの仕組み
KeTCindyを使いこなすには,どのようにしてTeXファイルが作られるかを知っておく必要があるでしょう。仕組みがわかれば,どこにファイルを置くかは自分で決められますし,自分が使いやすい環境を構築することができます。
KeTCindyの概念図
Cinderella は,幾何・物理実験室(CindyLab)・プログラミング言語(CindyScript)の3本柱からなるソフトウェアです。図は,Cinderellaの作図ツールとCindyscriptを使って描きます。
KeTCindyは,Cinderellaの幾何(作図機能)で作成した図をR用のデータファイルとして出力する,Cindyscriptで記述したプログラムです。
概念図で,KeTCindyから左に出ている矢印の先に「R」があります。KeTCindyで出力したデータファイルは,Rで処理してTeXファイルを生成します。この時に使うのが KeTpic(ケトピック)です。生成されたTeXファイルは,\input{filename} (Windowsでは ¥input{filename}) でTeX文書の中に取り込むことができます。
Rで処理する過程は,バッチファイル(Windows)やシェルファイル(Mac)で一括して行えるようになっています。
KeTCindyのまわりにあるのはいろいろな数式処理ソフトです。双方向矢印になっているのは,KeTCindyがこれらと連携して計算を行うことを示します。たとえば,微積分に関することはMaximaで計算するのです。これによって,CinderellaのCindyscriptだけではできないような計算も行うことが可能になります。
KeTCindyを使う初期設定
KeTCindyを使う初期設定を,Cindyscript エディタの Initilizaion スロットに書きます。template1basic.cdy を開き,Ctrl+9(Command+9) でスクリプトエディタを開くと,左の方に並んでいるのがスロットです。表示されていない場合は,境界線をドラッグします。この中の KETlib というぺージにすでにこれが書かれています。
出力ファイル
KETCindyでどのようにファイルが作られ,処理されるのかを解説します。
CinderellaとKETCindyの関数を用いて描いた図は,内部関数によって,R用の拡張子 r のファイルに書き出されます。書き出される先は,作図をしているファイルと同じディレクトリ(フォルダ)にある fig フォルダです。このフォルダはKeTCindyが作ります。
次に,この fig.r をRで処理してTeXのファイルに書き出し,さらにPDFを作って表示します。kc()というコマンドにより,これらの手続きをバッチファイルまたはシェルファイルで自動的に実行するようになっています。
fig フォルダにはいくつかのファイルが作られるでしょう。その中で,***.tex が図のファイル,***main.tex が ***.tex をブラウズするPDFを作成するためのファイルです。
この一連の操作を行うために,ひな形(template)の cdy ファイル(Cinderellaのファイル)には,画面上にボタンが用意されています。
template1basic.cdyには「Figure」と「Parent」の2つがあり,これが基本です。「Figure」ボタンをクリックすると,内部関数が実行され,先ほどの ***.tex と ***main.tex が書き出されます。「Parent」ボタンは,図だけのPDFを作るときに使います。
template2advanced.cdy には多くのボタンがありますが,これを全部使うというのではなく,サンプルとして用意しているものです。
プロットデータについて
KeTCindyを使うにあたって,プロットデータについて理解しておくとよいでしょう。
KeTCindyでは(一般に図形を描くときもそうですが)曲線を描くときに「プロットデータ」というものを作ります。
たとえば,2点間を結ぶ線分は,両端の座標があれば描けます。円は頂点の多い正多角形として描きます。
Listplot([A,B])
とすると,コンソールに generate Listplot sgAB と表示されますが,これが,「プロットデータ sgAB を作った」という表示です。プロットデータ sgAB の内容は
println(sgAB)
でコンソールに表示できます。たとえば次のようになります。
[[-4,-3],[2,3]]
両端の座標のリストです。
Circledata([A,B])では crAB という名前のプロットデータができ,内容はBの座標から始めて円周上の点が51個並びます。
[[3,2],[2.98,2.38],[2.91,2.75],[・・・・・
描画関数には Num というオプションがあって,その曲線を描くプロットデータの座標の個数を指定できます。
Circledata([A,B],["Num=4"]);
とすると,画面には正方形が描かれ,プロットデータは次のようになります。
[[3,2],[0,5],[-3,2],[0,-1],[3,2]]
多角形と同じですね。
関数のグラフも同様です。
このように,図形がどのように描かれるかを知っておくと,曲線をつないだり(Joincrvs()),曲線の一部を切り取ったり (Partcrv()) する関数の働きの意味もわかってきます。