Random 在Swift 3.0中,如何强制为数组中的每个元素生成随机数?
我在Swift 3.0生成随机数时遇到了一个奇怪的问题[在本例中是CGPoints]。我正在尝试构建一个非常简单的粒子过滤器,但我在使用下面的代码将所有粒子随机化时遇到了困难 当我在“粒子”集合中迭代时,会生成一个唯一的随机点[GOOD],但每个粒子都会得到完全相同的唯一随机点[BAD]。我不确定我做错了什么,以确保每个粒子得到一个唯一的随机点 有人对我如何强迫每个粒子获得唯一的随机点有什么建议吗 谢谢 斯坦 问题函数Random 在Swift 3.0中,如何强制为数组中的每个元素生成随机数?,random,swift3,arc4random,Random,Swift3,Arc4random,我在Swift 3.0生成随机数时遇到了一个奇怪的问题[在本例中是CGPoints]。我正在尝试构建一个非常简单的粒子过滤器,但我在使用下面的代码将所有粒子随机化时遇到了困难 当我在“粒子”集合中迭代时,会生成一个唯一的随机点[GOOD],但每个粒子都会得到完全相同的唯一随机点[BAD]。我不确定我做错了什么,以确保每个粒子得到一个唯一的随机点 有人对我如何强迫每个粒子获得唯一的随机点有什么建议吗 谢谢 斯坦 问题函数 func randomize( theListOfParticles
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
}
随机生成函数[在我所有数学函数的单独类中。]
/**
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
}
好吧,我想我知道发生了什么 创建初始粒子阵列时,我使用了以下命令
let newListOfParticles = Array(
repeatElement(
defaultParticle,
count: self.numberOfParticles
)
)
我认为该函数将为每个索引生成defaultParticles的唯一副本。我错了
相反,函数只是创建了指向初始引用的引用。所以随机循环只是在同一个粒子上反复运行
我将列表初始化更改为以下内容:
for _ in 1...self.numberOfParticles {
newListOfParticles.append( RegionParticle( withRegion: self ) )
}
所以现在每个条目都是唯一的,这似乎解决了问题
所以我只是部分疯了