所以在我的简介C ++课程中,我正在构建一个游戏池。到目前为止,我的一切运作良好。目前我正在计算击球时两个球之间的角度,以撞击角度发射击球,并以适当的反射角度击打击球。我真正想要的是让掠过的击球对击球的速度降低,并且直接命中以提高速度。我不知道如何输入代码的想法是,如果struckBall具有与原始strikerBall相同的结束角度,那么它会获得90%的速度。然而,当角度发生变化时,让我们说它与原始角度相差45度,那么它们在新角度下的速度将会达到50/50左右。
相关代码:
private: void checkBallCollision(BilliardBall^ striker, BilliardBall^ struck)
{
if (distanceBetweenBalls(striker, struck))
{
double velocityStrike = 0;
double velocityStruck = 0;
double struckBallAngle = GetAngle(striker->Location, struck->Location);
double strikerBallAngle = GetAngle(struck->Location, striker->Location);
striker->Angle = striker->Angle;
if (strikerBallAngle > striker->Angle)
{
striker->Angle = striker->Angle + (1 / (strikerBallAngle - striker->Angle));
}
else
{
striker->Angle = striker->Angle - (1 / (striker->Angle - strikerBallAngle));
}
struck->Angle = struckBallAngle;
double distance = GetDistance(striker->Location, struck->Location);
struck->PosX += (BALL_WIDTH - distance) * Math::Cos(struckBallAngle);
struck->PosY += (BALL_WIDTH - distance) * Math::Sin(struckBallAngle);
struck->Location = Point(struck->PosX, struck->PosY);
struck->Distance = striker->Distance * .7;
striker->Distance *= .2;
}
}
答案 0 :(得分:1)
你失去了我,如果......那就是'如果'陈述在物理问题上没有地位。有一个数学函数(公式)将描述这一点。 '若'你还不知道这一点,这里有几个提示:
答案 1 :(得分:0)
这是一个经常重复的谬误,你需要计算弹性碰撞的碰撞角度。它对情况进行了很好的几何探索,但实际公式只需要碰撞时的中心坐标和速度向量(以及质量和半径),请参阅我对https://stackoverflow.com/a/28252655/3088138的类似问题或维基百科的回答关于弹性碰撞的页面。