Nature of codeを勉強中です。
Nature of codeの「力の章/自律エージェントの章」のメモです。
Nature of code
http://natureofcode.com/
p5.jsのソース
https://github.com/shiffman/The-Nature-of-Code-Examples-p5.js
力と加速度
質量に加速度をかけると、力になる
f = m * a
a = f / m
fとaはベクトル、mはスカラー。
簡易的にm = 1 とすれば、 f = a でいける、ともいえる。
コードはこんな。
- 力を加えると加速度が増す
- 毎回update()内で速度に加速度分を加算したら0にする
applyForce(force) {
var f = p5.Vector.div(force, this.mass); |
this.acceleration.add(f);
}
update(){
this.velocity.add(this.acceleration);
this.position.add(this.velocity);
this.acceleration.mult(0);
}
重力を使う場合、このように呼ぶ。
function draw() {
let gravity = createVector(0, 0.1);
m.applyForce(gravity);
m.update();
}
例:摩擦 (friction)の加え方
摩擦は
f = -1 * μ * N * v
であらわされる
muは定数。Nは抗力、vは速度
仮に抗力を1で不変とした場合、速度の大きさに比例した逆方向の力を加えることになる。
加わる力は一貫してaddForceで与えるようにしておく。mover.addForce(friction);
例:万有引力を加える
これもaddForceで与える。 mover.addForce(gravity);
操舵行動
舵をきり、目的地に到着するような動き。
基本
- 現在の速度ベクトルv1に対し
- 目的地へたどり着くような、理想の速度ベクトルv2を定義する。
- v2は、よしなに弱めておく(maxSpeedで制限)
- (v2-v1)方向に進むような力v3をaddForceするのだが、これもよしなに弱める(maxForceで制限)
- 弱めることによって、味のある動き、生きてるっぽい動きになる
到着行動
目的地に近づくにしたがってmaxSpeedを下げる