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

And*_*snk 1 c# random math pythagorean

我目前正在从零开始开发一款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;
    }
Run Code Online (Sandbox Code Playgroud)

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

对于这个问题:

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

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

任何帮助赞赏:)

and*_*and 7

随机选取一个角度,theta然后乘以d你想要的距离.就像是:

double theta = rand.NextDouble() * 2.0 * Math.PI;
double x = d * Math.Cos(theta);
double y = d * Math.Sin(theta);
Run Code Online (Sandbox Code Playgroud)