又get3种新的rand方式,简单又实用
分别为高斯分布随机,过滤随机,和perlin随机,perlin老朋友了,主要说说前两种。
高斯分布随机(Gaussian Randomness)
高斯分布也叫正态分布(Normal distribution)或钟形曲线(bell curves),正态分布再熟悉不过了。它长这个样子:
为什么要根据高斯分布来产生随机呢,这里要提到一个名词“中心极限定理(central limit theorem)”。中心极限定理:在自然界与生产中,一些现象受到许多相互独立的随机因素的影响,如果每个因素所产生的影响都很微小时,总的影响可以看作是服从正态分布的。中心极限定理就是从数学上证明了这一现象 。简单来讲就是:在现实生活中的随机性概率加起来是符合正态分布的。这就是我们为什么使用高斯分布随机的原因,就是为了时产生的结果更真实。
基于高斯分布的这种随机可以用于:速度,人的特性,随即一片森林的树木高低,人的身高,发射子弹的偏差,等等自然界常见的事情。
Unity中的实现代码:
using UnityEngine; using System.Collections; public class Gaussian : MonoBehaviour { public int seed = 61829450; double sum = 0; long r = 0; // Use this for initialization void Start() { } // Update is called once per frame void Update() { if (Time.frameCount % 7== 0) { // seed = 61829450; sum = 0; for (int i = 0; i < 3; i++) { long holdseed = seed; seed ^= seed << 13; seed ^= seed >> 17; seed ^= seed << 5; r = holdseed + seed; sum += (double)r * (1.0 / 0x7FFFFFFFFFFFFFFF); } print( sum); //returns [-3.0, 3.0] at (66.7%, 95.8%, 100%) } } }
下图示普通伪随机和高斯随机分别模拟射子弹的偏差
高斯分布大部分的点都在中心,普通的伪随机分布的比较均匀,明显高斯分布更加真实。玩家当然也希望能射准,爆头率更高。
高斯分布的用途:
1. 速度
2. 加速度
3. 尺寸,宽度,高度,质量
4. 模拟视觉,反应时间
5. 子弹填充速度,开火速度
6. 刷新率,冷却率
过滤随机
过滤随机更讲求“公平”,也就是随的越乱就好。过滤是指,我们随机的数有时候太接近,或者差距太多的时候把这些数“过滤”掉,重新随机。
有证据证明,当随机的表现非常小的时候,人类并没有感觉这是随机的。
举个例子,很多人不相信掷硬币的结果是随机的,因为你掷出的结果可能是这样的:
有大量的重复00000或11111紧挨在一起。如果你把暴击设为随机产生,随机结果如上图,敌人可能连续发动四五个暴击直接把你连死,这不是玩家想要的结果。但这确实是随机产生的啊,所以有的时候玩家的乐趣比真实性更重要。
二进制过滤
挡在下面几种情况的时候发生过滤:
1. 如果新产生的数已经有四个了,重新随机一个新数
2. 如11001100,会被替换为11001101
3. 111000 或 000111,替换最后一个数
替换前替换后作对比:
过滤整数
1. 有两个重复的随机数,则重新随机新数
2. 隔了一个数的重复,如“8, 3, 8” 或 “6, 2, 6”
3. 太多极限值出现,即太多大值和小值,如“6, 8, 7, 9, 8, 6, 9”
4. 10个数以内出现两组重复数如“5, 7, 3, 1, 5, 7”
5. 连续上升,或连续下降,如“3, 4, 5, 6”
6. 10个数之内重复次数过多,如“9, 4, 5, 9, 7, 8, 9, 0, 2, 9”
替换前替换后作对比:
过滤浮点小数
0-1之间的浮点数
1. 两个连续数字相差小于0.02,如0.875 和0.856
2. 三个连续数字相差小于0.1,如0.345, 0.421, 和0.387.
3. 五个连续增加或连续下降,如0.342, 0.572, 0.619, 0.783, 和0.868.
4. 太多极限值出现,即太多大值和小值,0.325, 0.198, 0.056, 0.432, and 0.216.
总结
如果想要产生的结果更真实,就是用高斯分布随机。如果为了让玩家更开心,可以对产生的随机数进行过滤。
------by wolf96 http://blog.csdn.net/wolf96
版权声明:本文为博主原创文章,未经博主允许不得转载。