2013-01-25 24 views
1

我正在用corona SDK做一個物理應用程序。在那裏,我創建了一個有關節的組合物理體。我需要的是:'我需要旋轉新的組合體與其中心'。我正在給代碼。任何人都請幫助...如何旋轉以其中心組合的物理機構:corona SDK

-------------------------------------------------------------------------------------- 
    local physics = require("physics") 
    physics.start() 
    physics.setDrawMode("debug") 
    --------------------------- 
    -- Creating bodies -- 
    --------------------------- 
    local body_1 = display.newRect(0,0,40,40) 
    local body_2 = display.newRect(0,0,40,40) 
    local body_3 = display.newRect(0,0,40,40) 
    local base_1 = display.newRect(0,display.contentHeight,display.contentWidth,display.contentHeight) 
    body_1.x = 100; body_1.y = 250; 
    body_2.x = 100; body_2.y = 300; 
    body_3.x = 150; body_3.y = 275; 

    --------------------------- 
    -- Adding Physics -- 
    --------------------------- 
    physics.addBody(body_1, { density=1.6, friction=0.5, bounce=0.0}) 
    physics.addBody(body_2, { density=1.6, friction=0.5, bounce=0.0}) 
    physics.addBody(body_3, { density=1.6, friction=0.5, bounce=0.02, radius = 20}) 
    physics.addBody(base_1, "static", { density=1.6, friction=0.5, bounce=0.2}) 

    --------------------------- 
    -- Creating Joints -- 
    --------------------------- 
    local myJoint_1 = physics.newJoint("weld", body_1, body_2, 100,250) 
    local myJoint_2 = physics.newJoint("pivot", body_1, body_3, 100,250) 
    local myJoint_2 = physics.newJoint("pivot", body_2, body_3, 100,300) 

    --------------------------- 
     -- My Function -- 
    --------------------------- 
    local function rotateTheGroup() 
     -- I want to rotate the combined body here. And I need to know the newBodie's referencepoint. 
    end 
Runtime:addEventListener("tap",rotateTheGroup) 
-------------------------------------------------------------------------------------- 

在此先感謝...

+0

您需要幫助嗎?*圍繞一個軸旋轉一個物體?*或選擇軸? – Beta

+0

@貝塔:嗨,我需要圍繞它的軸旋轉身體。 –

+0

好的,我們可以簡化這個問題,使一個簡單的物體圍繞一個軸旋轉(並且爲組合物體的三個元素中的每一個元素)。這看起來是2D的,所以問題是:給定一個物體,一個角度和一個點,在我們圍繞該點旋轉角度後找到新物體的位置('x'和'y')。那是對的嗎? – Beta

回答

2

如果簡單的身體是位於(x b,Y b)和軸點ç是在(X b,Y b),並且要通過角度噸(逆時針),周圍ç旋轉乙乙進入

B」 =(X Ç +(X b -x Ç)COS(T) - (Y b -y Ç)SIN(噸)中,y ç +(X b -x ç)SIN(t)的+(Y b -y ç)COS(t))的

可以表達這種更簡明在矩陣表示法中:

B」 = Ç + - [R - Ç

其中

R = cos(t) -sin(t) 
    sin(t) cos(t) 
+1

謝謝你的答案。但是,我很抱歉我在前面的評論中提到過的內容。那就是:我必須用它的軸旋轉整個身體。但我不知道如何找到組合體的新軸(如X),以及如何圍繞軸「X」旋轉整體。 :( –

+0

你對矢量感覺舒服嗎?用矩陣?你看到我的意思是圍繞** C **旋轉** B **嗎?你看到旋轉幾個點(** B1 **,** B2 * *,** B3 ** ...)圍繞** C **?您是否在選擇旋轉中心(aka軸)時遇到困難?您是否在尋找重心? – Beta

1

由於@Beta ,但我找到了一個解決方案。我只是使用下面的代碼給身體一個角度衝動並不斷應用它,我完成了工作。

body_3:applyAngularImpulse(-1000) 

感謝支持人員。