Cinderellaで数学:いろいろな曲線:交叉平行四辺形を利用した円錐曲線作図器
作図器の写真と解説図
「曲線の事典」(礒田正美他編著:共立出版 2009)掲載の,交叉平行四辺形を利用した楕円と双曲線の作図器です。
AD = BC,AB = CDの交叉平行四辺形ABCD が与えられ,辺AB が平面上に固定され,点Dは点Aを中心に,点Cは点Bを中心に回転する。点Dが点Aを中心に回転するとき,点Cは点Bを中心に回転し,直線 ADとBCの交点Pは楕円か双曲線をかく。
辺 ADと辺BCが交わるときは楕円,辺 ABと辺CDが交わるときは双曲線を描きます。次がそれぞれの作図器の写真と図です。


楕円の作図器の写真には交叉平行四辺形が2つありますが,上の方は楕円の描画には関係ありません。また,双曲線の作図器と図は縦横が逆です。
Cinderellaで作図
Cinderellaでの作図は簡単ですが,ちょっとした工夫が必要です。ABは固定されているので,まず適当な長さの線分ABを引きます。次にCとDですが,AD=BC なので,固定した半径の円を描くツールでAおよびBを中心として円を描きます。それぞれの円周上にCとDをとるのですが,Dが動点なので先にとらなくてはいけません。したがって作図順ではCとDが逆になります。次に,AB=CD は,コンパスツールでABの長さをとってCを中心に円を描きます。これで,交叉平行四辺形が描けるので交点を取って,軌跡を表示します。

次に,辺 ABと辺CDが交わるように作図します。こんども,CとDが逆になります。
線分ABと,Aを中心とする円,円上の点Cをとったら,コンパスツールを使って半径がACと同じ円をBを中心に描き,半径がABと同じ円をCを中心に描きます。その2つの円の交点がDです。直線ACとBDを描いて交点を求め,軌跡を表示します。

Web上にある作図器の写真を見てみましょう。
左側の目次から「円錐曲線」に行くと「交叉四辺形を利用した円錐曲線」があります。カラーで,写真をクリックすれば拡大することができます。この写真を見ながら作図器を模して作ったのが次のものです。実際の作図器ではリンク機構の可動域が狭いので,描けるのは双曲線の一部だけです。
作図器を模す
Cinderellaの作図を元に,作図器の写真を見て模したものを作るには,CindyScriptを使います。
次の図は,Cinderellaの作図ツールで描いた線分ABと,それを棒にしたものです。ABは,線分ツールで描いたもの,CDはインスペクタで線の色と太さを変えたもの,EFとGHはCindyScriptで描いたものです。いずれも点の大きさは小さくし,線分のラベルは非表示にしています。

CDでは,先端が丸くなっているのに対し,EFとGHの棒では四角になっているのがわかるでしょうか。さらに,GHとEFより先端からはみ出ている分が違います。GHではもとの線分は非表示にしています。先端からのはみ出しは,CDのようにインスペクタで太さを変える他,はみ出しの長さも変えることができますので,CindyScriptを使った場合との違いは先端の形状と,色です。インスペクタでの色は色サンプルから選びますが,CindyScriptを使えばそれ以外の色も作れます。
スクリプトは通りです。この関数を Initialization スロットに書き,Draw スロットで使います。
bar(p1, p2, ln, th, col, alp):=(
nv = complex((p2 - p1)/|p2 - p1|)*ln;
z1 = complex(p1);
z2 = complex(p2);
z3 = z1 + nv*(cos(pi - th) + i*sin(pi - th));
z4 = z1 + nv*(cos(th - pi) + i*sin(th - pi));
z5 = z2 + nv*(cos(-th) + i*sin(-th));
z6 = z2 + nv*(cos(th) + i*sin(th));
p3 = gauss(z3);
p4 = gauss(z4);
p5 = gauss(z5);
p6 = gauss(z6);
fillpoly([p3,p4,p5,p6], color -> col, alpha -> alp);
);
関数の内容について次の図で説明します。

nv は $${\overrightarrow{\rm{AB}}}$$ 方向の長さ len のベクトルです。複素数で表しています。nv を th だけ傾けると,斜めのベクトルができますので,A,Bのそれぞれの点から四方に延ばします。それが p3,p4,p5,p6 です。この4点を頂点とする矩形を col 色 で塗ります。alpは透明度です。引数を変えれば大きさ,色合いの調節ができます。
また,fillpoly を drawpoly に変えると中を塗らない矩形になります。たとえば,
drawpoly([p3,p4,p5,p6], color -> col, alpha -> alp, size -> 4);とします。こちらを bar2(p1, p2, ln, th, col, alp) としましょう。
双曲線の作図を元に,必要な点を追加したので次の図です。

Drawスロットに
bar2(C, F, 0.2, pi/4, [0.9,0.8,0], 1);と書くと,CFが次のようになります。

こうして,色や透明度を変えて棒を作り,円などの補助線を非表示にすればできあがりです。
