c# - 在一个范围内随机选择两个数,使它们的平方和不变

标签 c# math random pythagorean

我目前正在从头开发一款 2 人 Ping-Pong 游戏(2D - 非常简单),而且进展顺利。然而,有一个问题我似乎无法解决 - 我不确定它应该位于此处还是位于 MathExchange 上 - 无论如何都在这里。

最初球应该位于 Canvas 的中心。当按下按钮时,球应该以完全随机的方向发射 - 但始终以相同的速度发射。

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;
    }

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

SO 的问题:

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

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);

关于c# - 在一个范围内随机选择两个数,使它们的平方和不变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20794145/

相关文章:

algorithm - 给定 2 个 3D 中的非交叉多边形,它们都可以通过 View 射线 Oz 看到,确定哪个在前面

java - 如何创建一个在给定范围内随机打乱数字的 int 数组

javascript - 代码绘制随机贝塞尔线...未正确渲染

sql-server - SQL Server 2014 Group By 中的随机值

c# - SetParent Hook ,如何解钩?

c# - 如何对绑定(bind)到 EF EntityCollection<T> 的 WinForms DataGridView 进行排序

c# - 退出后在音乐应用程序中保存播放列表的位置

c# - Entity Framework 数据库首先从基类继承模型

c++ - 在一定距离后获得 catmull rom 样条曲线的点?

python 随机播种是确定性的,但它不应该是