曲線1(円錐曲線のメタモルフォーゼ)
このワークシートはMath by Codeの一部です。
数学と言えば数と図形、図形と言えば多角形と曲線、
そのくらい曲線はなじみ深いものです。
今回は曲線の古典と言える「円錐曲線の視覚化」のコード化をしてみよう。
1.円錐曲線を時間とともにメタモルフォーゼする。
円錐を切ると、断面に円、楕円、双曲線が現れることは
有名な事実ですね。
課題:切断面を動かして円すい曲線を連動表示する
「平面のパラメータ」
を変化すると、
「3Dで円すいの表面に円錐曲線が、2D座標面で円錐曲線」が表示される。
2.数学外の知識
<円錐の歴史>
エジプトやメソポタミアではピラミッドは立てられましたが、円すいの探求はデモクリトスからから始まりアポロニウスが「円錐曲線論」を書いて完成したといわれます。
円錐は英語でコーンと言われるようになったのは、トウモロコシのコーンではなく、松ぼっくりの「つん」とした形のラテン語コーノスから始まったらしい。だから、工事中の「三角コーン」や「アイスクリームのコーン」が円錐のコーンという意味につながってますね。
ピエロがかぶる帽子とか、音を拡大するメガホンや、コーヒーのドリップなど、
今でも日常で使われていますね。
<円錐曲線の歴史>
アポロニウスがBC200年前後に「円錐曲線論」をかいた。
惑星軌道が楕円であるというケプラーの法則。
天体の軌道は円錐曲線(円・楕円・放物線・双曲線)になることを力学の法則から説明したニュートン。
3.数学・言語・プログラミングの支援
<円錐の方程式>
デモクリトスも気づいたように、円錐は薄い円盤を積み重ねてイメージできます。
逆にいうと、円錐を水平に切ると断面は円になりますね。
ということは、円錐の傾きが1だとすると、z=1で切った円の方程式はx^2+y^2=1です。
zを動かしてできる円の軌跡が円錐になると言えるので、
円錐の方程式は
x^2+y^2=z^2です。
<円錐曲線の方程式>
円錐と関係なく、円、楕円、放物線、双曲線の方程式が思いつく人は多いでしょう。
x^2+y^2=r^2、(x/a)^2+(y/b)^2=1、y=ax^2+bx+c、y=1/x+x
でも、これではバラバラでメタモルフォーゼするのは難しいですね。
<円錐曲線は軌跡>
円錐曲線を軌跡として学びましたね。
#円は中心から一定の点集合
#楕円は2点F1,F2からの光が点Pで反射すると、入射角と反射角が等しい点Pの軌跡。
#双曲線は2点F1、F2からの距離F1P、F2Pの差一定2a(F1F2=2c, a<c)。
点Pでの接線とF1P、F2Pとのなす角は等しい。
#放物線は点Pから定直線lと定点Fまでの距離が等しい点集合。
つまり、PF/PH=1の点集合と言えます。
点Pで接線を引くと、放物線のlに進む光はPで反射して焦点Fにあつまる。lが準線。
作図で考えると共通性が感じられますね。
距離の和や差や、角度が一定の点集合ですね。
でも、まだ数式での共通点は見えてきません。
<円錐曲線の共通点と違い>
放物線を基準に考えてみましょう。
定点Fとこれを通らない線l(準線)があり、
曲線上の点Pからそれぞの線をひきます。lへは垂線の足をHとして、PFとPHの長さを比べましょう。
すると、さっきもかいたようにPF/PH=1です。
「放物線ではPF/PH=eとしたとき、たまたまe=1になった」と考えるのです。
e>1になるときは双曲線
e<1のときは楕円
Fは焦点でlはそれに対応する線ですから、Fが2つある楕円と双曲線では準線lも2本あることになるね。
このeは楕円曲線をつなぐ数値であると同時に分類する値でもあるのですね。
数式につないでみよう。
楕円 (x/a)^2+(y/b)^2=1 (a>b>0)では、e=1/a√(a^2-b^2)
双曲線 (x/a)^2-(y/b)^2=1 (a, b>0)では、e=1/a√(a^2+b^2)
放物線 y^2=4px (p>0)では、e=1
だいぶ共通点と違いが見えてきましたね。
<線形代数による2次形式の分類理論>
変数x,y,zについて、ax+by+czを1次形式といい、ax^2+2hxy+by^2を2次形式といいます。
F(x,y)=ax^2+2hxy+by^2+2fx+2gy+c=0が2次曲線の一般式です。
これを固有方程式と直交化からなる2次形式の標準化理論(主軸定理)でカンタンにします。
途中は省略しますが、結局は、
s x^2+t 2y^2=Cに変形できるね。
# s t ≠0なら、
(x/a)^2+(y/b)^2=±1 円、楕円、(空集合)
(x/a)^2-(y/b)^2=±1 双曲線
(x/a)^2+(y/b)^2=0 1点か2直線
# s t =0なら、
y^2=4px, x^2=4py 放物線
y^2=α^2, x^2=α^2 (平行2直線 α=0で一致)
もう少し簡単にまとめましょう。
ab>h^2 なら、楕円、(1点、空集合)
ab<h^2 なら、双曲線、(交わる2直線)
ab=h^2 なら、放物線、(平行2直線、1直線、空集合)
<円錐と円錐曲線の関係>
Oを頂点とする円錐Cがある。頂角の開きは2θとする。
Cを平面αで切断しよう。
Cとαの両方に接する球面をかき、αとの「接点をF」とする。
CとKの接点の集合は円周Sになる。
Sを含む平面をβとして、αとβが平行でなければ「交線l」ができる。交角はφとする。
Cとαの交点の集合は曲線Rになる。Rの適当な点をPとする。
Pからlへ下した垂線をPHとする。(lとPHは垂直)
Pからβへ下した垂線をPQとする。(PQとβは垂直だから、△PQH、△PQTは直角三角形)
PからOまでの線分上で円周Sと交わるまでの点をTとすることで、PTがかける。
PTは球への接点までの長さになり、球外点から接点までの距離は等しいから、PT=PF。
直角三角形PQHの角Hがφだから、PQ=PHsinφ。だから、PH=PQ/sinφ。
直角三角形PQTの角Pがθだから、PQ=PTcosθ=PFcosθとなり、PF=PQ/cosθ。
まとめると、e=PF/PH
=(PQ/cosθ)/(PQ/sinφ)=sinφ/cosθ=(点Pの取り方によらず一定)
つまり、円錐の頂角の開き2θと、切断面のxy平面と平行な面βとのなす角φの
2パラメータで円錐の離心率eが決まり、円錐曲線も決まることがわかるね。
ということは、円錐を固定すれば、
「平面αの傾斜を動的に変化させることで、メタモルフォーゼが可能」
ということが、数式の変形をするだけでわかりましたね。
4.コード化
<geogebra>
タイトルは「円錐曲線のメタモルフォーゼと判定」
#円錐のための設定
O=(0,0,0)
Z=(0,0,4)
a:Cone(O,Z,3)
#θ関係
Y=(3,3,0)
f=Segment(Y,Z)
g=Segment(O,Z)
CosTh=g/f #直角三角形OYZからcosθを求める。
#平面関係
L=(3,3,4)
M=(3,-3,4)
k=Slider(-100,4,1)
Nk=(-3,3,k)
p:Plane(M,L,Nk)
#φ関係
Lk=(3,3,k)
h=Segment(L,Lk) #表示
i=Segment(L,NK) #表示
#この2本の線で、平面の水平面に対する折れ具合が見える
SinF=h/i #直角三角形LLkNKからsinφを求める。
#判定と出力
#オブジェクトの交線を表示するために、pとaを画面をクリックして選択しましょう。
#または、IntersectionPaths(p,a)と入力してもいいでしょう。
e=SinF/CosTh #離心率
text1=If(e==1,"放物線",If(e<1,"楕円","双曲線"))
#{ }のオブジェクト名はテキストコントロール作成にオブジェクト名から選びます。
text2="sinφ={SinF},cosθ={CosT},\\離心率e=\\frac{sinφ}{cosθ}="+{e}\\"なので、円錐曲線は"+text1+"です"
kをアニメーションにすると、ブランコのように平面がゆっくりゆれて楽しいです。
不要な頂点は非表示にするといいね。