随机浮点[0-1]到n个随机浮点数[0-1]

时间:2013-01-27 03:48:05

标签: java random procedural-generation

如果我在球体周围有一组随机浮点数(0.0f - 1.0f)(或者甚至在2D网格上也可以使用),每个浮点数与它们的邻居相差大约0.1f,是否有办法将这些浮标变换成颜色,其中每个RGB值也只与它们的邻居相差约0.1f,其方式是(基本上)获得任何颜色的可能性(因此某些颜色不会偏向其他颜色)?

我正在使用的方法是this,其中在每个顶点的最终偏移完成之后,我将所有偏移量缩小到从0.0到1.0的浮点值,其中这些浮点值仍然反映了初始分布值。如果它有帮助,我可以发布代码片段,或者如果你只是好奇的话,我们会在编辑中。

这是一个潜在的答案,谢谢Hot Licks!但是,给出更均匀分布的东西可能会很好。不过,这是一个开始(并且有点酷),谢谢!

Random randomGen = new Random();

int randomOne = randomGen.nextInt(256);
int randomTwo = randomGen.nextInt(256);
int randomThree = randomGen.nextInt(256);

float offsets[] = new float[vertices.length];

... // Calcuate the offsets via the method described in that article (code is in the edits if you're curious)

for(int i = 0; i < vertices.length; i++)
{
    float randomFloat = offsets[i];

    float r = (float)((int)(offsets[i]*255.0) ^ randomOne)/255.0f;
    float b = (float)((int)(offsets[i]*255.0) ^ randomTwo)/255.0f;
    float g = (float)((int)(offsets[i]*255.0) ^ randomThree)/255.0f;
}

编辑:删除了许多额外的东西,并得到了问题的关键。如果您对代码片段或其他相关信息感到好奇,您可以看到编辑内容,但这实际上是我所要求的大量内容。

编辑编辑:添加(部分)解决方案代码段。

3 个答案:

答案 0 :(得分:0)

  

有没有办法可以将单个浮点值转换为n个浮点值,每个浮点值(基本上)彼此不相关并反映相同的分布?

没有。要求是矛盾的。

如果您采用单个浮点值并以确定的方式从中生成N个其他浮点数,那么它们将根据定义与相关联。鉴于第一个价值,也是高度可预测的。

我唯一能想到的是尝试找一个更便宜的随机数发生器。 (例如,使用SecureRandom生成器是错误的......如果这是您目前正在做的事情。)


  

关于随机性的关键是生成随机数不是问题(我使用的是一个非常快速的随机数生成器),它在球体上以平滑的分布形式生成它们,所以加速它不是'在没有降低分销质量的情我的随机方法非常优化,它本质上很慢。

嗯,我仍然认为答案是一样的......除非你能找到一些方法来加速“围绕球体的分布”问题。 (显然,你可以利用旋转对称性......但同样明显的是,这会产生明显的非随机结果。)

答案 1 :(得分:0)

嗯,我想你想要的是nextGaussian()。

另一个选项是,从“类别”剧本中取出页面,将颜色视为表示光谱上的某个点,然后您获取单个随机数并在一次操作中找到相应的颜色。因此,为了论证,你可以说从RGB值中得到100种颜色,其中第一种是R:256 G:0 B:0到R:0 G:0 B:256。如果有100个,那么你得到你的随机#,并说它是.56,你去得到阵列中的第56个#。

答案 2 :(得分:-1)

我不知道你在分布方面需要什么,但我会考虑将连续随机数的分数位模式异或,或者可能只是用10个固定随机模式对随机数进行异或运算。

但我怀疑这只有在你处理统一发行时才有效。