这不应该以秒为单位给我当前的日期/时间吗?

时间:2011-09-14 15:21:16

标签: objective-c nsdate nstimeinterval

我想基于当前时间以秒为单位计算一个振荡偏移值,这样任何对象都可以调用此方法,并返回一个与同一方法调用的任何其他对象同步的偏移量。

这是我对locationOffset属性的设置器:

- (float)locationOffset
{
    float currentTime = [[NSDate date] timeIntervalSince1970];
    locationOffset = sinf(currentTime);
    CCLOG(@"--- current time = %1.9f, location offset = %1.1f", currentTime, locationOffset);

    return locationOffset;
}

我称之为60Hz,输出如下:

--- current time = 1316013568.000000000, location offset = -0.1

......它保持这种状态。十进制后的所有内容都应该为零吗?

我希望我可以通过缩放currentTime来调整频率,通过缩放offsett来调整“波长”,但我只需要让我的正弦位置OffOffset根据时间来回摆动。

似乎位置偏移应该每2秒从-1循环到1。

编辑:添加现在正常工作的方法。

- (float)locationOffset
{
    double currentTime = [[NSDate date] timeIntervalSinceReferenceDate];
    locationOffset = sin(2.0f*currentTime) * 12.0f;
//    CCLOG(@"--- current time = %1.9f, location offset = %1.1f", currentTime, locationOffset);

    return locationOffset;
}

它每隔pi秒循环一次,其幅度为+/- 12。

1 个答案:

答案 0 :(得分:1)

是的,您的问题是float值只有大约7位有效数字。您甚至没有足够的精度来正确表达整数值1316013568,因此您可以有效地将相同的值反复输入sinf。坚持使用double值,并使用双精度sin函数,或在转换为float之前将数字缩放为小于约6个整数位的值。