図形の位置の計算
draw()関数の中で、描く図形の位置を変えることで、アニメーションのように動いて見えます。例えば、円のx座標を1ずつ増やせば、円が水平に運きます。図形に運動させる時には、図形の座標位置を計算する必要があります。その時、運動の法則の基本が役に立ちます。
等速運動
座標が同じ大きさで変化するのが、等速運動です。位置の変化(スピード)を現在位置に加えることで、新しい位置を計算します。
新しい位置 = 現在位置 + 速度
【例】 let x = 10;
let speed = 1; //速度は1
x = x + speed; //位置を計算
速度が負だと座標値が減り、水平運動の場合左へ動きます。次のリストは、左右の壁に来たらスピードの正負を逆転させて、壁に跳ね返らせています。
クリックで開始⇔停止
【リストT3-1-1】
let d = 20; //円の直径
let x = d/2; //円の最初のx座標
let speed = 1; //スピード
function setup() {
createCanvas(250, 150);
fill(200, 0, 0);
noStroke();
}
function draw() {
background(240);
x = x + speed;
circle(x, height/2, d);
if (x >= width-d/2 || x < d/2) { //左右の壁に当たった
speed = -speed; //スピードを逆転
}
}
加速度運動
速度が一定の割合で変化するのが、加速度運動です。
新しい速度 = 現在速度 + 加速度
新しい位置 = 現在位置 + 速度
【例】 let x = 0;
let speed = 1; //速度は1
let a = 0.1; //加速度は0.1
speed = speed + a; //速度を計算
x = x + s; //位置を計算
等速運動のリストT3-1-1で、速度を変えたのが、リストT3-1-2です。画面右に消えて、左に現れる時、最初の速度に戻るようにしました。
クリックで開始⇔停止
【リストT3-1-2】
let d = 20; //円の直径
let x = d/2; //円の最初のx座標
let speed = 1; //スピード
let a = 0.1; //加速度
function setup() {
createCanvas(200, 150);
fill(200, 0, 0);
noStroke();
}
function draw() {
background(240);
speed = speed + a;
x = x + speed;
circle(x, height/2, d);
if (x >= width) {
speed = 1; //速度を元に戻す
x = d/2; //円を左壁上に置く
}
}
演習問題
クリックで再始動
円の左辺からの水平方向の位置をx、止めたい位置をlastXとすると、次のようにこれらの値を比較して動作を決めます。
if (x >= lastX) { //最終x座標になったら
//スピードをゼロにし、描画色を青にする
} else {
//スピードを1にし、描画色を赤にする
}
クリックで再始動
キャンバスの座標は左上角が原点(0,0)で、垂直方向のy座標は、下に行くほど大きい値になります。そこに注意が必要です。
キャンバスの下辺と円中心との距離をyとすると、描画の時は次のように円の位置を指定します。
circle(x, height-y, d); //height-yは円の上辺からの位置
//heightはキャンバスの高さ
yの値をスピード分だけ徐々に増やし、止めたい位置より大きくなったら、スピードをゼロにします。