Я вполне уверен, что здесь есть название именно для того, что я пытаюсь сделать, но я не уверен, что именно, поэтому, если это выглядит очень знакомо, не стесняйтесь сказать мне точно, каким я должен быть look up!
Скажем, у меня есть список объектов со значением, которое начинается с 100 и уменьшается до 0 с течением времени. Эти объекты могут быть определены следующим образом:
public struct OrderableObject
{
float DecrementRate; // Some arbitrary number
float StartValue; // 100
float CurrentValue; // Initially same as StartValue
}
И у меня может быть список экземпляров этих объектов, чтобы
OrderableObject objectA = new OrderableObject() { DecrementRate = 1.0f, StartValue = 100.0f, CurrentValue = 100.0f };
OrderableObject objectB = new OrderableObject() { DecrementRate = 1.0f, StartValue = 100.0f, CurrentValue = 100.0f };
OrderableObject objectC = new OrderableObject() { DecrementRate = 1.0f, StartValue = 100.0f, CurrentValue = 100.0f };
OrderableObject objectD = new OrderableObject() { DecrementRate = 3.0f, StartValue = 100.0f, CurrentValue = 100.0f };
OrderableObject objectE = new OrderableObject() { DecrementRate = 0.5f, StartValue = 100.0f, CurrentValue = 100.0f };
OrderableObject objectF = new OrderableObject() { DecrementRate = 1.0f, StartValue = 100.0f, CurrentValue = 100.0f };
var orderableObjects = new List<OrderableObject>()
{
objectA, objectB, objectC, objectD, objectE, objectF
};
Я хотел бы иметь возможность запускать функцию где я передаю int
projectionLength, а также мой список orderableObjects
, и он возвращает список прогнозируемого порядка, в котором каждый из вышеуказанных объектов достигает 0
для ряда записей, соответствующих projectionLength
. Когда объект достигает 0
, он должен сброситься до 100
, поэтому в случае objectD
с максимальным DecrementRate
, равным 3.0
, я бы хотел, чтобы он появлялся в списке несколько раз подряд, чтобы отражает тот факт, что его CurrentValue
будет попадать 0
чаще, чем другие записи. На этом же токене будут «петли», в которых objectE
даже не появится, поскольку все остальные записи уменьшатся до 0
как минимум в два раза, прежде чем он сможет сделать это хотя бы один раз.
Таким образом, пример выходных данных с projectionLength
из 15
может выглядеть примерно так:
[objectD, objectD, objectA, objectB, objectC, objectD, objectF, objectD, objectD, objectA, objectB, objectC, objectD, objectE, objectF]
(я набрал это вручную, так что, надеюсь, я не перепутал свою цель с ошибкой)
Я знаю, как можно сделать sh то же самое, запустив моделирование времени с фиксированным временным шагом, но я подумал, что стоит спросить, есть ли более "математический" (и, вероятно, более эффективный) способ достижения тот же результат.
Спасибо!