第10回 グラフ上の点を動かす
シンデレラの作図機能で作った点は、「要素を動かす」モードで自由に動かすことができます。直線上の点も、円周上の点も、「インシデント」(図形上にある)であれば、図形からはみ出すことなく動かすことができます。しかし、関数ツールで描いた曲線上に点を乗せることはできません。関数のグラフ上に点を乗せて、グラフ上を自由に動かすためにはCindyScriptの力を借りることになります。原理は簡単。点は作図機能の「点を追加する」ツールで取っておいて、CindyScriptでこれをコントロールすればよいのです。それも、点のx座標からy座標を計算するだけです。
(1) 画面下のツールから「座標軸を描く」と「グリッドを描く」をクリックして座標軸とグリッドを表示しておきましょう。
(2) 「点を加える」ツールボタンを選んで、適当なところに点を取ります。原点近くがよいでしょう。点の名前はAですね。
(3) 「スクリプト」メニュー(1123版では Script メニュー)からCindyScriptを選んでスクリプトエディタを開きます。Drawスロットをクリックして、次にメインウィンドウをクリック。次のスクリプトを書きましょう。
-----------------------------------------------------------------------------------------------------------------------
f(x):=x^2;
plot(f(#));
A.y=f(A.x);
-----------------------------------------------------------------------------------------------------------------------
これだけです。実行ボタン(歯車のアイコン)を押します。点Aが放物線上に乗ります。
「点を動かす」ツールボタンをクリックして、点Aをドラッグしてみましょう。
この点を使って、接線を引いてみましょう。
方法その1は微分法です。関数f(x)を微分して、点Aのx座標における微分係数を傾きとして、点Aを通る直線を引けばよいですね。微分法をまだ習っていない人はとばして、その2へ。
【接線 その1】
CindyScriptで微分をする関数はd()です。Mathematicaと同じ。ただし、Mathematicaでは記号処理として微分をしますが、(つまり、微分した式を表示できる)CindyScriptでは記号処理はしません。微分は標準的な実行変数 # についておこなわれますが、変数名を第2引数に指定します。d()を使って、導関数g(x)を定義します。そのあとは接線の公式をそのまま使えばよいのです。傾きのところはかけ算なので、アスタリスク*をつけることを忘れないように。
-----------------------------------------------------------------------------------------------------------------------
g(x):=d(f(#),x);
plot(g(A.x)*(#-A.x)+A.y);
-----------------------------------------------------------------------------------------------------------------------
点Aをドラッグするとその点での接線が常に引かれます。
【接線 その2】
CindyScriptには接線の方程式を求める関数が備わっています。tangent() です。タンジェントって、三角関数? いいえ、ここでのタンジェントは「接線」の方です。英和辞典を引いてみましょう。書式は微分と同様です。微分して接線の方程式を作る、という作業を1度でやってしまう関数だと思えばよいでしょう。ただし、tangent()によって得られるのは直線の式ではなく、直線を表す「同次座標」というものです。そのため、plot()関数ではなくdraw()関数で表示をします。
【練習問題】
(1) 関数f(x)をいろいろ定義してやってみましょう。三角関数、分数関数、無理関数、対数関数など。
(2) 法線を引いてみましょう。ただし、法線を求める関数はCindyScriptにはありませんので、その1のやり方(微分して方程式を作る)しかありません。(法線とは接点において接線に垂直な直線です。)
(3) グラフ上の点を動かすことによってできる何か面白いことを考えてみましょう。例えば、曲線外の線分とグラフ上の点でできる三角形の重心の軌跡とか。線分や重心はシンデレラの作図機能でできますね。