【发布时间】:2013-11-13 14:25:01
【问题描述】:
我正在尝试模拟一个弹跳球,它只是吐出 x 位置、y 位置、时间和弹跳次数的数字。就物理学而言,它工作得很好,但问题是当我尝试增加“反弹”变量时,它每帧增加一,而不是一,然后等待下一次反弹。
这是相关的循环:
while(bounces<=maxBounces){
frames++;
seconds=frames/1000;
if(yPos>=0&&bounces==0){
initRads=getRads(initAng);
dropBall(initVel, initRads);
}
if(yPos<0){
yPos=0;
bounces++;
cout.precision(5);
cout<<seconds<<"\t"<<yPos<<"\t"<<xPos<<"\t"<<bounces<<"\n";
newVel=getVel(currYVel, currXVel, cor);
newAng = getAng(currYVel,newVel);
dropBall(newVel, newAng);
}
}
【问题讨论】:
-
似乎唯一会发生的情况是 yPos 小于 0。你的 getAng() 工作正常吗?
-
为什么 getAng() 使用速度?不应该使用之前的角度吗?
-
您也只在弹跳上打印还是 dropBall() 打印。并且索林提出了一个很好的观点。
-
对,我意识到因为我的 getAng() 使用的是当前的 Y 速度,而不是 newVel 的 y 分量,所以它会被丢弃。我将如何使用以前的角度?
-
不用担心。我所做的是切换它,以便它获取新组件,然后找到结果,然后选择新角度,但弹跳问题仍然很明显。我尝试将增量作为 dropBall() 的一部分,但发生了同样的事情(即给 dropBall 一个反弹参数,在第一个实例上为零,在其他实例上为零,然后将其添加到反弹计数中,但它仍然不起作用。所以它以某种方式超过一帧的
标签: c++ increment projectile