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(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