如何旋转组合物理体与其中心:corona SDK

时间:2013-01-25 06:57:38

标签: android rotation physics corona

我正在用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)
 --------------------------------------------------------------------------------------

提前致谢...

2 个答案:

答案 0 :(得分:2)

如果简单体 B 位于(x b ,y b ),轴点 C 位于(x b ,y b ),并且您希望按角度围绕 C 旋转 B t(逆时针), B 进入

B' =(x c +(x b -x c )cos(t) - (y b -y c )sin(t),y c +(x b -x C )SIN(t)的+(Y <子> b'/子> -y <子> C )COS(t))的

您可以用矩阵表示法更简洁地表达这一点:

B'= C + R B - C

,其中

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

答案 1 :(得分:1)

谢谢@Beta,但我找到了解决方案。我只是使用下面的代码给身体一个角度冲动并连续应用它,我完成了工作。

  body_3:applyAngularImpulse( -1000 )

感谢支持人员。