【问题标题】:How to rotate a combined physics body with its center : corona SDK如何以中心旋转组合物理体:corona SDK
【发布时间】:2013-01-25 06:57:37
【问题描述】:

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

提前谢谢...

【问题讨论】:

  • 您需要帮助围绕轴旋转身体吗? 或选择轴?
  • @Beta : 你好,我需要围绕它的轴旋转身体。
  • 好吧,我们可以将问题简化为围绕轴旋转一个简单的物体(并对组合体的三个元素中的每一个都这样做)。这似乎是二维的,所以问题是:给定一个物体、一个角度和一个点,在我们围绕该点将物体旋转该角度后,找到物体的新位置(xy)。对吗?
  • @Beta:是的。在这里,我需要相对于它的中心旋转整个身体。如果您有任何线索,请澄清。谢谢。

标签: android rotation physics coronasdk


【解决方案1】:

若简单体B位于(xb, yb),轴点C 在 (xb, yb) 处,你想将 BC 旋转一个角度t(逆时针),B

B' = (xc+(xb-xc)cos(t)- (yb-yc)sin(t), yc+(xb-xc)sin(t)+(yb-yc)cos(t))

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

B' = C + R(B-C)

在哪里

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

【讨论】:

  • 谢谢你的回答老兄。但是,对于我在之前的 cmets 中提到的内容,我感到很抱歉。那就是:我必须用它的轴旋转整个身体。但我不知道如何找到组合体的新轴(比如 X),以及如何围绕轴“X”旋转整个身体。 :(
  • 您对向量感到满意吗?用矩阵?你明白我所说的围绕 C 旋转 B 的意思吗?您是否看到围绕 C 旋转几个点(B1B2B3...)?您在选择旋转中心(又名轴)时遇到问题吗?你在寻找重心吗?
【解决方案2】:

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

  body_3:applyAngularImpulse( -1000 )

感谢大家的支持。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-21
    • 2016-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多