制造外力(受重力风力作用的小球)

书名:代码本色:用编程模拟自然系统
作者:Daniel Shiffman
译者:周晗彬
ISBN:978-7-115-36947-5
目录

2.5 制造外力

  我们已经知道力是什么(力是一个向量),也知道如何对物体施加力(除以物体的质量后,再和加速度向量相加)。我们还缺什么?我们还没搞清楚如何获取一个外力,现实世界的各种力到底从何而来?

1、在Processing中制造外力的两种方法

  • 1.编造一个力!
  • 2.模拟现实世界中的力!

2、示例代码2-1

  • 模拟风力和重力
  • 我们拥有了两个外力,它们指向不同的方向,大小也不相等,同时作用在对象m上。
Mover m;

void setup() {
  size(640,360);
  m = new Mover(); 
}

void draw() {
  background(255);

  PVector wind = new PVector(0.01,0);
  PVector gravity = new PVector(0,0.1);
  m.applyForce(wind);
  m.applyForce(gravity);


  m.update();
  m.display();
  m.checkEdges();

}

mover.pde程序

// mover.pde
class Mover {

  PVector position;
  PVector velocity;
  PVector acceleration;
  float mass;

  Mover() {
    position = new PVector(30,30);
    velocity = new PVector(0,0);
    acceleration = new PVector(0,0);
    mass = 1;
  }
  
  void applyForce(PVector force) {
    PVector f = PVector.div(force,mass);
    acceleration.add(f);
  }
  
  void update() {
    velocity.add(acceleration);
    position.add(velocity);
    acceleration.mult(0);
  }

  void display() {
    stroke(0);
    strokeWeight(2);
    fill(127);
    ellipse(position.x,position.y,48,48);
  }

  void checkEdges() {

    if (position.x > width) {
      position.x = width;
      velocity.x *= -1;
    } else if (position.x < 0) {
      velocity.x *= -1;
      position.x = 0;
    }

    if (position.y > height) {
      velocity.y *= -1;
      position.y = height;
    }

  }

}
受风力和重力影响的小球

你可能感兴趣的:(制造外力(受重力风力作用的小球))