2018 年度 プログラミング実習 II

課題 R4(第4章)

[2018/5/1, 3]


[R4_1] (必修)

教科書の例題4-2を参考にし,同心で半径が異なる二つの円からなる2重円を描画するクラス DoubleCircle を作成し,それを表示しなさい.作成するクラスは,コンストラクタによって,中心の座標と,二つの円の色と半径を指定できるものとする.
注意:DoubleCircleを定義するときはクラスCircleを利用すること.2つの円を直接fillOvalを利用して描画するのは不可.

[R4_2] (必修)

教科書の例題4-3を参考にし,R4_1で作成した2重円をマウスでドラグできるようにしなさい.

[R4_3] (必修)

教科書の例題4-1と例解4-1c,dとを参考にして,重ならないように並ぶ図形を複数個表示しなさい. ただし,表示する図形は以下の条件を満たし,かつ表示する各図形がすべて一つのウィンドウ内に収まるように大きさを調整すること.

なお,学籍番号から求める上記余りの値は,作成するプログラム中で求めるのではなく,手計算で求めて直線の傾きや,表示する図形の種類・表示順をあらかじめ決めておくこと.

[R4_4] (必修)

教科書の例題4-3と例解4-3b,e,dとを参考にして, 課題R4_3で作成した並んでいる図形のうち,ある特定の一つの図形Mをドラグして移動できるようにし, マウスボタンを離したら図形Mの色が変わるようにせよ. ただし,その特定の一つの図形Mは,課題R4_3で表示した図形をウィンドウに向かって左上から数えて, (あなたの学籍番号を 5で割った余り) + 1 番目とする. M以外の図形は動かす必要はない. 再配置後は,他の図形と重なってもかまわない. この課題には,上記例題で利用している「動きを伴うマウスイベントのインタフェース」である MouseMotionListenerとともに,教科書p.75にある「動きを伴わないマウスイベントのインタフェース」である MouseListenerを利用し,以下の mouseReleasedメソッドを実装する必要がある.

      addMouseListener(new MouseAdapter() {
         public void mouseReleased(MouseEvent evt){

            /* ここを埋める */

            repaint();
         }
     });
[R4_5] (オプション)

教科書の例題4-3と例解4-3b,e,dとを参考にして, 課題R4_4での移動対象図形Mを, ドラグ後マウスボタンを離したらその色を変える.さらに,以下の図に示すように, Mの重心(x1,y1)とLU直線との距離が最短となるLU直線上の点をpとしたとき, Mの重心が点pとなるようにMを再配置せよ. M以外の図形は動かす必要はない. 再配置後は,他の図形と重なってもかまわない.

[R4_6] (オプション)

課題R4_5で作成したプログラムで,特定の図形を移動した場合,一般には 各図形の重心がLU直線上に等間隔で並ばない. 移動後の重心位置の順番はそのままで, 図形の重心がLU直線上に等間隔で並び,かつ図形が互いに重ならないように再配置せよ. ただし,再配置後に端の図形がウィンドウからはみ出る場合には,それがウィンドウ内に収まるように,各図形を平行移動したり,縮小したりして, 先に移動した図形Mも含めて図形が等間隔になるようにせよ.