我目前正在从头开始开发一款两层乒乓游戏(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
,请在0
和sqrt(C)
之间选择一个数字x
。
用简单代数求解另一个数y
。
为什么不试试这个:
double x = RandomDouble();
double y = square(16-x^2);
因为您的应用程序允许双重键入
这能解决你的问题吗
如果没有,请告诉我