いきなりですが問題です.
三角形ABCに対して,3点D,E,Fを,以下の条件をすべて満たす点とする.
条件1: A,D,Fはこの順に同一直線上にあり,AD:DF=a:1
条件2: B,E,Dはこの順に同一直線上にあり,BE:ED=b:1
条件3: C,F,Eはこの順に同一直線上にあり,CF:FE=c:1
ただし,a,b,cはいずれも正の実数とする.
このとき,以下の各問に答えよ.
(1) △ABC:△DEFを,a,b,cを用いた比で表せ.ここで△XYZは三角形XYZの面積とする.
(2) A,B,Cの各座標およびa,b,cが,計算機で表現できる値のとき,3点D,E,Fの座標を求める手順を答えよ.
(3) a,b,cが正の整数のとき,三角形ABCが与えられたときに3点D,E,Fを定規とコンパスで求める手順を答えよ.
昨日付の記事で書いた「(a+1)(b+1)(c+1)−abc倍」「位置決めや,作図」について,さっそくですが解答します.
(1) まず,下図のように,AE,BF,CDをそれぞれ結びます.
s=△DEFとおくと,△EDF:△EDA=DF:DA=1:aなので△EDA=asです.同様に,△FED:△FEB=ED:EB=1:bより△FEB=bs,△DFE:△DFC=FE:FC=1:cより△DFC=csを得ます.
次に,△AED:△AEB=ED:EB=1:bより,△AEB=b△AED=absです.同様に,△BFE:△BFC=FE:FC=1:cより△BFC=c△BFE=bcs,△CDF:△CDA=DF:DA=1:aより△CDA=a△CDF=casを得ます.
これで,△ABC内を構成する7つの部分図形(いずれも三角形)の面積は,sの式で表すことができます.
△ABC=△DEF+△EDA+△FEB+△DFC+△AEB+△BFC+△CDA=s+as+bs+cs+abs+cbs+cas=(ab+bc+ca+a+b+c+1)sなので,△ABC:△DEF=(ab+bc+ca+a+b+c+1) :1となります.
ここでab+bc+ca+a+b+c+1=abc+ab+bc+ca+a+b+c+1−abc=(a+1)(b+1)(c+1)−abcと変形すると,△ABC:△DEF={(a+1)(b+1)(c+1)−abc}:1と表すこともできます.
昨日付記事は,a=2,b=1,c=3の場合でしたので,(a+1)(b+1)(c+1)−abc=3・2・4−2・1・3=24−6=18となり,△ABC:△DEF=18:1です.
(2) 前問に加えて,補助線を引きます.点Gを直線AFとBCの交点,点Hを直線BDとCAの交点,点Iを直線CEとABの交点とします.
ここで三角形EACに着目すると,△EDA:△EDC=AH:CHとなります.というのも,Hを通るEHの垂線を引き,その直線と,Aを通るEHとの平行線の交点をP,およびCを通るEHとの平行線との交点をQとすると,△EDA=ED・PH/2,△EDC=ED・QH/2となります.直線PQと直線ABが異なる場合は,△HPA∽△HQBなので,AH:CH=PH:QHです.ここまでの式を整理することで△EDA:△EDC=AH:CHを得ます.直線PQと直線ABが一致する場合は,PとA,QとCはそれぞれ同じ点になりますので,PH=AH,QH=CHより,やはり△EDA:△EDC=AH:CHを得ます.
△EDC=△DEF+△DFC=(c+1)sですので,AH:CH=a:(c+1)となります.
同様にして,三角形ABCとその周上の点について,以下の式が得られます.
AI:BI=(a+1):b
BG:CG=(b+1):c
CH:AH=(c+1):a
ここまでは,3点D,E,Fを所与としていました.これらがない状態から,その決定方法を手順として書くと,次のとおりです.
1. BG:CG=(b+1):cを満たす点G,CH:AH=(c+1):aを満たす点H,AI:BI=(a+1):bを満たす点Iを求める.
2. 直線AG,直線BH,直線CIをそれぞれ求める.
3. 2直線AGおよびBHの交点をD,2直線BHおよびCIの交点をE,2直線CIおよびAGの交点をFとする.
プログラミングにおいては,内分点と,2点を通る直線,2直線の交点を求める処理を定義するか,ライブラリなどから呼び出すことで,それぞれの値(点なら座標,直線においては係数ほか)を求めることができます.
(3) 線分ABを(a+1):bの比に内分する点をIを求めるには,直線ABと異なり,Aを通る直線を引きます.その直線上で,Aを起点にコンパスで1単位長から(a+b+1)単位長までの頂点をとります*1.Aを起点に(a+b+1)単位長離れた頂点とBとを結び,その直線と平行で,Aを起点に(a+1)単位長離れた頂点を通る直線を引きます.この直線と,直線ABとの交点が,Iとなります.GおよびHも同様です.2直線の交点は,プログラミングよりももっと簡単です.
作図プログラムをGistに置いておきます.いつものようにRubyスクリプトで,描画はconvertコマンドです.文字描画はIPAexゴシックがデフォルトです.他のフォントにしたり,フォントサイズを変えたりすると,表示が乱れる可能性があります.
昨日付の問題では,原文ママということでAEにも線分を引いたのですが,本日の検討にあたっては,最初に引いておく必要はありません.この対処にも,少しだけ手間をかけました.
*1:2単位長,4単位長,…というとり方と組み合わせれば,操作を減らすことができます.正整数xに対して,Aからx単位長まで離れたところをとるのには,xを2進数で表したときの桁数(ビット長)のたかだか2倍の回数のコンパス操作で行えます.