高橋裕樹 アニメーション 乱数の利用 Java 演習 (7)...
Transcript of 高橋裕樹 アニメーション 乱数の利用 Java 演習 (7)...
Java 演習 (7)– アニメーション
–
高橋 裕樹
アニメーション
乱数の利用
ボールの反射Java演習 (7)– アニメーション –
高橋 裕樹
Java 演習 (7)– アニメーション
–
高橋 裕樹
アニメーション
乱数の利用
ボールの反射
アニメーション
例題
ボールが左から右に等速直線運動するアニメーションプログラムを作成せよ.
等速直線運動
一定速度 v で,ある空間内で一定方向に物体が移動する運動x(t) = x(0) + vx t
物体の時刻 t における位置: x(t)速度: vx
Java 演習 (7)– アニメーション
–
高橋 裕樹
アニメーション
乱数の利用
ボールの反射
水平方向に等速直線運動するボール (BallMove1-1.java)
import javax.swing.JApplet;import javax.swing.Timer;import java.awt.Graphics;import java.awt.Dimension;import java.awt.event.*;
public class BallMove1 extends JApplet {Dimension d;int x, vx;
10
public void init(){d = getSize();x = 0; vx = 1;
new Timer(20, new ActionListener(){public void actionPerformed(ActionEvent e){
if(x < d.width) x += vx;else x = 0;
repaint(); 20
}}).start();
}
Java 演習 (7)– アニメーション
–
高橋 裕樹
アニメーション
乱数の利用
ボールの反射
水平方向に等速直線運動するボール (BallMove1-2.java)
public void paint(Graphics g){g.clearRect(0, 0, d.width, d.height);g.drawArc(x, 10, 10, 10, 0, 360);
}}
Java 演習 (7)– アニメーション
–
高橋 裕樹
アニメーション
乱数の利用
ボールの反射
Timerクラス
Timer
Timer(int delay, ActionListener listener)
delay: メソッド (java.awt.event.ActionListener) を呼び出す時間間隔 (ms: millisecond)listener: アクションリスナインタフェース
アクションイベントが発生 ⇒ actionPerformed メソッドactionPerformed メソッドに記述された文が一定間隔で実行
15-22行目
現在の座標値 xに,速度 vxを加算
repaintメソッド呼び出し ⇐ 再描画 (paintメソッド)
Timer().start();⇐ タイマの開始
25-28行目
clearRectメソッド ⇐ 明示的に背景を塗りつぶす
Java 演習 (7)– アニメーション
–
高橋 裕樹
アニメーション
乱数の利用
ボールの反射
練習
練習
BallMove1.javaのボールの速度を倍にしたアニメーションプログラムを作成せよ.
Java 演習 (7)– アニメーション
–
高橋 裕樹
アニメーション
乱数の利用
ボールの反射
練習
練習
ボールが上から下に等速直線運動するアニメーションプログラムを作成せよ.
Java 演習 (7)– アニメーション
–
高橋 裕樹
アニメーション
乱数の利用
ボールの反射
練習
練習
ボールが右から左に等速直線運動するアニメーションプログラムを作成せよ.
Java 演習 (7)– アニメーション
–
高橋 裕樹
アニメーション
乱数の利用
ボールの反射
2次元平面上の運動
例題
ボールが平面上を等速直線運動するアニメーションプログラムを作成せよ.
2次元平面上の運動
直交する座標軸成分に分解x , y 軸方向成分
各成分ごとに等速直線運動x(t) = x(0) + vx t
y(t) = y(0) + vy t
Java 演習 (7)– アニメーション
–
高橋 裕樹
アニメーション
乱数の利用
ボールの反射
2次元平面上の運動
2次元平面上で等速直線運動するボール (BallMove5-1.java)
import javax.swing.JApplet;import javax.swing.Timer;import java.awt.Graphics;import java.awt.Dimension;import java.awt.event.*;
public class BallMove5 extends JApplet {Dimension d;int x, y, vx, vy, w = 10;
10
public void paint(Graphics g){g.clearRect(0, 0, d.width, d.height);g.drawArc(x, y, w, w, 0, 360);
}
Java 演習 (7)– アニメーション
–
高橋 裕樹
アニメーション
乱数の利用
ボールの反射
2次元平面上の運動2次元平面上で等速直線運動するボール (BallMove5-2.java)
public void init(){d = getSize();x = y = 0;vx = 1; vy = 2;
new Timer(20, new ActionListener(){public void actionPerformed(ActionEvent e){
if(x < d.width && y < d.height){x += vx;y += vy; 10
}else{
x = y = 0;}
repaint();}
}).start();}
} 20
Java 演習 (7)– アニメーション
–
高橋 裕樹
アニメーション
乱数の利用
ボールの反射
ランダムな位置からの等速直線運動
例題
ボールが描画領域のランダムな位置から等速直線運動するアニメーションプログラムを作成せよ.
Java 演習 (7)– アニメーション
–
高橋 裕樹
アニメーション
乱数の利用
ボールの反射
乱数
乱数
Math.randomメソッド0 ≤ x < 1 doubleの乱数
条件
描画範囲: 幅 d.width × 高さ d.height
ボール: 幅 w × 高さ wの外接矩形
初期位置
x 座標: 0以上 (d.width - w)未満の整数
y 座標: 0以上 (d.height - w)未満の整数
Java 演習 (7)– アニメーション
–
高橋 裕樹
アニメーション
乱数の利用
ボールの反射
キャスト
初期位置
x 座標: 0以上 (d.width - w)未満の整数(d.width - w) * Math.random()
⇒ doubleの値
数値演算精度の高い型に暗黙に変換整数型 * double型 ⇒ double型
ボールの描画
drawArc(int x, int y, int w, int h, int theta, int
phi)
キャスト
明示的な型変換(型) 文
(int)((d.width - w) * Math.random())
Java 演習 (7)– アニメーション
–
高橋 裕樹
アニメーション
乱数の利用
ボールの反射
キャスト
初期位置
x 座標: 0以上 (d.width - w)未満の整数(d.width - w) * Math.random()
⇒ doubleの値
数値演算精度の高い型に暗黙に変換整数型 * double型 ⇒ double型
ボールの描画
drawArc(int x, int y, int w, int h, int theta, int
phi)
キャスト
明示的な型変換(型) 文
(int)((d.width - w) * Math.random())
Java 演習 (7)– アニメーション
–
高橋 裕樹
アニメーション
乱数の利用
ボールの反射
キャスト
初期位置
x 座標: 0以上 (d.width - w)未満の整数(d.width - w) * Math.random()
⇒ doubleの値
数値演算精度の高い型に暗黙に変換整数型 * double型 ⇒ double型
ボールの描画
drawArc(int x, int y, int w, int h, int theta, int
phi)
キャスト
明示的な型変換(型) 文
(int)((d.width - w) * Math.random())
Java 演習 (7)– アニメーション
–
高橋 裕樹
アニメーション
乱数の利用
ボールの反射
キャスト
初期位置
x 座標: 0以上 (d.width - w)未満の整数(d.width - w) * Math.random()
⇒ doubleの値
数値演算精度の高い型に暗黙に変換整数型 * double型 ⇒ double型
ボールの描画
drawArc(int x, int y, int w, int h, int theta, int
phi)
キャスト
明示的な型変換(型) 文
(int)((d.width - w) * Math.random())
Java 演習 (7)– アニメーション
–
高橋 裕樹
アニメーション
乱数の利用
ボールの反射
キャスト
初期位置
x 座標: 0以上 (d.width - w)未満の整数(d.width - w) * Math.random()
⇒ doubleの値
数値演算精度の高い型に暗黙に変換整数型 * double型 ⇒ double型
ボールの描画
drawArc(int x, int y, int w, int h, int theta, int
phi)
キャスト
明示的な型変換(型) 文
(int)((d.width - w) * Math.random())
Java 演習 (7)– アニメーション
–
高橋 裕樹
アニメーション
乱数の利用
ボールの反射
キャスト
初期位置
x 座標: 0以上 (d.width - w)未満の整数(d.width - w) * Math.random()
⇒ doubleの値
数値演算精度の高い型に暗黙に変換整数型 * double型 ⇒ double型
ボールの描画
drawArc(int x, int y, int w, int h, int theta, int
phi)
キャスト
明示的な型変換(型) 文
(int)((d.width - w) * Math.random())
Java 演習 (7)– アニメーション
–
高橋 裕樹
アニメーション
乱数の利用
ボールの反射
キャスト
初期位置
x 座標: 0以上 (d.width - w)未満の整数(d.width - w) * Math.random()
⇒ doubleの値
数値演算精度の高い型に暗黙に変換整数型 * double型 ⇒ double型
ボールの描画
drawArc(int x, int y, int w, int h, int theta, int
phi)
キャスト
明示的な型変換(型) 文
(int)((d.width - w) * Math.random())
Java 演習 (7)– アニメーション
–
高橋 裕樹
アニメーション
乱数の利用
ボールの反射
2次元平面上で等速直線運動するボール (BallMove6-1.java)
import javax.swing.JApplet;import javax.swing.Timer;import java.awt.Graphics;import java.awt.Dimension;import java.awt.event.*;
public class BallMove6 extends JApplet {Dimension d;int x, y, vx, vy, w = 10;
10
public void paint(Graphics g){g.clearRect(0, 0, d.width, d.height);g.drawArc(x, y, w, w, 0, 360);
}
Java 演習 (7)– アニメーション
–
高橋 裕樹
アニメーション
乱数の利用
ボールの反射
2次元平面上で等速直線運動するボール (BallMove6-2.java)
public void init(){d = getSize();x = (int)((d.width − w) * Math.random());y = (int)((d.height − w) * Math.random());vx = 1; vy = 2;
new Timer(20, new ActionListener(){public void actionPerformed(ActionEvent e){
if(x < d.width && y < d.height){x += vx; 10
y += vy;}else{
x = (int)((d.width − w) * Math.random());y = (int)((d.height − w) * Math.random());
}
repaint();}
}).start(); 20
}}
Java 演習 (7)– アニメーション
–
高橋 裕樹
アニメーション
乱数の利用
ボールの反射
練習
練習
ボールが描画領域のランダムな位置からランダムなスピードで等速直線運動するアニメーションプログラムを作成せよ.ただし,x , y 方向の速度は正に制限する.
Java 演習 (7)– アニメーション
–
高橋 裕樹
アニメーション
乱数の利用
ボールの反射
練習
練習
ボールが描画領域のランダムな位置からランダムなスピードで等速直線運動するアニメーションプログラムを作成せよ.
Java 演習 (7)– アニメーション
–
高橋 裕樹
アニメーション
乱数の利用
ボールの反射
ボールの反射
例題
ボールが描画範囲内を壁に反射しながら左右に等速直線運動するアニメーションプログラムを作成せよ.
反射
ボール左 → 右 ...(反射)... 左 ← 右壁に衝突すると進行方向が反転
x 座標 ... 0以下 または d.width - 1 - w以上a
進行方向が反転 ⇒ 速度の符号を反転
a正確な衝突判定ではない
Java 演習 (7)– アニメーション
–
高橋 裕樹
アニメーション
乱数の利用
ボールの反射
ボールの反射
例題
ボールが描画範囲内を壁に反射しながら左右に等速直線運動するアニメーションプログラムを作成せよ.
反射
ボール左 → 右 ...(反射)... 左 ← 右壁に衝突すると進行方向が反転
x 座標 ... 0以下 または d.width - 1 - w以上a
進行方向が反転 ⇒ 速度の符号を反転
a正確な衝突判定ではない
Java 演習 (7)– アニメーション
–
高橋 裕樹
アニメーション
乱数の利用
ボールの反射
ボールの反射
例題
ボールが描画範囲内を壁に反射しながら左右に等速直線運動するアニメーションプログラムを作成せよ.
反射
ボール左 → 右 ...(反射)... 左 ← 右壁に衝突すると進行方向が反転
x 座標 ... 0以下 または d.width - 1 - w以上a
進行方向が反転 ⇒ 速度の符号を反転
a正確な衝突判定ではない
Java 演習 (7)– アニメーション
–
高橋 裕樹
アニメーション
乱数の利用
ボールの反射
ボールの反射
例題
ボールが描画範囲内を壁に反射しながら左右に等速直線運動するアニメーションプログラムを作成せよ.
反射
ボール左 → 右 ...(反射)... 左 ← 右壁に衝突すると進行方向が反転
x 座標 ... 0以下 または d.width - 1 - w以上a
進行方向が反転 ⇒ 速度の符号を反転
a正確な衝突判定ではない
Java 演習 (7)– アニメーション
–
高橋 裕樹
アニメーション
乱数の利用
ボールの反射
ボールの反射
例題
ボールが描画範囲内を壁に反射しながら左右に等速直線運動するアニメーションプログラムを作成せよ.
反射
ボール左 → 右 ...(反射)... 左 ← 右壁に衝突すると進行方向が反転
x 座標 ... 0以下 または d.width - 1 - w以上a
進行方向が反転 ⇒ 速度の符号を反転
a正確な衝突判定ではない
Java 演習 (7)– アニメーション
–
高橋 裕樹
アニメーション
乱数の利用
ボールの反射
ボールの反射
例題
ボールが描画範囲内を壁に反射しながら左右に等速直線運動するアニメーションプログラムを作成せよ.
反射
ボール左 → 右 ...(反射)... 左 ← 右壁に衝突すると進行方向が反転
x 座標 ... 0以下 または d.width - 1 - w以上a
進行方向が反転 ⇒ 速度の符号を反転
a正確な衝突判定ではない
Java 演習 (7)– アニメーション
–
高橋 裕樹
アニメーション
乱数の利用
ボールの反射
水平方向に反射しながら等速直線運動するボール (BallMove9-1.java)
import javax.swing.JApplet;import javax.swing.Timer;import java.awt.Graphics;import java.awt.Dimension;import java.awt.event.*;
public class BallMove9 extends JApplet {Dimension d;int x, w = 10, vx;
10
public void paint(Graphics g){g.clearRect(0, 0, d.width, d.height);g.drawArc(x, d.height − w − 1, w, w, 0, 360);
}
Java 演習 (7)– アニメーション
–
高橋 裕樹
アニメーション
乱数の利用
ボールの反射
水平方向に反射しながら等速直線運動するボール (BallMove9-2.java)
public void init(){d = getSize();x = 10;vx = 1;
new Timer(20, new ActionListener(){public void actionPerformed(ActionEvent e){
if(x <= 0 | | x + w >= d.width − 1) vx *= −1;x += vx;repaint(); 10
}}).start();
}}
Java 演習 (7)– アニメーション
–
高橋 裕樹
アニメーション
乱数の利用
ボールの反射
練習
練習
ボールが描画領域内で壁に反射しながら 2次元平面内で等速直線運動するプログラムを作成せよ.