我怎样才能找到加速度计的方向?

时间:2009-05-15 10:51:55

标签: iphone objective-c

我在加速度计上做声音应用。它通过计算加速度计值来播放不同的运动声音。但是我怎样才能找到用户移动x轴加上或减去和y轴正负的加速度计方向。如何我在加速度计上找到了这个值。

请提供一些指导或帮助代码或项目。

3 个答案:

答案 0 :(得分:1)

您需要执行vector addition并计算2个向量的求和以获得结果向量。上面的文章解释了计算它的所有常用方法。但是以编程方式执行它只需要应用毕达哥拉斯定理和Tan theta = b / a

答案 1 :(得分:1)

我认为你需要磁力计方向(至少给你一个你可以随时比较的方位),以及使用上面提到的矢量数学。这篇文章更好地解释了如何添加向量(第一个通过说“硬”来掩盖最可能的情况)...

http://blog.dotphys.net/2008/09/basics-vectors-and-vector-addition/

答案 2 :(得分:1)

你必须使用向量来表示它,下面有一个委托方法,详细说明你需要做什么。

现在我还没有看过太多的API,但我相信你的方向向量会从加速度计返回给你。

有一个委托方法,它返回您需要的值。 以下代码可能会对您应该take a look at here

的教程提供帮助
- (void)acceleratedInX:(float)xx Y:(float)yy Z:(float)zz
{
    // Create Status feedback string
    NSString *xstring = [NSString stringWithFormat:
    @"X (roll, %4.1f%%): %f\nY (pitch %4.1f%%): %f\nZ (%4.1f%%) : %f",
    100.0 - (xx + 1.0) * 100.0, xx,
    100.0 - (yy + 1.0) * 100.0, yy,
    100.0 - (zz + 1.0) * 100.0, zz
    ];
    self.textView.text = xstring;

    // Revert Arrow and then rotate to new coords
    float angle = atan2(xx, yy);
    angle += M_PI / 2.0;

    CGAffineTransform affineTransform = CGAffineTransformIdentity;
    affineTransform = CGAffineTransformConcat( affineTransform,       CGAffineTransformMakeRotation(angle));
    self.xarrow.transform = affineTransform;
}

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
    [self acceleratedInX:acceleration.x Y:acceleration.y Z:acceleration.z];
}

还有一篇易于理解的文章可以清楚地解释here along with sample code