我目前正在从零开始开发一款2人乒乓球比赛(二维 - 真正的简单),而且一切顺利.然而Theres是一个我似乎无法解决的问题 - 我不确定这应该位于此处还是位于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 */ }
任何帮助赞赏:)
随机选取一个角度,theta
然后乘以d
你想要的距离.就像是:
double theta = rand.NextDouble() * 2.0 * Math.PI; double x = d * Math.Cos(theta); double y = d * Math.Sin(theta);