我正在使用从CenterSpace下载的Mersenne Twister的C#实现。我有两个问题:
new Point(number % _canvasWidth, number % _canvasHeight)
。正如您可能猜到的,视觉效果取决于表单的宽度和高度,this is是一个灾难性的结果。以下是我尝试种算算法的几种方法:
new Guid().GetHashCode()
我在这里缺少什么?我应该如何种算算法?我怎样才能通过DieHard?
答案 0 :(得分:3)
虽然我不能说到你的第一点,但第二个问题与你如何计算得分要点有关。具体地,
x = number % _canvasWidth;
y = number % _canvasHeight;
将为您提供一个“模式”,它与您要绘制的窗口的宽高比略有对应。例如,如果_canvasWidth
和_canvasHeight
相等,则您将始终在单个对角线上绘制x
,y
始终相同。在这种情况下,这种图形表示不合适。
如何获取RNG输出的N位并使用一半用于x坐标而另一半用于y坐标?对于那些超出窗口范围的位,您可能需要考虑两个选项:
任何一个选项都可以为您提供更具代表性的图片,显示您获取随机数生成器的位数。祝你好运!
答案 1 :(得分:0)
通过为每个x和y坐标生成一个新的随机数,可以轻松修复条纹点绘图问题。尝试为x和y重复使用单个生成的数字基本上是过早的优化,但如果你确实沿着那条路线走下去,请确保从数字中提取不同的位;实际上,x=n%width;y=n%height
为您提供了x和y之间的巨大相关性,如图像中所示。
我多年来一直在使用各种C ++ Mersenne Twister实现(最近boost)来生成random points并且没有遇到任何困难(种子相关或其他) 。它真的是一个极好的发电机。
答案 2 :(得分:-1)
使用数学函数无法生成真正的随机数字。如果拥有真正随机的数字很重要,请获得hardware random number generator。我开发了真钱在线扑克游戏 - 这种硬件是唯一可以确信数字没有模式的方式。
如果针对Linux环境,/dev/random and /dev/urandom pseudo devices比数学生成器好很多,因为它们包含代表硬件活动的随机数。