F 積分
関数のグラフとx軸ではさまれた部分の面積を多角形の面積で近似するリーマン積分の図です。
関数のグラフとx軸ではさまれた部分を色塗りしたりハッチをかけるにはKeTCindyを用いるのが便利ですが,ここではCindyscriptだけでやってみましょう。
GeoGebraでは,入力バーに関数式を入力して描いたグラフも,作図ツールで描いた図と同様にオブジェクトとして扱えますが,Cinderellaではそうではないのでひと工夫必要です。
(1) 背景の座標軸ではなく,図形として座標軸を描き,目盛の数字も打っておきます。GeoGebraでは,はじめからそのようになっていますが,Cinderellaの画面はそうではないので,必要ならば描くことになります。
draw(join([-5,0],[10,0]),color->[0,0,0]);
draw(join([0,-5],[0,10]),color->[0,0,0]);
forall(-2..7,if(#!=0,drawtext([#,-0.3],#)));
forall(-2..7,if(#!=0,drawtext([-0.3,#-0.1],#)));
drawtext([-0.4,-0.4],"O",size->16);
draw(join()) で2点を通る直線を描いています。
(2) plot() 関数を用いてグラフを描きます。ここでは「GeoGebraで画像作成」のページにある4次関数 f(x)=-0.1*x^4+x^3-3*x^2+3*x+2 にします。
f(x):=-0.1*x^4+x^3-3*x^2+3*x+2;
plot(f(x));
関数を定義してから plot() で描くのは,次にこの関数を使うからです。
(3) 次に,矩形を描くのにx軸上に3つ点をとります。(もっと多くても同様です)
x軸は作図ツールで描いていないので,点をこの上にのせる(インシデントにする)ことはできません。
そこで,それぞれのy座標を,Cindyscriptで0にします。
A.y=0;
B.y=0;
C.y=0;
x座標はフリーなのでドラッグするとx軸上を動きます。
(4) グラフとx軸ではさまれた部分に色塗りをしますが,多角形として塗るしか方法がないので,曲線上の点をいくつかとってリストにします。これをプロットデータといいます。
plotdata=apply(0..20*C.x,[#/20,f(#/20)]);
plotdata=plotdata++[[C.x,0],[0,0]];
いま,C.xは整数という前提で,0.05ずつ点をとっています。C.xが整数でない場合を考慮するなら
1..floor(20*C.x) とすればよいでしょう。
全体を多角形にするために,x軸上の2点を追加しています。
これで,
fillpoly(plotdata,alpha->0.2);
とすれば領域を塗ることができます。alpha->0.2 で透明度を設定しています。
(5) 矩形を3つと横のラインを3本描きます。
極大値と極小値を計算で求められればよいのですが,この関数ではそう簡単ではないので,適当な座標を試行錯誤でとって,それでよいことにします。
drawpoly([[0,0],[A.x,0],[A.x,2.97],[0,2.97]],color->[0,0,0]);
drawpoly([[A.x,0],[B.x,0],[B.x,f(B.x)],[A.x,f(B.x)]],color->[0,0,0]);
drawpoly([[B.x,0],[C.x,0],[C.x,4.9],[B.x,4.9]],color->[0,0,0]);
draw([[0,2],[A.x,2]],color->[0,0,0],dashtype->3);
draw([[A.x,2.39],[B.x,2.39]],color->[0,0,0],dashtype->3);
draw([[B.x,f(B.x)],[C.x,f(B.x)]],color->[0,0,0],dashtype->3);
インスペクタで背景色を白にして完成。PNGに書き出したのが先頭の図です。