我在Swift 3.0中产生一个奇怪的问题,产生随机数[在本例中为CGPoints]。我正在尝试构建一个非常简单的粒子滤波器,我在使用下面的代码初始化粒子时遇到了麻烦。
当我遍历我的'粒子'集时,会生成一个独特的随机点[GOOD],但每个粒子都会得到完全相同的唯一随机点[BAD]。我不确定我做错了什么来确保每个粒子获得一个独特的随机点
任何人都有任何建议我如何强制每个粒子获得一个独特的随机点?
由于
斯坦
问题功能。
func randomize(
theListOfParticles: [RegionParticle]
) -> [RegionParticle] {
var returnListOfParticles = [SRLSystemRegionParticle]()
for particle in theListOfParticles {
particle.position = self.randomPointInRegion()
returnListOfParticles.append( particle )
}
return returnListOfParticles
}
辅助功能
/**
Get a random point in the region.
- Returns: CGPoint
*/
func randomPointInRegion() -> CGPoint {
let x : CGFloat = Math.randomCGFloat(
min: -(self.rect?.size.width)!,
max: (self.rect?.size.width)!
)
let y : CGFloat = Math.randomCGFloat(
min: -(self.rect?.size.width)!,
max: (self.rect?.size.width)!
)
let returnCGPoint : CGPoint = CGPoint(
x: x,
y: y
)
return returnCGPoint
}
随机gen函数[在我所有数学函数的单独类中。]
/**
Generate a random CGFloat.
- Parameters:
- min: CGFloat
- max: CGFloat
- Returns: a CGFloat
*/
static func randomCGFloat( min: CGFloat, max: CGFloat) -> CGFloat {
return CGFloat(Float(arc4random()) / Float(UINT32_MAX)) * (max - min) + min
}
答案 0 :(得分:0)
好的,我想我弄清楚发生了什么。
当我创建粒子的初始数组时,我使用了以下内容。
for _ in 1...self.numberOfParticles {
newListOfParticles.append( RegionParticle( withRegion: self ) )
}
我认为该函数会为每个索引创建defaultParticles的唯一副本。我错了。
相反,该函数只是创建了指向最初的引用。所以随机化循环只是一遍又一遍地在同一个粒子上运行。
我将列表初始化更改为以下内容:
{{1}}
所以每个条目现在都是真正独一无二的,这似乎解决了这个问题。
所以我只是部分疯狂。