美文网首页
回到力的话题

回到力的话题

作者: 大龙10 | 来源:发表于2022-06-10 06:49 被阅读0次

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

5.12 回到力的话题

1、Box2D力的作用

  • Box2D中也存在力的作用,因为我们看到前面的各种矩形和圆会在屏幕中旋转和移动。但到目前为止,我们只学会了如何操纵其中的一个全局作用力——重力。
box2d = new PBox2D(this);
box2d.createWorld();
box2d.setGravity(0, -20);    设置全局的重力
  • 如果想在Box2D中使用第2章的技术,我们只需要研究其中的applyForce()函数
  • Mover类实现了这个applyForce()函数:它的参数是一个向量,函数内部将这个向量除以质量,再把得到的结果加到运动者对象的加速度上。
  • Box2D也有同样的函数,而且不需要我们去实现它。我们可以直接在Box2D的物体上调用applyForce()函数!
class Box {
    Body body;
    void applyForce(Vec2 force) {
    Vec2 pos = body.getWorldCenter();
    body.applyForce(force, pos);   调用物体的applyForce()函数
  }
}
  • 以上程序得到一个力向量,并将它作用在Box2D物体上。和第2章中的示例程序相比,Box2D是一个更复杂的物理引擎。前面的示例程序假设力总是作用在物体的中心点,但在Box2D中,我们需要指定力在物体上的作用位置。尽管以上程序还是将力作用在物体的中心点上,但力的作用点是可设置的,它可以不在中心点上。

  • 假设我们需要模拟引力,在第2章,我们在Attractor类中模拟了引力,你还记得我们当时是怎么做的吗?

PVector attract(Mover m) {
    PVector force = PVector.sub(location,m.location);
    float distance = force.mag();
    distance = constrain(distance,5.0,25.0);
    force.normalize();
    float strength = (g mass m.mass) / (distance * distance);
    force.mult(strength);
    return force;
}
  • 我们可以用Vec2重新实现同样的函数,并在Box2D中使用它。力的计算过程完全基于Box2D坐标,不需要任何像素坐标。
Vec2 attract(Mover m) {
      Vec2 pos = body.getWorldCenter();   首先我们要向Box2D询问位置
      Vec2 moverPos = m.body.getWorldCenter();
      Vec2 force = pos.sub(moverPos);
      float distance = force.length();
      distance = constrain(distance,1,5);
      force.normalize();
      float strength = (G * 1 m.body.m_mass) / (distance distance);
      force.mulLocal(strength);    记住,在Box2D中,向量相乘的函数是mulLocal()
      return force;
}

2、示例

鼠标风力


相关文章

  • 回到力的话题

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

  • 自控力冥想

    嗨,大家好,欢迎回到老理想电台。今天我们来讨论自控力这个话题。我们总是会遇到这样的情况。明知道是垃圾食品,却忍不住...

  • 思想力家庭教育

    思想力家庭教育:好的家庭不抱怨 今天和大家分享一个话题:好的家庭不抱怨 过年了,我们很多的小伙伴都会回到家,你能不...

  • 思想力家庭教育:好的家庭不抱怨

    思想力家庭教育:好的家庭不抱怨 今天和大家分享一个话题:好的家庭不抱怨 过年了,我们很多的小伙伴都会回到家,你能不...

  • D曾嘉悦171013003

    《网络素养》随笔1 1.注意力 作者在图书第一章开篇就讨论了“注意力”话题。 作者为什么开篇就讨论“注意力”话题。...

  • 充满想象力的话题才是最好的话题

    如果你现在获得了一个的药丸,吃了之后可以回到从前,你会选择回到什么时候? 如果你突然获得了一个超能力,你最想获得的...

  • 如何持续性的创造话题

    品牌获得关注的最好方式就是持续创造话题,话题就是最好的传播力。话题的设计很重要,好话题是一个导火索,我们最终的目的...

  • 关于领导力的遐(瞎)想

    领导力是一个大话题,各家各派,著述极其丰富。领导力也是一个不断被提及的话题,因为我们活在一个领导力不可或缺的时代。...

  • 关于执行力的话题

    chen的话题:经常有人问我你每天5点多起床是怎么做到的,你制定的计划都能完成吗?那今天的问题是:你觉得自己是一个...

  • 关于记忆力的话题

    实事求是讲,我的记忆力非常差,考一建就可略见一斑。《最强大脑》的热播,惊讶于精彩的表演的同时对自己的记忆力嗤之...

网友评论

      本文标题:回到力的话题

      本文链接:https://www.haomeiwen.com/subject/yvuqmrtx.html