根据日期生成周期值

时间:2009-06-10 14:32:47

标签: iphone objective-c math loops date

我希望有数学和循环好的人可以帮助我。我在Objective C中编写了一个程序,我需要想出一个循环的方法。如果您不了解Objective C,我将非常感谢伪代码中的任何帮助,以帮助我解决这个问题。

我需要的是基于两个日期的比例。我知道这将是某种循环,但不知道如何解决它。

例如,假设第一个日期是5/25/1976,第二个日期是9/25/2009。每隔25天会有一个“峰值”,所以它的值将为100.如果我将23分成两半而得到12(圆形),那么它将是相反的或“谷”,所以它的数值将为0.换句话说在第23天,它将在100,但是在第24天,它将开始回落,然后在12天后触底,然后开始循环,并在23天再次上升。

我需要做的是在任意两个给定日期之间找到任何给定日期的数值。

感谢您提供的任何帮助!

3 个答案:

答案 0 :(得分:3)

value = 100 * cos(2 * pi *(numDays / 25))

或类似的东西。

答案 1 :(得分:1)

  • 计算起始点和您想要该值的日期之间的天数差异(也可选择在小数天内)。
  • 除以循环周期(根据问题可以是23或25)。
  • 取小部分。
  • 应用正确的周期函数 - 例如,sin()cos(),适当缩放三角函数(将分数乘以2π)。
  • 您可以通过表格中的值来模拟形状,该表格描述了在句点中的天数索引的值(因此您可以使用waveform[Δt mod period]来确定值。)

答案 2 :(得分:0)

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;
}

如果给定日期是从开始的23到24天之间,则此函数返回100.0,否则返回0.0。你可以用23代替你喜欢的任何时期。我不确定这是否是您想要的,所以如果不是,请澄清您的问题。

免责声明:这是可可。希望它和iPhone Cocoa一样吗?