回到力的話題

書名:代碼本色:用編程模擬自然系統(tǒng)
作者:Daniel Shiffman
譯者:周晗彬
ISBN:978-7-115-36947-5
目錄

5.12 回到力的話題

1之景、Box2D力的作用

  • Box2D中也存在力的作用,因為我們看到前面的各種矩形和圓會在屏幕中旋轉(zhuǎn)和移動馍佑。但到目前為止眷柔,我們只學(xué)會了如何操縱其中的一個全局作用力——重力谣旁。
box2d = new PBox2D(this);
box2d.createWorld();
box2d.setGravity(0, -20);    設(shè)置全局的重力
  • 如果想在Box2D中使用第2章的技術(shù)抵怎,我們只需要研究其中的applyForce()函數(shù)
  • Mover類實現(xiàn)了這個applyForce()函數(shù):它的參數(shù)是一個向量赃梧,函數(shù)內(nèi)部將這個向量除以質(zhì)量省核,再把得到的結(jié)果加到運動者對象的加速度上掂僵。
  • Box2D也有同樣的函數(shù)航厚,而且不需要我們?nèi)崿F(xiàn)它。我們可以直接在Box2D的物體上調(diào)用applyForce()函數(shù)锰蓬!
class Box {
    Body body;
    void applyForce(Vec2 force) {
    Vec2 pos = body.getWorldCenter();
    body.applyForce(force, pos);   調(diào)用物體的applyForce()函數(shù)
  }
}
  • 以上程序得到一個力向量幔睬,并將它作用在Box2D物體上。和第2章中的示例程序相比芹扭,Box2D是一個更復(fù)雜的物理引擎麻顶。前面的示例程序假設(shè)力總是作用在物體的中心點,但在Box2D中舱卡,我們需要指定力在物體上的作用位置辅肾。盡管以上程序還是將力作用在物體的中心點上,但力的作用點是可設(shè)置的轮锥,它可以不在中心點上矫钓。

  • 假設(shè)我們需要模擬引力,在第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重新實現(xiàn)同樣的函數(shù)既绩,并在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中吸重,向量相乘的函數(shù)是mulLocal()
      return force;
}

2互拾、示例

鼠標風(fēng)力


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末歪今,一起剝皮案震驚了整個濱河市颜矿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌田篇,老刑警劉巖箍铭,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件兽赁,死亡現(xiàn)場離奇詭異冷守,居然都是意外死亡拍摇,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門蜂莉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來映穗,“玉大人淮菠,你說我怎么就攤上這事合陵∮抵” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵肮塞,是天一觀的道長枕赵。 經(jīng)常有香客問我位隶,道長涧黄,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮酵颁,結(jié)果婚禮上材义,老公的妹妹穿的比我還像新娘嫁赏。我一直安慰自己潦蝇,他們只是感情好,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著则酝,像睡著了一般沽讹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上爽雄,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天叹谁,我揣著相機與錄音焰檩,去河邊找鬼锅尘。 笑死藤违,一個胖子當著我的面吹牛纵揍,可吹牛的內(nèi)容都是我干的顿乒。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼泽谨,長吁一口氣:“原來是場噩夢啊……” “哼璧榄!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起吧雹,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤骨杂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后雄卷,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體搓蚪,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年丁鹉,在試婚紗的時候發(fā)現(xiàn)自己被綠了妒潭。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡揣钦,死狀恐怖雳灾,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情冯凹,我是刑警寧澤谎亩,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站宇姚,受9級特大地震影響匈庭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜空凸,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一嚎花、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧呀洲,春花似錦紊选、人聲如沸啼止。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽献烦。三九已至,卻和暖如春卖词,著一層夾襖步出監(jiān)牢的瞬間巩那,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工此蜈, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留即横,地道東北人。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓裆赵,卻偏偏與公主長得像东囚,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子战授,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容