如何在添加强制/脉冲后找到SCNNode将落入的位置?

时间:2016-09-03 06:35:27

标签: ios swift scenekit

我正在试图弄清楚如何计算球落地的位置。基本上,“球”设置在距离手掌大约2英尺的位置。

然后我想拿球的当前位置并施加一个力/冲动它将向前推进它。在它落地之前,我想试着预测球会撞到地面的位置。也是场景中地面的高度,矢量在0位置明智。

所以基本上可以计算出球落地的位置?

Ball.position = SCNVector3Make(Guy.presentationNode.position.x, Guy.presentationNode.position.y, Guy.presentationNode.position.z)          
var Currentposition = Ball.presentationNode.position
var forceApplyed = SCNVector3(x: 50.0, y: 20.0 , z: 0.0)
var LandingPiont = Currentposition + forceApplyed // Error on this line of code saying "+" cannot be applyed to CGVector
Ball.physicsBody?.applyForce(forceApplyed, atPosition: Ball.presentationNode.position, impulse: true)

1 个答案:

答案 0 :(得分:1)

这里是如何使用均匀运动方程计算水平位移。在SceneKit中,g的值设置为默认值9.8,这意味着你在mks系统中(米,千克,秒)。

以下假设为正y方向和向前,球方向移动,是正x。务必注意沿y运动的迹象。 (以下不是代码,虽然看起来格式化了。)

首先找到由于沿y的脉冲引起的初始垂直速度(v0y):

v0y = Jy / m
    m is ball’s mass (in kilograms)
    Jy is impulse along the y  (forceApplied.y)
    (v0y will be negative if Jy is negative)

接下来找到球到达地面时的垂直速度分量(vy)。因为你找到了一个平方根,你会得到+和 - 答案,使用负值。

vy ^2 = v0y ^2  +  2 * g * y
    g is your gravitational constant
    y is ball’s initial height 
    both g and y are negative in your case
    use the negative root, i.e.  vy should be negative

找出球在空中花费的时间(t):

t = (vy – v0y) / g
    remember, vy and g are both negative

现在你需要沿x的速度:

vx = Jx / m
    Jx is impulse along x  (forceApplied.x)
    m is the ball’s mass
    (the velocity along the x remains constant)

最后,求解沿x:

的位移(x)
x = vx * t
    t is the value you got from the vertical motion equations