为什么这些随机事件遵循特定模式?

Vij*_*mal 5 c# random uwp

我创建了一个网格布局.它显示100个球.最初,所有球都将处于随机位置.每25毫秒一个球将随机方向移动一些单位(这对所有球来说都很常见).您可以在下图中看到此操作:

GIF中的示例输出

即使球的方向是随机的,经过一段时间后,所有的球都会向右下角移动.每次都会重复此行为.您可以在下图中看到:

样品1

样本2

  • 为什么这些随机事件遵循特定模式?
  • 随机数是真的随机吗?
  • C#随机数生成器有问题吗?
  • 对此有任何数学解释吗?

C#代码

Random random = new Random();
var direction = random.NextDouble() * 360;
var ballTranslate = child.RenderTransform.TransformPoint(new Point(0, 0));
var x = ballTranslate.X;
var y = ballTranslate.Y;
var x1 = x + (parm.Speed * Math.Cos(direction));
while (x1 < 0 || x1 > (parm.CellSize * parm.NoOfSplit))
{
    direction = random.NextDouble() * 360;
    x1 = x + (parm.Speed * Math.Cos(direction));
}

var y1 = y + (parm.Speed * Math.Sin(direction));
while (y1 < 0 || y1 > (parm.CellSize * parm.NoOfSplit))
{
    direction = random.NextDouble() * 360;
    y1 = y + (parm.Speed * Math.Sin(direction));
}

TranslateTransform myTranslate = new TranslateTransform();
myTranslate.X = x1;
myTranslate.Y = y1;
child.RenderTransform = myTranslate;
Run Code Online (Sandbox Code Playgroud)

完整代码

https://github.com/Vijay-Nirmal/ProjectChaos

Rob*_*ett 8

您似乎以度数生成方向并将其传递给Math.Sin,它以弧度为单位.360/2PI = 57.3(大约),所以你比其他更大的角度更有可能选择0到0.3弧度之间的角度.

当你有这么多次迭代时,某些地方也可能出现一个小的舍入错误