随机选取一个范围内的两个数字,使它们的平方和保持不变

时间:2013-12-27 03:01:43

标签: c# math random pythagorean

我目前正在从零开始开发一款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 */ }

任何帮助表示赞赏:)

3 个答案:

答案 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,请在x0之间选择一个sqrt(C)

使用简单代数求解其他数字y

答案 2 :(得分:0)

为什么不试试这个:

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

因为您的申请允许双重类型 这会解决你的问题吗? 如果没有,请告诉我