直線による包絡線

CinderellaJapan発行の iBooks「2次関数と2次曲線(無料)」に次のような問題が掲載されています。

aがすべての実数値をとって変化するとき、直線 y=ax-a2+1 が通りうる点(x,y)の存在範囲を図示せよ。

解答は、aについての2次方程式と見て、実数解を持つ条件:判別式 D≧0を使うだけですが、「なぜ実数条件なのか」が生徒にとっては分かりにくいところです。

答えは放物線の下側の領域となります。このときの放物線が 包絡線 です。

まず、Cinderellaで、直線 y=ax-a2+1 をインタラクティブに動かして見せる教材を作ります。それを利用して、KETCindyでTeXに書き出しましょう。

aの値を変化させるためにスライダを1つ作ります。 aの値の範囲はひとまず -5 ≦ a ≦ 5 とでもしましょう。線分ABと、AB上の点Cをとり、次のスクリプトを書きます。

a=|A,C|/|A,B|*10-5;

plot(a*x-a^2+1);

スライダを動かすと直線が傾きを変化させながら動きますが、これで、直線の存在領域がわかるでしょうか。

この直線の残像が残るといいですね。そのためには、plotで直線を描くのではなく、直線を描画ツールで描く必要があります。

そこで、描画ツールで直線を引き、その時に使った2点の位置を、直線の方程式で指定することにします。

直線DEが引けますので、次のスクリプトを書きます。さきほどの plot の式をf(x)に転用すればいいでしょう。

f(x):=a*x-a^2+1;

D.y=f(D.x);

E.y=f(E.x);

これで、直線DEがスライダで動かせます。

この直線の残像を描きます。「編集」メニューからインスペクタを開きます(Mac:command+I / Windows:Ctrl+i でも開きます)

直線を選んで、「特別な表示方法」の「足跡」にチェックを入れます。

これでスライダを動かしてみましょう。残像が残って、放物線が見えるようになりました。

こんどは、スライダで a を変化させるのでなく、スクリプトで変化させて、たくさんの直線を描くことにします。次のスクリプトを追加します。

repeat(100,s,

a=(s-50)/10;

plot(f(x),alpha->0.3);

);

repeat(100 , s で100回繰り返しを行います。何回目の繰り返しか、その回数が s でカウントされます。

a=(s-50)/10; で、aの値は -5から5まで、0.1刻みの値になります。こうして100本の直線を引きました。

alpha->0.3 は色の濃さです。小さくすれば薄くなります。実行しながら適当に変えてみましょう。

インスペクタで直線DEの足跡のチェックを切り、「表示方法」で線を太くするか、色を変えておきましょう。次の図では黒にしました。

放物線がはっきりと現れ、スライダを動かすと直線が動いてわかりやすくなりました。

では、この図をTeXの図にします。

図は2つです。

ひとつは直線DEだけ。これは Lineplot([D,E]); だけでいいですね。ただし、そのときの直線の式も表示しておきましょう。

Expr([[-3,3],"c","y=ax-a^2+1",[-3,2],"c","a="+text(a)]);

で式とaの値を表示します。表示する位置は適当に。

NEとSW で出力する範囲を適当に決めます。

もう一つは、直線DEではなく、100本の直線です。

直線は Liniplot()で描けます。スライダでaの値を決めた部分はそのままでも構いませんが、//をつけてコメント行にしました。

//a=|A,C|/|A,B|*10-5;

f(x):=a*x-a^2+1;

repeat(100,s,

a=(s-50)/10;

Lineplot(text(s),[[0,f(0)],[1,f(1)]],["Color=[0,0,1],alpha->0.3"]);

);

ここで、Lineplot の引数について説明しておきましょう。

text(s) は名前です。名前は文字で与えることになっているので、ループ変数 s を text(s) として文字に変換しています。

[[0,f(0)],[1,f(1)]] で、f(x)を使って2点の座標を決め、直線を引いています。

alpha->0.3 はTeXには関係ありません。Cinderellaの画面で透明度を0.3にするオプションです。

これでCinderellaの画面とTeXの両方に100本の線が引けます。

< 戻る >