在我看来,CIFilter(name: "CIRandomGenerator")
的输出总是相同的,无论是多次引用实例的outputImage
还是实例化一个新过滤器:
import CoreImage
let randomFilter = CIFilter(name: "CIRandomGenerator")
let outputImage = randomFilter!.outputImage!.cropped(to: (CGRect(x: 0, y: 0, width: 100, height: 100)))
let outputImage2 = randomFilter!.outputImage!.cropped(to: (CGRect(x: 0, y: 0, width: 100, height: 100)))
// pause for some amount of time so that it's definitely not
// instantiating a PRNG with the same timestamp
let rf2 = CIFilter(name: "CIRandomGenerator")
rf2!.outputImage!.cropped(to: (CGRect(x: 0, y: 0, width: 100, height: 100)))
如果检查像素,则完全相同。
我没有看到任何类型的seed
参数可以传入以正确初始化伪随机数生成器。
由于CIFilter
具有无限范围,因此我可以随机偏移调用cropped
的位置,这似乎有效,但它看起来像是黑客。我错过了初始化/ getNext
此随机过滤器的正确方法吗?
答案 0 :(得分:1)
我几乎把它作为评论,但我觉得它的答案值得。
实际上,您似乎已经正确地向我描述了这一点。考虑一下 - 什么是随机数生成器?当然它可能需要一个种子",但最终大多数发生器将提供一个相当可预测的数字,如果一次又一次地运行。 (如果你不开始在等式中加入其他东西。)
因此CIRandomGenerator
的输出可能被视为同类事物。取自(0,0)它"随机"走向无限。但是,一旦你接种了种子"事物 - 给予(0,0)以外的其他来源 - 你有效地"捕获"大多数人会考虑的事情"随机"。