Я пытаюсь обновить калькулятор, написанный на Java, который размещает данные в порядке согласно нескольким критериям. Заказ поступает по системе начисления баллов. Каждый критерий добавляет определенную сумму к оценке для каждого элемента, а затем данные представляются в порядке оценки после выполнения всех расчетов.
Одним из критериев, которые я хочу добавить, является близость к одной из 3 дат. Каждый фрагмент данных имеет значение даты, которое связано с окном времени, и я хочу, чтобы прибавление баллов было максимальным, если:
- Элемент данных только что вошел в окно
- Элемент данных вот-вот покинет окно
- Дата элемента данных - это текущая дата
Элемент данных может не находиться в границах окна, в этом случае добавление оценки будет равно нулю. Если оно находится в окне, я бы хотел, чтобы сложение баллов постепенно уменьшалось по мере удаления от этих трех точек элемента данных, в идеале описываемого уравнением графика.
К сожалению, мой опыт построения графовых уравнений близок к нулю, поэтому я не уверен, с чего начать, возможно, за какой-то комбинацией sin, cos или tan. В идеале я хочу иметь возможность написать такой метод, как:
public double getPositionInWindowScore( Date itemDate, Date windowStart, Date windowEnd ) {
if( itemDate.before( windowStart ) || itemDate.after( windowEnd ) {
return 0.0;
}
...
}
Я мог бы создать какой-то неуклюжий код с загрузкой if, но я уверен, что найдется более изящный способ, чем кто-то с гораздо лучшими математическими навыками, чем я мог бы предложить.
Буду признателен за любую помощь или указатели.
Заранее спасибо.