2016-09-03 13 views
1

私はボールがどこに上陸するかを計算する方法を理解しようとしています。基本的には、「ボール」は男の手のところに約2フィートの位置にセットされます。力/ Impulseを加えた後のSCNNodeの位置を見つける方法は?

私はボールの現在の位置を取って、それを前進させる力/衝動を加えたいと思います。土地に入る前に、ボールがどこにぶつかるかを予測したいと思っています。また、シーンの地面の高さは、ベクトルはすべて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

SceneKitがメソッドtを提供するかどうかわかりませんoこれを行う。しかし、あなたの 'forceApplied'が実際にインパルスであると仮定すると、私は水平変位を計算する一連の方程式を提供することができます。それらをコードに入れなければなりません。 – bpedit

+0

できればそれは素晴らしいだろう。投稿してください! @bpedit – Hunter

答えて

1

ここでは、等式を使って水平変位を計算する方法を説明します。 gの値はSceneKitのデフォルトの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 
関連する問題