Есть много возможных вариантов. Самым простым, вероятно, является квадратичный c, такой как x^2 + b x + c
, где x - ваша пропорция, а a, b, c - соответствующие константы. В коде вам нужно написать это как a*x*x + b*x + c
.
Для истинных экспоненциальных функций вы хотите k exp(l x)
в коде k * Math.exp(l*x)
.
Выбор констант - самый сложный момент. Чтобы получить одинаковые начальные ставки для квадратиков c, просто выберите b = delayRandomiserGrowthValue
и c = delayRandomiserBaseValue
. Затем вы можете выбрать значение a
в зависимости от того, как долго вы задерживаетесь. a + b + c
даст вам максимальную задержку.
let proportionThroughContents = CGFloat(Double(idx) / Double(allNodes.count))
let delayRandomiserBaseValue: CGFloat = 40 // c
let delayRandomiserGrowthValue: CGFloat = 60 // b
let delayRandomiserQuadraticValue: CGFloat = 60 // a
let delayRandomiserValue = UInt32(delayRandomiserBaseValue
+ delayRandomiserGrowthValue * proportionThroughContents
+ delayRandomiserQuadraticValue * proportionThroughContents * proportionThroughContents )
Для экспоненты k
- начальное значение, а l*k
- начальная скорость роста. Окончательная задержка будет k e^l
.
let proportionThroughContents = CGFloat(Double(idx) / Double(allNodes.count))
let delayRandomiserBaseValue: CGFloat = 40 // k
let delayRandomiserGrowthValue: CGFloat = 60 //
let l: CGFloat = delayRandomiserGrowthValue / delayRandomiserBaseValue // l
let delayRandomiserValue = UInt32(delayRandomiserBaseValue * Math.exp(l*proportionThroughContents))
При этих значениях l = 60/40 = 1.5
максимальная задержка будет 40*exp(1.5) = 179
.