我正在使用图像编辑器,并且即将实现过滤器。我决定使用某种模糊或噪点。
无论如何,我决定我想要一个统一的过滤器,所以我阅读了Random.nextGaussian()
。
但是,由于我正在使用范围从0到255的RGB值。如何缩放此随机双精度值以适合0和255?
我相信nextGaussian()返回的随机值的范围是-1至1。
因此,我想保留随机值之间的相对差异。如果可以的话,请“缩放”或“移动数字范围”。
我知道有可能,但我不知道。提前致谢。
本质上,我需要它是介于0和1之间的数字。
最佳答案
在这种情况下,您应该使用nextDouble()
。
高斯分布是分布在整个双值集合上的分布(从数学上来说,从减去无穷大到正无穷大),峰值在零附近。因此,高斯分布为而不是均匀。nextDouble()
方法在0
和1
(包括0
,不包括1
)之间均匀地绘制数字 。
因此,您可以使用以下代码在0
和255
(包括两者)之间随机绘制一个数字:Random rand = new Random();
int value = (int) math.floor(256.0*rand.nextDouble());
但是,一种更快的算法是屏蔽随机整数(Random.nextInt
):Random rand = new Random();
int value = rand.nextInt()&0xff;
该算法在big-oh分析中并不是更快,但是它节省了更昂贵的nextDouble
方法调用以及浮点乘法和float-to-int转换。