gpt4 book ai didi

physics - 弹跳球不符合能量守恒定律

转载 作者:行者123 更新时间:2023-12-02 10:42:41 29 4
gpt4 key购买 nike

我目前正忙于为我的 Win32 API 和 C++ 编程类(class)编写一个小球物理引擎。我已经完成了 GDI 后缓冲渲染器和整个 GUI(还有一些需要调整的东西),但我已经接近完成了。最后唯一的大障碍是球与球的碰撞(但我可以自己解决这个问题),但其中最大的问题是球的弹跳。发生的情况是,我扔了一个球,它确实下落了,但是一旦它反弹,它会反弹得比我释放它时的点更高???有趣的是,只有低于一定高度才会发生这种情况。这部分是物理代码:(如果您需要更多代码或解释,请询问,但如果你们能看一下我的代码,我将不胜感激。)

#void RunPhysics(OPTIONS &o, vector<BALL*> &b)
{
UINT simspeed = o.iSimSpeed;
DOUBLE DT; //Delta T
BOOL bounce; //for playing sound

DT= 1/o.REFRESH;

for(UINT i=0; i<b.size(); i++)
{
for(UINT k=0; k<simspeed; k++)
{
bounce=false;

//handle the X bounce
if( b.at(i)->rBall.left <= 0 && b.at(i)->dVelocityX < 0 ) //ball bounces against the left wall
{
b.at(i)->dVelocityX = b.at(i)->dVelocityX * -1 * b.at(i)->dBounceCof;
bounce=true;
}
else if( b.at(i)->rBall.right >= SCREEN_WIDTH && b.at(i)->dVelocityX > 0) //ball bounces against the right wall
{
b.at(i)->dVelocityX = b.at(i)->dVelocityX * -1 * b.at(i)->dBounceCof;
bounce=true;
}
//handle the Y bounce
if( b.at(i)->rBall.bottom >= SCREEN_HEIGHT && b.at(i)->dVelocityY > 0 ) //ball bounces against the left wall
{
//damping of the ball
if(b.at(i)->dVelocityY < 2+o.dGravity/o.REFRESH)
{
b.at(i)->dVelocityY = 0;
}

//decrease the Velocity of the ball according to the bouncecof
b.at(i)->dVelocityY = b.at(i)->dVelocityY * -1*b.at(i)->dBounceCof;
b.at(i)->dVelocityX = b.at(i)->dVelocityX * b.at(i)->dBounceCof;

bounce=true;
}


//gravity
b.at(i)->dVelocityY += (o.dGravity)/o.REFRESH;
b.at(i)->pOrigin.y += b.at(i)->dVelocityY + (1/2)*o.dGravity/o.REFRESH*DT*METER;
//METER IS DEFINED GLOBALLY AS 100 which is the amount of pixels in a meter

b.at(i)->pOrigin.x += b.at(i)->dVelocityX/o.REFRESH*METER;

b.at(i)->UpdateRect();
}
}
return;
}

最佳答案

您正在使用欧拉积分方法。您的时间步长 (DT) 可能太大。另外,更新 Y 坐标的行似乎有一个错误:

  b.at(i)->pOrigin.y += b.at(i)->dVelocityY + (1/2)*o.dGravity/o.REFRESH*DT*METER; 

您已经将重力添加到速度中,因此无需将其添加到位置中,也无需将速度乘以 DT。应该是这样的:

  b.at(i)->pOrigin.y += b.at(i)->dVelocityY * DT; 

此外,关于单位(METER 的使用方式)似乎存在一些困惑。

关于physics - 弹跳球不符合能量守恒定律,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/849276/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com