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に書き出したのが先頭の図です。