2016-12-25 5 views
1

現在、私は2Dパーティクルシミュレータを開発中です。私は、各粒子をユニークな角度で動かしています。私はxとyの速度を変更するための基本的な式を見つけましたが、現在は角度に応じて動く設定速度を持っています。2D垂直角衝突

particles[a][3] += particles[a][1] * cos(radians(particles[a][5]));//move X 
particles[a][4] += particles[a][1] * sin(radians(particles[a][5]));//move Y 

私は壁に衝突するための基本的な衝突を持っていますが、衝突を整理するための最良の方法を見つけることができません。現在、私はローテーションに-1を掛けるだけですが、それは上と下でしか動作しません。注:パーティクルは、衝突を実行した後に常に移動します(衝突ボックスに詰まっていても邪魔にならない)。

if(particles[a][3] < 0 || particles[a][3] > windowWidth/2 || particles[a][4] < 0 || particles[a][4] > windowHeight/2) { 
    /*windowWidth and windowHeight are divided by 2 to find the canvas size. In the setup() I have the canvas set to that value).*/ 
    particles[a][5] *= -1; 
} 

配列の値:

particles[a][1] = speed 
particles[a][3] = x position 
particles[a][4] = y position 
particles[a][5] = rotation 

私の質問は、これらの衝突テストを実行するための最良の方法は何かということです。私は衝突が90度で跳ね返ることを理解していますが、退屈な束ではなく、できるだけ少ないif文を使用する方が簡単です(より簡単です)。

メリークリスマス、ありがとうございます!


それがわかりました! 最終コード:

if(particles[a][4] < 0 || particles[a][4] > windowHeight/2) { 
    particles[a][5] *= -1; 
} else if(particles[a][3] < 0 || particles[a][3] > windowWidth/2) { 
    particles[a][5] = 180 - particles[a][5]; 
} 

答えて

0

「JavaScriptの角度を反映し、」グーグルで試してみて、あなたはX軸とY軸の両方を中心に反映させるための式を見つけることができます。あなたは上または下に衝突するときにあなたは1つを行い、左または右に衝突するときにはあなたはもう一方を行う。

また、データを保持するために配列を使用しないでください。値を保持するクラスを作成し、そのクラスのインスタンスを作成します。マジックアレーインデックスを使用することは頭痛のレシピです。

まだ動作しない場合は、MCVEを投稿してください。がんばろう。

+0

アレイに完全にオープンしています。あなたは、インスタンスについての推奨学習ガイドとのリンクを私に送ることができますか? javascriptをチェックすると、角度のことが反映されます。 – bdkopen

+0

y軸が正しく反映されています。インスタンスについての学習に興味があります。 – bdkopen