1

センサーである円体に渦効果を作ろうとしています。私はこれを探していましたが、私が探しているすべての例は C++ または Objective C にあり、それらをうまく翻訳していないようです。

オブジェクトが衝突すると、beginContact(..) が呼び出され、bodyToUpdate.applyForce(...); を呼び出すことができるようにフラグが設定されます。

 public void beginContact(Contact contact) {
             setColliding(true);
 }

 //updating collition every frame
 public void act(){
     if (colliding) {
        ball.getBody().applyForce(....);

 }

渦にするためにすべてのフレームに適用する力の量を計算する方法は?

編集:

オブジェクトが渦の中心に向かってまっすぐ進むようになりましたが、「スピン」はありません

public void act() {
    if (colliding) {
        ball.getBody().setLinearVelocity(0, 0);

        ball.getBody().applyForce((portal.getBody().getPosition().x - ball.getBody().getPosition().x) * i,
                (portal.getBody().getPosition().y - ball.getBody().getPosition().y) * i,
                ball.getBody().getPosition().x, ball.getBody().getPosition().y, true);

        i++;
    } else
        i = 10;
}
4

2 に答える 2

0

渦の中心に向かってマグニチュードが増加する接線力を実装したいと考えています。

ここにいくつかの擬似コードがあります。

radialVector = objectPosition - vortexPosition;
tangentialVector = radialVector.perpendicularVector();

if (radialVector.length() < vortexRadius) {

    // Swirl faster when near the center of the vortex.
    // Max tangential force when distance from center is 0.
    // Min tangential force when distance from center is vortexRadius.
    forceMagnitude = map(radialVector.length(), vortexRadius, 0, minTangentialForce, maxTangentialForce);
    force = forceMagnitude * tangentialVector.normalize();
    object.applyForce(force);

}

ベクトル コンポーネントを示すイメージを次に示します。

放射状および接線成分。

渦巻き効果を作成するには、オブジェクトが中心に近づくにつれて、半径方向 (Fr) および接線方向 (Ft) の力が増加する必要があります。

于 2014-09-20T19:34:11.747 に答える
0

「スピン」とは、落下するオブジェクトがブラック ホールに向かってすぐに移動方向を変更するのではなく、曲線またはらせんに沿って移動することを意味する場合、簡単な修正方法があります。

ball.getBody().setLinearVelocity(0, 0);

これにより、現在の体の動きが完全に停止します。その行を削除することから始めます。また、より現実的な動作のために、適切な式に従って引力を計算できます。これは次のようになります。

force = mass1 * mass2 * [some constant] / (distance ^ 2)

体からブラック ホールに向かうベクトル ( として計算black hole position - body position) がある場合、ベクトルの長さは距離であり、正規化して力を掛けると、体に適用する必要がある目的のベクトルforceXと力のベクトルが得られます。forceY穴の範囲内にある限り、各更新。

ただし、この式では体が穴に近づくにつれて力が無限大になるため、問題が発生する場合は線形変換 (最も近い = 1、最も遠い = 0) に変更してみてください。

force = mass1 * mass2 * [some constant] * ( (maxDistance - distance) / maxDistance )
于 2014-09-20T21:18:13.233 に答える