随机选取一个范围内的两个数字,使其平方和为常数



我目前正在从头开始开发一款两层乒乓游戏(2D-非常简单),进展顺利。然而,有一个问题我似乎无法解决——我不确定它是应该放在这里还是放在MathExchange上——反正就是这样。

最初,球应该位于画布的中心。当按下按钮时,球应该以完全随机的方向发射,但始终以相同的速度发射。

Ball对象有(简化的)4个字段-X和Y中的位置,以及X和Y的速度。这使得当球击中时将球从墙上反弹变得简单,只需反转速度即可。

public void Move()
{
if (X - Radius < 0 || X + Radius > GameWidth)
{
XVelocity = -XVelocity;
}
if (Y - Radius < 0 || Y + Radius > GameHeight)
{
YVelocity = -YVelocity;
}
X+= XVelocity;
Y+= YVelocity;
}

我认为每场比赛的速度应该相同,所以我认为我会使用毕达哥拉斯——两个速度的平方应该总是相同。

问题的SO:

有没有一种方法可以随机选择两个数字(双打),使它们的平方和总是一个特定的数字-更正式地说:

double x = RandomDouble();
double y = RandomDouble();
if (x^2 + y^2 = 16) {/* should always be true */ }

感谢您的帮助:)

随机选择一个角度theta,并将其乘以所需距离d的大小。类似于:

double theta = rand.NextDouble() * 2.0 * Math.PI;
double x = d * Math.Cos(theta);
double y = d * Math.Sin(theta);

如果常数为C,请在0sqrt(C)之间选择一个数字x

用简单代数求解另一个数y

为什么不试试这个:

double x = RandomDouble();
double y = square(16-x^2);

因为您的应用程序允许双重键入
这能解决你的问题吗
如果没有,请告诉我

最新更新