見出し画像

Cinderellaで数学:いろいろな曲線:交叉平行四辺形を利用した円錐曲線作図器

作図器の写真と解説図


「曲線の事典」(礒田正美他編著:共立出版 2009)掲載の,交叉平行四辺形を利用した楕円と双曲線の作図器です。

 AD = BC,AB = CDの交叉平行四辺形ABCD が与えられ,辺AB が平面上に固定され,点Dは点Aを中心に,点Cは点Bを中心に回転する。点Dが点Aを中心に回転するとき,点Cは点Bを中心に回転し,直線 ADとBCの交点Pは楕円か双曲線をかく。

「曲線の事典」(礒田正美他編著:共立出版 2009 p57

 辺 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が次のようになります。

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


Cinderellaで数学・情報 記事一覧に戻る