Skip to content

Instantly share code, notes, and snippets.

@cemolcay
Last active September 10, 2023 11:03
Show Gist options
  • Save cemolcay/1c3f2ad9acabdf00b38e635d1e2f3419 to your computer and use it in GitHub Desktop.
Save cemolcay/1c3f2ad9acabdf00b38e635d1e2f3419 to your computer and use it in GitHub Desktop.
Generate a random value with variety.
func convert<T: FloatingPoint>(value: T, inRange: ClosedRange<T>, toRange: ClosedRange<T>) -> T {
let oldRange = inRange.upperBound - inRange.lowerBound
let newRange = toRange.upperBound - toRange.lowerBound
return (((value - inRange.lowerBound) * newRange) / oldRange) + toRange.lowerBound
}
/// Variety: [0 - 1]. 0 means no randomisation, 1 means a random value between full range.
func variety(value: Double, inRange: ClosedRange<Double>, variety: Double) -> Double {
let normalised = inRange == 0...1 ? value : convert(value: value, inRange: inRange, toRange: 0 ... 1)
let upper = min(normalised + variety, 1.0)
let lower = max(normalised - variety, 0.0)
let rand = Double.random(in: lower ... upper)
return convert(value: rand, inRange: 0 ... 1, toRange: inRange)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment