1

我目前正在从头开始开发一个 2 人乒乓球游戏(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;
    }

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

所以对于这个问题:

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

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

任何帮助表示赞赏:)

4

3 回答 3

7

随机选择一个角度theta并将其乘以所需距离的大小d。就像是:

double theta = rand.NextDouble() * 2.0 * Math.PI;
double x = d * Math.Cos(theta);
double y = d * Math.Sin(theta);
于 2013-12-27T03:07:41.730 回答
0

如果常数是,请在和之间C选择一个数字。x0sqrt(C)

y使用简单代数求解另一个数。

于 2013-12-27T03:06:26.027 回答
0

为什么不试试这个:

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

因为您的应用程序允许双重类型。
这能解决你的问题吗?
如果没有,请告诉我

于 2013-12-27T03:07:33.620 回答