2009-06-10 37 views
0

我希望有人用数学和循环可以帮助我。我在Objective C编写一个程序,我需要想出一个循环的方法。如果你不知道目标C,我将不胜感激任何帮助伪代码,只是为了帮助我弄清楚这一点。根据日期生成一个周期值

我需要的是一个基于两个日期的刻度。我知道这将是某种循环,但不知道如何弄清楚。

例如,可以说第一个日期是5/25/1976,第二个日期是9/25/2009。每25天会有一个“峰值”,因此它的值将会是100.如果我将23分成两半,我得到12(圆整),所以它将是相反的或“谷”,因此它的数值将为0。在第23天它将在100天,但随后在第24天它会开始回落,然后在12天后回落,然后开始循环并在23天后再次回到顶部。

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

感谢您提供的任何帮助!

+1

我读了两遍,所有我可以添加的是......呵? – 2009-06-10 14:36:41

+0

我认为他的意思是价值波动,每个月23日高峰......我想,嘿嘿。我真的不明白为什么第23届。至少在公历中,并不是所有的月份都有相同的天数。 – Skurmedel 2009-06-10 14:40:37

+0

这可能是需要思考的问题。 – Skurmedel 2009-06-10 14:41:13

回答

3

值= 100个* COS(2 * PI *(NUMDAYS/25))

或类似的东西。

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

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

声明:这是可可。希望它与iPhone Cocoa一样?