3

非常に基本的なパノラマアプリをコーディングしようとしています。

CMMotionManager を使用してモーションの更新を取得し、次の写真を撮る適切な瞬間を判断します。このコードが完全に機能する場合もありますが、ほとんどの場合、写真の撮影が早すぎたり遅すぎたりします。私が間違っていることを正確に理解するのを手伝ってください。

これは、縦向きモードの iPhone のコードの例です。

#define CC_RADIANS_TO_DEGREES(__ANGLE__) ((__ANGLE__) * 57.29577951f) // PI * 180
#define FOV_IN_PORTRAIT_MODE 41.5;

double prevTime;
double currAngle;

- (void)motionUpdate:(CMDeviceMotion *)motion
{
    if (!prevTime) {
        prevTime = motion.timestamp;
        return;
    }

    //Calculate delta time between previous motionUpdate call and _now_
    double deltaTime = motion.timestamp - prevTime;
    prevTime = motion.timestamp;

    //Y axis rotation
    CMRotationRate rotationRate = motion.rotationRate;
    double rotation = rotationRate.y;

    if (fabs(rotation) < 0.05) //igonre bias
        return;

    //Calculate the angular distance
    double anglePathRad = rotation * deltaTime;

    //calculate total panoram angle
    currAngle += CC_RADIANS_TO_DEGREES(anglePathRad);

    if (fabs(currAngle) >= FOV_IN_PORTRAIT_MODE) {
        currAngle = 0;
        [self takePicture];
    }

}
4

0 に答える 0