1

GeoGebraで三角形内接円錐曲線を描く方法

22
0
$$\newcommand{bm}[1]{\boldsymbol{#1}} $$

はじめに

(この記事で"円錐曲線"とは非退化なもの[楕円,放物線,双曲線]をいい、退化した円錐曲線は含めないこととします。)

三角形ABCが与えられているとき、直線BC,CA,ABに接する円錐曲線を三角形ABCの内接円錐曲線といいます。
三角形ABCの内側にあって辺に接する楕円を最初に思い浮かべると思いますが、三角形の外部にあって辺の延長に接するような楕円・放物線・双曲線も内接円錐曲線です。
内接円錐曲線で楕円になるもの・放物線になるもの・双曲線になるものをそれぞれ内接楕円・内接放物線・内接双曲線と呼びます。
直線BC,CA,ABのうちの1つまたは2つを漸近線として残りの直線に接する双曲線も内接円錐曲線に含めます(漸近線は無限遠点で接していると考えるため)。このような内接双曲線をこの記事では"辺に漸近する内接双曲線"と呼ぶことにします。

内接円錐曲線の例 内接円錐曲線の例

三角形ABCの内接円錐曲線が与えられるとブリアンション点(後述)が決まります。また、円錐曲線なので中心や焦点といった点も決まります。
逆にこれらの点を先に与えて内接円錐曲線が一つに決まるかどうかですが、ブリアンション点が与えられた場合と中心が与えられた場合は、内接円錐曲線が存在すれば一意に決まります。焦点が与えられた場合も内接円錐曲線が存在すれば一意に決まると思われますが、この記事を執筆した段階では本当に一意に決まるかどうか確認が取れていません。とりあえず一意に決まるものとして話を進めます。(確認が取れたらこの部分を書き直します。)

この記事では、ブリアンション点が与えられた場合・中心が与えられた場合・焦点が与えられた場合のそれぞれにおいて、三角形ABCの内接円錐曲線をGeoGebraで描く方法を紹介します。円錐曲線上の5点を求めてConicコマンドで描く方法と、重心座標の式からTriangleCurveコマンドで描く方法を載せます。もちろん描く方法はいくつもあるので、ここで紹介するものはその一つの例です。

この記事では、基準三角形の頂点をA,B,Cとし、最初に与えられる点(ブリアンション点または中心または焦点)を点Dとして書いていきます。別の名前の点を使う場合は読み替えてください。補助点や補助線などの名前も各自使いやすいものを使ってください。

この記事に載せたものは、GeoGebraを開いて4点A,B,C,Dをとってからこの記事の各行を順番にコピー&ペーストするだけで作図できるのでお試しください。

ブリアンション点から作図する

任意の内接円錐曲線に対して、三角形ABCの頂点とその対辺上にある接点を結ぶ直線3本は1点で交わります。この点を内接円錐曲線のブリアンション点といいます。
ブリアンション点 ブリアンション点
直線BC,CA,AB上にない点Dが与えられたとき、点Dをブリアンション点とするような三角形ABCの内接円錐曲線がただ一つ存在します。点Dが直線BC,CA,AB上にあるとき、点Dをブリアンション点とするような三角形ABCの内接円錐曲線は存在しません。
点Dが三角形ABCのシュタイナー外接楕円上にあるとき放物線になり、そうでないとき楕円または双曲線になります。
点Dが三角形ABCの反中点三角形の辺上(辺の延長線上を含む)にあるとき、辺に漸近する内接双曲線になります。

ここでは、点Dをブリアンション点とするような三角形ABCの内接円錐曲線をGeoGebraで描く方法を2通り紹介します。

方法その1

1つ目の方法は、点Dを通るチェバ線上に内接円錐曲線が通る点を作図し、辺との接点と合わせて5点を作って描く方法です。
チェバ線上の交点の作図方法はいくつかありますが、2つ(イ,ロ)紹介します。

※方法その1は補助線に平行線が現れると交点が無限遠点となってしまって内接円錐曲線が描けない場合があります。

(イ,ロ)共通

点A,B,C,Dはすでに作成済みとします。
個別の手順の前に、以下に示すものを1行ずつ入力しておきます。

a: Line(B,C)
b: Line(C,A)
c: Line(A,B)
d_{a}: Line(A,D)
d_{b}: Line(B,D)
d_{c}: Line(C,D)
E_{a}=Intersect(a,d_{a})
E_{b}=Intersect(b,d_{b})
E_{c}=Intersect(c,d_{c})

[イ]

はまぐりの数学 というホームページの 三角形の極と極線と内接円錐曲線 のページに載っている方法です。
(イ,ロ)共通の入力のあとに以下に示すものを1行ずつ入力していくと、点Dをブリアンション点とするような三角形ABCの内接円錐曲線が描けます。

e_{a}: Line(E_{b},E_{c})
e_{b}: Line(E_{c},E_{a})
e_{c}: Line(E_{a},E_{b})
f: Line(Intersect(b,e_{b}),Intersect(c,e_{c}))
g: Conic(E_{a},E_{b},E_{c},Intersect(d_{b},Line(Intersect(f,d_{a}),E_{c})),Intersect(d_{c},Line(Intersect(f,d_{a}),E_{b})))

(補助線fは三角形ABCに関する点Dの三線極線といいます。)

[ロ]

チェバ線上の点を直接求める方法です。
内接円錐曲線と直線ADの交点が、[Aと[AとDに関するE_{a}の調和共役点]に関するE_{a}の調和共役点]になることを利用します。
(イ,ロ)共通の入力のあとに以下に示すものを1行ずつ入力していくと、点Dをブリアンション点とするような三角形ABCの内接円錐曲線が描けます。

F_{a}=Point(A,Vector(A,D)/(4-3 AffineRatio(A,E_{a},D)))
F_{b}=Point(B,Vector(B,D)/(4-3 AffineRatio(B,E_{b},D)))
F_{c}=Point(C,Vector(C,D)/(4-3 AffineRatio(C,E_{c},D)))
h: Conic(E_{a},E_{b},E_{c},F_{b},F_{c})

方法その2

2つ目の方法は重心座標を使った式を直接入力する方法です。

点A,B,C,Dはすでに作成済みとします。
以下に示すものを1行ずつ入力していくと、点Dをブリアンション点とするような三角形ABCの内接円錐曲線が描けます。

a: Line(B,C)
b: Line(C,A)
c: Line(A,B)
g_{a}=AffineRatio(C,A,Intersect(b,Line(D,a)))
g_{b}=AffineRatio(A,B,Intersect(c,Line(D,b)))
g_{c}=AffineRatio(B,C,Intersect(a,Line(D,c)))
eq: TriangleCurve(A,B,C,g_{b}^(2) g_{c}^(2) A^(2)+g_{c}^(2) g_{a}^(2) B^(2)+g_{a}^(2) g_{b}^(2) C^(2)-2 g_{a} g_{b} g_{c} (g_{a} B C+g_{b} C A+g_{c} A B)=0)

内接放物線の条件:シュタイナー外接楕円

ブリアンション点Dを動かしたとき、内接楕円と内接双曲線が内接放物線を経由して切り替わる境界が三角形ABCのシュタイナー外接楕円なので、合わせて表示しておくと楕円と双曲線が移り変わる様子がわかりやすいです。
三角形ABCのシュタイナー外接楕円の描き方を載せておきます。

sce: Conic(A,B,C,Point(B,4/3 Vector(B,Midpoint(C,A))),Point(C,4/3 Vector(C,Midpoint(A,B))))

辺に漸近する内接双曲線の条件:反中点三角形(辺を直線にしたもの)

ブリアンション点Dを動かしたとき、内接双曲線と直線BCまたはCAまたはABとの接点が無限遠点を経由して直線の反対側に移る境界は三角形ABCの頂点を通り対辺に平行な直線(三角形ABCの反中点三角形の辺を延長した3直線)になるので、合わせて表示しておくと接点が移り変わる様子がわかりやすいです。
この直線の描き方を載せておきます。

l_{a}: Line(A,Line(B,C))
l_{b}: Line(B,Line(C,A))
l_{c}: Line(C,Line(A,B))

中心から作図する

三角形ABCの辺BC,CA,ABの中点をそれぞれL,M,Nとします。直線MN,NL,LM上にない点Dが与えられたとき、点Dを中心とするような三角形ABCの内接円錐曲線がただ一つ存在します。点Dが直線MN,NL,LM上にあるとき、点Dを中心とするような三角形ABCの内接円錐曲線は存在しません。
(点Dが無限遠点でないならば)この内接円錐曲線は楕円または双曲線になります。
点Dが三角形ABCの辺上(辺の延長線上を含む)にあるとき、辺に漸近する内接双曲線になります。

ここでは、点Dを中心とするような三角形ABCの内接円錐曲線をGeoGebraで描く方法を2通り紹介します。

方法その1

1つ目の方法は、辺との接点3つとそれらの点Dに関する鏡映を使って描く方法です。

※方法その1は補助線に平行線が現れると交点が無限遠点となってしまって内接円錐曲線が描けない場合があります。

点A,B,C,Dはすでに作成済みとします。
以下に示すものを1行ずつ入力していくと、点Dを中心とするような三角形ABCの内接円錐曲線が描けます。

a: Line(B,C)
b: Line(C,A)
c: Line(A,B)
m_{a}: Line(Midpoint(C,A),Midpoint(A,B))
m_{b}: Line(Midpoint(A,B),Midpoint(B,C))
m_{c}: Line(Midpoint(B,C),Midpoint(C,A))
d_{a}: Line(A,D)
d_{b}: Line(B,D)
d_{c}: Line(C,D)
f_{a}: Line(Intersect(d_{b},m_{c}),Intersect(d_{c},m_{b}))
f_{b}: Line(Intersect(d_{c},m_{a}),Intersect(d_{a},m_{c}))
f_{c}: Line(Intersect(d_{a},m_{b}),Intersect(d_{b},m_{a}))
E_{a}=Intersect(f_{b},f_{c})
E_{b}=Intersect(f_{c},f_{a})
E_{c}=Intersect(f_{a},f_{b})
g: Conic(E_{a},E_{b},E_{c},Reflect(E_{b},D),Reflect(E_{c},D))

方法その2

2つ目の方法は重心座標を使った式を直接入力する方法です。

点A,B,C,Dはすでに作成済みとします。
以下に示すものを1行ずつ入力していくと、点Dを中心とするような三角形ABCの内接円錐曲線が描けます。

a: Line(B,C)
b: Line(C,A)
c: Line(A,B)
g_{a}=AffineRatio(C,A,Intersect(b,Line(D,a)))
g_{b}=AffineRatio(A,B,Intersect(c,Line(D,b)))
g_{c}=AffineRatio(B,C,Intersect(a,Line(D,c)))
u_{a}=g_{b}+g_{c}-g_{a}
u_{b}=g_{c}+g_{a}-g_{b}
u_{c}=g_{a}+g_{b}-g_{c}
eq: TriangleCurve(A,B,C,u_{a}^(2) A^(2)+u_{b}^(2) B^(2)+u_{c}^(2) C^(2)-2 u_{b} u_{c} B C-2 u_{c} u_{a} C A-2 u_{a} u_{b} A B=0)

参考:中点三角形(辺を直線にしたもの)

中心Dを動かしたとき、内接楕円と内接双曲線が切り替わる境界が三角形ABCの辺の中点同士を結んで得られる3直線(三角形ABCの中点三角形の辺を延長した3直線)なので、合わせて表示しておくと楕円と双曲線が移り変わる様子がわかりやすいです。
方法1では補助線m_{a},m_{b},m_{c}として作成済みですが、方法2で内接円錐曲線を描くときのためにこの直線の描き方を載せておきます。

m_{a}: Line(Midpoint(C,A),Midpoint(A,B))
m_{b}: Line(Midpoint(A,B),Midpoint(B,C))
m_{c}: Line(Midpoint(B,C),Midpoint(C,A))

内接放物線の条件:無限遠直線

放物線に中心はないので中心Dを(ユークリッド平面上の)どこにとっても内接放物線にはなりません。しかし、放物線の対称軸上の無限遠点を放物線の中心とみなすとうまくいく場合があり、ここでも方法2においてg_{a},g_{b},g_{c}に無限遠点の重心座標(すなわち和が0になる3つの数)を代入してeqを描くと内接放物線になります。
無限遠直線自体はユークリッド平面上にはないので、無限遠直線の図を描くことはできません。

辺に漸近する内接双曲線の条件:基準三角形(辺を直線にしたもの)

中心Dを動かしたとき、内接双曲線と直線BCまたはCAまたはABとの接点が無限遠点を経由して直線の反対側に移る境界は三角形ABCの辺を延長した3直線になります。
方法1でも方法2でもa,b,cとして作成済みです。

焦点から作図する

直線BC,CA,AB上にない点Dが与えられたとき、点Dを焦点とするような三角形ABCの内接円錐曲線がただ一つ存在します。点Dが直線BC,CA,AB上にあるとき、点Dを焦点とするような三角形ABCの内接円錐曲線は存在しません。
点Dが三角形ABCの外接円上にあるとき放物線になり、そうでないとき楕円または双曲線になります。
点Dがとある三次曲線(後述)上にあるとき、辺に漸近する内接双曲線になります。

ここでは、点Dを焦点とするような三角形ABCの内接円錐曲線をGeoGebraで描く方法を2通り紹介します。
(ただし、方法その1では内接放物線など描けない内接円錐曲線もあります。)

方法その1

1つ目の方法は、辺との接点3つと内接円錐曲線の頂点2つを作図して描く方法です。

※ 方法その1では内接放物線すべてや内接円,傍接円など点Dの位置によっては描けない内接円錐曲線もあります。

点A,B,C,Dはすでに作成済みとします。
以下に示すものを1行ずつ入力していくと、点Dを焦点とするような三角形ABCの内接円錐曲線が描けます。

a: Line(B,C)
b: Line(C,A)
c: Line(A,B)
E=Intersect(Reflect(Line(B,D),AngleBisector(A,B,C)),Reflect(Line(C,D),AngleBisector(B,C,A)))
F_{a}=Intersect(a,Line(E,Reflect(D,a)))
F_{b}=Intersect(b,Line(E,Reflect(D,b)))
F_{c}=Intersect(c,Line(E,Reflect(D,c)))
d: Circle(Intersect(a,PerpendicularLine(D,a)),Intersect(b,PerpendicularLine(D,b)),Intersect(c,PerpendicularLine(D,c)))
e: Line(D,E)
G_{1}=Intersect(d,e,1)
G_{2}=Intersect(d,e,2)
f: Conic(F_{a},F_{b},F_{c},G_{1},G_{2})

(補助点Eは三角形ABCに関する点Dの等角共役点といいます。)
(補助円dは三角形ABCに関する点Dの垂足円といいます。)

※ 補助円dと補助線eと補助点G_{1},G_{2}を使わずに次のようにしてもよいです。
g: Conic(F_{a},F_{b},F_{c},Reflect(F_{b},Midpoint(D,E)),Reflect(F_{c},Midpoint(D,E)))

参考:内接放物線の描き方

方法1では内接放物線を描くことはできないので、内接放物線の描き方を別で載せておきます。

点A,B,Cをすでに作成済みとして、点Dを三角形ABCの外接円上にとって点Dを焦点とする内接放物線を描くには次のように入力すればよいです。

D=Point(Circle(A,B,C))
h: Parabola(D,Line(Reflect(D,Line(C,A)),Reflect(D,Line(A,B))))

方法その2

2つ目の方法は重心座標を使った式を直接入力する方法です。

点A,B,C,Dはすでに作成済みとします。
以下に示すものを1行ずつ入力していくと、点Dを焦点とするような三角形ABCの内接円錐曲線が描けます。

a: Line(B,C)
b: Line(C,A)
c: Line(A,B)
k_{a}=Distance(B,C)^(2)
k_{b}=Distance(C,A)^(2)
k_{c}=Distance(A,B)^(2)
g_{a}=AffineRatio(C,A,Intersect(b,Line(D,a)))
g_{b}=AffineRatio(A,B,Intersect(c,Line(D,b)))
g_{c}=AffineRatio(B,C,Intersect(a,Line(D,c)))
u_{a}=g_{a} (k_{c} g_{b}^(2)+k_{b} g_{c}^(2)+(k_{b}+k_{c}-k_{a}) g_{b} g_{c})
u_{b}=g_{b} (k_{a} g_{c}^(2)+k_{c} g_{a}^(2)+(k_{c}+k_{a}-k_{b}) g_{c} g_{a})
u_{c}=g_{c} (k_{b} g_{a}^(2)+k_{a} g_{b}^(2)+(k_{a}+k_{b}-k_{c}) g_{a} g_{b})
eq: TriangleCurve(A,B,C,u_{a}^(2) A^(2)+u_{b}^(2) B^(2)+u_{c}^(2) C^(2)-2 u_{b} u_{c} B C-2 u_{c} u_{a} C A-2 u_{a} u_{b} A B=0)

内接放物線の条件:外接円

焦点Dを動かしたとき、内接楕円と内接双曲線が内接放物線を経由して切り替わる境界が三角形ABCの外接円なので、合わせて表示しておくと楕円と双曲線が移り変わる様子がわかりやすいです。
三角形ABCの外接円の描き方を載せておきます。

cc: Circle(A,B,C)

辺に漸近する内接双曲線の条件:ある三次曲線

焦点Dを動かしたとき、内接双曲線と直線BCまたはCAまたはABとの接点が無限遠点を経由して直線の反対側に移る境界は次の三次曲線になるので、合わせて表示しておくと接点が移り変わる様子がわかりやすいです。
この三次曲線の描き方を載せておきます。
方法1では以下の6行を入力、方法2ではk_{a},k_{b},k_{c}は定義済みなので下側3行のみ入力します。

k_{a}=Distance(B,C)^(2)
k_{b}=Distance(C,A)^(2)
k_{c}=Distance(A,B)^(2)
eq_{a}: TriangleCurve(A,B,C,A (k_{a} B C+k_{b} C A+k_{c} A B)+k_{a} B C (A+B+C)=0)
eq_{b}: TriangleCurve(A,B,C,B (k_{a} B C+k_{b} C A+k_{c} A B)+k_{b} C A (A+B+C)=0)
eq_{c}: TriangleCurve(A,B,C,C (k_{a} B C+k_{b} C A+k_{c} A B)+k_{c} A B (A+B+C)=0)

おわりに

ぜひ点Dを動かして様子を観察してみてください。
動かしてみて面白い結果が見えるお絵かきができると、GeoGebraは楽しいですよ。

そして描き方の裏にある種々の法則を考えたり調べたりしてみてください。
斯くいう私もなぜこれで接点などが求まっているのかまだよくわかっていないところもあって勉強中です。

投稿日:7日前
数学の力で現場を変える アルゴリズムエンジニア募集 - Mathlog served by OptHub

この記事を高評価した人

高評価したユーザはいません

この記事に送られたバッジ

バッジはありません。

投稿者

工学系物理工学出身のただの社会人です。 数学は趣味のひとつです。どうやら文字計算が好きらしい。 2022年から三角形の幾何学にはまり、重心座標などでいろいろ計算しています。

コメント

他の人のコメント

コメントはありません。
読み込み中...
読み込み中