首页 > 解决方案 > 为什么这些随机事件遵循特定的模式?

问题描述

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

GIF 中的示例输出

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

样品 1

样品 2

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

标签: c#randomuwp

解决方案


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

当你有这么多迭代时,也有可能某处存在微小的舍入误差


推荐阅读