書名:代碼本色:用編程模擬自然系統(tǒng)
作者:Daniel Shiffman
譯者:周晗彬
ISBN:978-7-115-36947-5
目錄
1.8 向量的運動:加速度
四茫孔、示例代碼1-9
1缰贝、算法2
- 該算法中的加速度是隨機確定的揩瞪,因此,我們不能只在構(gòu)造函數(shù)中初始化加速度值,
- 應(yīng)該在每一輪循環(huán)中選擇一個隨機數(shù)作為新的加速度壹将。
- 我們可以在update()函數(shù)中完成這項任務(wù)毛嫉。
2、隨機加速度
void update() {
acceleration = PVector.random2D(); random2D()函數(shù)返回一個長度為1暴区、方向隨機的向量
velocity.add(acceleration);
velocity.limit(topspeed);
location.add(velocity);
}
由于每次調(diào)用PVector.random2D()得到的向量都是單位向量,因此還應(yīng)該改變它的大小房交,如下:
- (a)將加速度乘以一個常量:
- (b)將加速度乘以一個隨機值:
acceleration = PVector.random2D();
acceleration.mult(0.5); 常量
acceleration = PVector.random2D();
acceleration.mult(random(2)); 隨機
我們必須清楚地意識到這樣一個關(guān)鍵點:加速度不僅僅會改變運動物體速度的大小伐割,還會改變速度的方向。加速度用于操縱物體白群,在后面的章節(jié)中硬霍,我們將繼續(xù)在屏幕上操縱物體運動,也會經(jīng)沉涣幔看到加速度的作用耐床。
3、示例代碼1-9
運動101(速度和隨機加速度)
Mover mover;
void setup() {
size(640,360);
mover = new Mover();
}
void draw() {
// background(255);
mover.update();
mover.checkEdges();
mover.display();
}
//---mover.pde
class Mover {
PVector position;
PVector velocity;
PVector acceleration;
float topspeed;
Mover() {
position = new PVector(width/2, height/2);
velocity = new PVector(0, 0);
topspeed = 6;
}
void update() {
acceleration = PVector.random2D();
acceleration.mult(random(2));
velocity.add(acceleration);
velocity.limit(topspeed);
position.add(velocity);
}
void display() {
stroke(0);
strokeWeight(2);
fill(127);
ellipse(position.x, position.y, 48, 48);
}
void checkEdges() {
if (position.x > width) {
position.x = 0;
}
else if (position.x < 0) {
position.x = width;
}
if (position.y > height) {
position.y = 0;
}
else if (position.y < 0) {
position.y = height;
}
}
}