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