gpt4 book ai didi

c++ - 根据两个角度之间的差异更改值

转载 作者:行者123 更新时间:2023-11-28 06:23:35 26 4
gpt4 key购买 nike

因此,在我的 C++ 入门类(class)中,我正在构建一个台球游戏。到目前为止,我一切正常。目前,我正在计算两个击球时的角度,以撞击角度发射击球,并以适当的反射角度发射击球。我真正想要的是让掠过的击球给被击中的球带来更少的速度,而让直接击球带来更快的速度。我不知道如何写入代码的想法是,如果 struckedBall 具有与原始 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;
}
}

最佳答案

你迷失了我在 if... 也就是说,“if”语句在物理问题中没有立足之地。有一个数学函数(公式)可以描述这一点。 “如果”您还不知道这一点,这里有一些提示:

  1. 这两个球将相互垂直移动。
  2. 一个球将垂直于两个球之间的切线移动,另一个将平行移动。

http://www.real-world-physics-problems.com/physics-of-billiards.html

关于c++ - 根据两个角度之间的差异更改值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28911869/

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