現在、私は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];
}
アレイに完全にオープンしています。あなたは、インスタンスについての推奨学習ガイドとのリンクを私に送ることができますか? javascriptをチェックすると、角度のことが反映されます。 – bdkopen
y軸が正しく反映されています。インスタンスについての学習に興味があります。 – bdkopen