次の図になるようにプログラムを作成してみましょう.
色は必ずしもこの通りでなくて構いません.
プログラム名は,DrawShapes2
としてください.
0≤x≤2π の範囲でサイン波を描画してみましょう.クラス名は SineCurve
としてください.
上の図は,399本の直線で描画されています.
x=0
から400
未満まで繰り返し,v = Math.sin(i * delta) * s
で(xi,yi)=(i,v)を得ます.
((xi−1,yi−1),(xi,yi))に線を追加することで上記のサイン波が描画できます.
なお,delta
(δ)は横幅,s
(s)は高さを表しています.
EZ.initialize(400, 400)
で初期化した時,
delta
が δ=2π400,s
は s=4002πです.
また,中央に寄せるため,y軸方向に +200 としてください.
Javaで,sin, cosを計算するには,Math.sin
,Math.cos
メソッドを利用しましょう.
ただし,以下の点に注意してください.
Math.PI
という変数を利用してください.Double sinValue = Math.sin(Math.PI / 3.0);
Double cosValue = Math.cos(Math.PI / 3.0);
Double
型をInteger
型として扱うには,Double
型の変数に対して,intValue
メソッドを呼び出しましょう.
例えば,Double
型のdValue
という値を Integer
型のiValue
に代入するには,次のようなプログラムになります.
Double dValue = // Double型の値を代入.
Integer iValue = dValue.intValue();
コッホ曲線は,線分を三等分し,分割点を頂点とした正三角形を描く線です. この作図を無限に繰り返すことで,線分の長さが∞になります. コマンドライン引数でコッホ曲線の n を指定できるようにしましょう.
クラス名は,KochCurve
としてください.
コッホ曲線の例を以下に示します(画像のクリックで画像が更新されます).
上記のように,(x1,y1)と(x5,y5)が指定された時,(x2,y2)〜(x4,y4)を求めましょう.
n=1までは上記のように計算できますが,n>2の場合はこの計算では求められません. 次の例を元に考えてみましょう(画像のクリックで画像が更新されます).
上記のように,(x1,y1)と(x5,y5)が指定された時,(x2,y2)〜(x4,y4)を求めましょう. 元々の傾きをθとして示します.
この計算式で,コッホ曲線を描いてみましょう. 再帰呼び出しを利用すると良いでしょう. (x2,y2),(x3,y3)間の直線を引く時,また,(x3,y3),(x4,y4)間の直線を引く時に それぞれを(x1,y1),(x5,y5)として再帰呼び出しを行えばコッホ曲線を描けるでしょう.
次のようなメソッドを用意しましょう.このメソッドを呼び出すことで,2点の間にコッホ曲線を描けるようになります.
void drawKoch(Integer x1, Integer y1, Integer x5, Integer y5,
Integer dimension, Double angle){
if(dimension == 0){
// (x1, y1)から(x5, y5)まで線を引く.
}
else{
// (x1, y1), (x5, y5) 間の長さの 1/3.これが l となる.
Double length = // 長さlを求める.
Double delta = Math.PI / 3.0;
// (x2, y2) を求める.
// (x1, y1)から(x2, y2)まで線を引く.
// (x3, y3) を求める(θ は angle + delta).
// (x2, y2)から(x3, y3)まで線を引く.
this.drawKoch(x2.intValue(), y2.intValue(),
x3.intValue(), y3.intValue(),
dimension - 1, angle + delta);
// (x4, y4) を求める(θ は angle - delta).
// (x3, y3)から(x4, y4)まで線を引く.
this.drawKoch(x3.intValue(), y3.intValue(),
x4.intValue(), y4.intValue(),
dimension - 1, angle - delta);
// (x4, y4)から(x5, y5)まで線を引く.
}
}
画像のクリックで画像が更新されます.
コッホ曲線をn=0からn=5までを1秒程度で更新して描いてみましょう.
クラス名は,KochCurveAnimation
としてください.
今まで描画した内容を消したい場合は,EZ.removeAllEZElements()
メソッドを呼び出してください.
例題3と例題4を合わせた動きをするボールを描きましょう.
x軸方向には,例題3を,y軸方向には,例題4の動きを設定すれば良いでしょう.
クラス名を ThrowingExercise
にしてください.
EZ Graphics を利用して,自由にアニメーションを描いてください.
クラス名は Animation
としてください.
内容は自由です.