「がんばれない」けど「がんばりたい」

ITエンジニアの仕事のこと。AI、機械学習、ディープラーニング。地頭力。車のこと。

Programming Interactivity #3 〜Vector (2)〜

ベクトルの概念と考え方は理解したので、 より理解を深める為に実際にコードを書いてみようと思う。

まず、オブジェクトとして、ボールを動かすとします。

1.場の力を何にするか ここでは、場の力に重力を使用するとします。 ofVec2f gravity; また、後述するボールインスタンスを定義しておきます。 Ball balls[3];

2.1.で決定した力の初期化

void testApp:setup() {
/*
* 下向きの重力
*/
gravity = ofVef2f(0.0, 0.5f);

/*
* ボールの色初期化
*/
balls[0].color[0] = 0;
balls[0].color[1] = 0;
balls[0].color[2] = 0;
}

3.ボールの次のベクトルを決定する update()で、ボールに力を与える事によって、 次フレームでの位置/速度/加速度を変更します。

void testApp:update() {
for (int i = 0; i < 3; i ++) {
/*
* addForceでは、質量/gravityをボールの加速度に加える事を行っています。
*/
balls[i].addForce(gravity);

/*
* updateBallでは、
* 速度 += 加速度
* 位置 += 速度
* としてボールのベクトルを更新しています。
*/
balls[i].updateBall();
}
}

3.ボールの描画(再配置) ボールのベクトルが更新されたので、ボールを再描画します。

void testApp:draw() {
for (int i = 0; i < 3; i++) {
/*
* drawFrameでは単に、更新された位置に、
* 円を描いています。
*/
balls[i].drawFrame();
}
}

ex1) The value of the gravity is constant.

Vector Study 01 from Kazuyoshi Ueno on Vimeo.

ex2) The virtical direction value of the gravity is determined by mouse position.

Vector Study 02 from Kazuyoshi Ueno on Vimeo.

ex3) The both of virtical and horizontal value of the gravity is determined by mouse position.

Vector Study 03 from Kazuyoshi Ueno on Vimeo.