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

时间:2018-10-15 12:59:41

标签: c# random uwp

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

Sample output in GIF

尽管这些球的方向是随机的,但一段时间后,所有的球都朝着右下角移动。每次都会重复此行为。您可以在下图中看到它:

Sample 1

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

完整代码

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

1 个答案:

答案 0 :(得分:8)

您似乎正在生成一个以度为单位的方向,并将其传递给Math.Sin,后者以弧度表示一个角度。 360 / 2PI = 57.3(大约),因此与其他较大的角度相比,您选择在0至0.3弧度之间的角度的可能性更高。

如果迭代次数如此之多,那么在某个地方也可能会有一个很小的舍入误差