Создать периодическое значение на основе дат - PullRequest
0 голосов
/ 10 июня 2009

Я надеялся, что кто-то, кто хорошо разбирается в математике и циклах, может мне помочь. Я пишу программу в Objective C, где мне нужно придумать способ сделать цикл. Если вы не знаете Цель C, я был бы признателен за любую помощь в псевдокоде, чтобы помочь мне понять это.

Мне нужна шкала, основанная на двух датах. Я знаю, что это будет своего рода цикл, но не знаю, как это выяснить.

Например, предположим, что первая дата - 25.05.1976, а вторая - 25.09.2009. Каждые 25 дней будет «пик», поэтому его значение будет равно 100. Если я разделю 23 пополам, я получу 12 (округлено), так что это будет противоположность или «долина», поэтому численное значение будет равно 0. Другими словами на 23-й день он будет на уровне 100, но на 24-й день он начнет спускаться вниз, а через 12 дней снизится, а затем снова начнет цикл вверх и снова вернется через 23 дня.

Что мне нужно сделать, это найти числовое значение для любой данной даты между любыми двумя данными датами.

Спасибо за любую помощь, которую вы можете предложить!

Ответы [ 3 ]

3 голосов
/ 10 июня 2009

значение = 100 * cos (2 * pi * (numDays / 25))

Или что-то в этом роде.

1 голос
/ 10 июня 2009
  • Рассчитайте разницу в днях (необязательно в дробных днях) между начальной точкой и днем, для которого вы хотите получить значение.
  • Разделите на период цикла (может быть 23 или 25 в зависимости от вопроса).
  • Взять дробную часть.
  • Применение правильной периодической функции - например, sin() или cos(), соответствующим образом масштабированной для тригонометрических функций (умножьте дробь на 2π).
  • Вы можете смоделировать форму по значениям из таблицы, описывающей значения, индексированные по дням в периоде (поэтому вы должны использовать waveform[Δt mod period] для определения значения).
0 голосов
/ 10 июня 2009

В классе NSDate есть метод timeIntervalSinceDate, который даст вам количество секунд между двумя датами. Вы можете рассчитать количество дней между двумя датами, например:

- (double) daysBetweenStart:(NSDate*)start end:(NSDate*)end
{
    return [start timeIntervalSinceDate:end] / 86400.0;    // seconds in a day
}

Вы можете использовать это для вычисления пошаговой функции на основе этого:

- (double) someDescriptiveFunctionName:(NSDate*)date fromDate:(NSDate*)start
{
    double days = [self daysBetweenStart:start end:date];
    if ((int) days % 23 == 0)
        return 100.0;
    else
        return 0.0;
}

Эта функция возвращает 100,0, если заданная дата находится между 23 и 24 днями с начала, и 0,0 в противном случае Вы можете заменить 23 на любой период, который вам нравится. Я не уверен, что это то, что вы хотели, поэтому уточните свой вопрос, если это не так.

Отказ от ответственности: это какао. Надеюсь, это так же, как iPhone Какао?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...