直線による包絡線
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本の線が引けます。
< 戻る >