我目前正在从零开始开发一款2人乒乓球比赛(二维 - 真正的简单),而且一切顺利。然而,这是一个我似乎无法解决的问题 - 我不确定这应该位于此处还是位于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; }
我认为每场比赛的速度应该相同,所以我想我会使用毕达哥拉斯 - 两个速度的平方应该总是相同。
对于这个问题:
有没有办法随机选择两个数字(双打),使得它们的平方和总是一个特定的数字 - 更正式:
double x = RandomDouble(); double y = RandomDouble(); if (x^2 + y^2 = 16) {/* should always be true */ }
任何帮助表示赞赏:)
答案 0 :(得分:7)
随机选择一个角度theta
并将其乘以您想要的距离d
的大小。类似的东西:
double theta = rand.NextDouble() * 2.0 * Math.PI;
double x = d * Math.Cos(theta);
double y = d * Math.Sin(theta);
答案 1 :(得分:0)
如果常量为C
,请在x
和0
之间选择一个sqrt(C)
。
使用简单代数求解其他数字y
。
答案 2 :(得分:0)
为什么不试试这个:
double x = RandomDouble();
double y = square(16-x^2);
因为您的申请允许双重类型 这会解决你的问题吗? 如果没有,请告诉我