C# 在一个范围内随机选取两个数字,使其平方和保持不变

C# 在一个范围内随机选取两个数字,使其平方和保持不变,c#,math,random,pythagorean,C#,Math,Random,Pythagorean,我目前正在从头开始开发一款双人乒乓球游戏(2D-真正简单),而且进展顺利。然而,有一个问题我似乎无法解决——我不确定这是应该放在这里还是放在MathExchange上——不管怎样 最初,球应该位于画布的中心。当按下按钮时,球应该以完全随机的方向发射——但速度始终相同 球对象有(简化的)4个场-X和Y中的位置以及X和Y中的速度。这使得球撞击时从墙上弹起变得简单,通过反转速度也很简单 感谢您的帮助:)如果常数为C,请在0和sqrt(C)之间选择一个数字x 使用简单代数求解另一个数y。如果常数是C,则

我目前正在从头开始开发一款双人乒乓球游戏(2D-真正简单),而且进展顺利。然而,有一个问题我似乎无法解决——我不确定这是应该放在这里还是放在MathExchange上——不管怎样

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

球对象有(简化的)4个场-X和Y中的位置以及X和Y中的速度。这使得球撞击时从墙上弹起变得简单,通过反转速度也很简单


感谢您的帮助:)

如果常数为
C
,请在
0
sqrt(C)
之间选择一个数字
x


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

如果常数是
C
,则在
0
sqrt(C)
之间选择一个数
x

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

为什么不试试这个:

double x = RandomDouble();
double y = square(16-x^2);
因为您的应用程序允许双重输入。
这能解决你的问题吗?
如果没有,请告诉我为什么不试试这个:

double x = RandomDouble();
double y = square(16-x^2);
因为您的应用程序允许双重输入。
这能解决你的问题吗?

如果没有,请让我知道

随机选择一个角度
θ
,然后乘以所需距离
d
的大小。比如:

double theta = rand.NextDouble() * 2.0 * Math.PI;
double x = d * Math.Cos(theta);
double y = d * Math.Sin(theta);

随机选取一个角度
theta
,然后将其乘以所需距离
d
的大小。比如:

double theta = rand.NextDouble() * 2.0 * Math.PI;
double x = d * Math.Cos(theta);
double y = d * Math.Sin(theta);

+如果你想使角度均匀准确地分布,那么这绝对是一种简单而正确的方法。这个问题相当于在一个球体的表面上拾取一个点。它像一个符咒一样工作——这是一个比我想象的要好得多的解决方案:)@DavidSchwartz与球体的问题并不完全相同。将此方法用于球体将导致在极点聚集。请看@AndersNK,很高兴这对您有所帮助。+1如果您希望角度均匀、准确地分布,绝对是简单而正确的方法。这个问题相当于在一个球体的表面上拾取一个点。它像一个符咒一样工作——这是一个比我想象的要好得多的解决方案:)@DavidSchwartz与球体的问题并不完全相同。将此方法用于球体将导致在极点聚集。看到@AndersNK很高兴这对你有帮助。