【发布时间】: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;
完整代码
【问题讨论】:
-
不确定是什么导致了您当前的问题,但是对于
direction有两个单独的“再生”循环感觉有些不对劲。这意味着生成y1的最终direction值可能与生成x1的值无关。 -
好点,这肯定会导致速度不是预期的 - 尽管我怀疑它是造成漂移的原因。