热点新闻
制造外力(多个受力小球)
2023-07-10 00:52  浏览:870  搜索引擎搜索“错改B2B”
温馨提示:为防找不到此信息,请务必收藏信息以备急用! 联系我时,请说明是在错改B2B看到的信息,谢谢。
展会发布 展会网站大全 报名观展合作 软文发布

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

2.5 制造外力

3、示例代码2-2

  • Mover类
    不同点主要集中在两个方面——质量和applyForce()函数的实现
  • 在数组中创建100个Mover对象。
  • 在setup()函数中用循环对这些对象进行初始化。
  • 在构造函数中添加几个参数,让它变得更灵活。
    物体的质量和初始位置就不再是硬性编码的数值了,我们可以通过构造函数来确定它们
      

Mover[] movers = new Mover[20]; void setup() { size(640,360); for (int i = 0; i < movers.length; i++) { movers[i] = new Mover(random(0.1,4),0,0); } } void draw() { background(255); for (int i = 0; i < movers.length; i++) { PVector wind = new PVector(0.01,0); PVector gravity = new PVector(0,0.1); movers[i].applyForce(wind); movers[i].applyForce(gravity); movers[i].update(); movers[i].display(); movers[i].checkEdges(); } }

mover.pde

class Mover { PVector position; PVector velocity; PVector acceleration; float mass; color c; Mover(float m, float x , float y) { mass = m; position = new PVector(x,y); velocity = new PVector(0,0); acceleration = new PVector(0,0); c = color(random(255),random(255),random(255)); } 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(0,127); fill(c); ellipse(position.x,position.y,mass*16,mass*16); } 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; } } }


多个受力小球


请注意:在上图中,小圆到达窗口右侧比大圆更快,这是因为加速度=力除以质量,
质量越大,加速度越小。

发布人:2531****    IP:117.173.23.***     举报/删稿
展会推荐
让朕来说2句
评论
收藏
点赞
转发