【问题标题】:Why do these random events follow a specific pattern?为什么这些随机事件遵循特定的模式?
【发布时间】:2018-10-15 12:59:40
【问题描述】:

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

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

  • 为什么这些随机事件遵循特定模式?
  • 随机数真的是随机的吗?
  • 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

【问题讨论】:

  • 不确定是什么导致了您当前的问题,但是对于direction 有两个单独的“再生”循环感觉有些不对劲。这意味着生成y1 的最终direction 值可能与生成x1 的值无关。
  • 好点,这肯定会导致速度不是预期的 - 尽管我怀疑它是造成漂移的原因。

标签: c# random uwp


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2013-02-10
    • 2014-12-09
    • 1970-01-01
    • 2016-04-26
    • 2019-05-18
    • 1970-01-01
    • 2019-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多