Как я могу узнать расстояние, на которое перемещается устройство? - PullRequest
0 голосов
/ 09 июля 2020

Я хочу реализовать этот тип функциональности, используя движение ядра. Есть идеи, как реализовать этот тип функциональности. Из исследования я выяснил, что мы должны использовать Device Motion.

В этом режиме масштабирование камеры регулируется перемещением телефона от / к пользователю, то есть когда пользователь перемещает телефон от себя при нажатой кнопке «масштабирование» изображение увеличивается, а когда пользователь перемещает телефон к себе, изображение уменьшается. Когда вы отпускаете кнопку масштабирования, текущий уровень масштабирования сохраняется и не изменяется при движении.

Масштабирование должно работать в любой плоскости и зависеть только от направления движения к / от пользователя (не только в горизонтальная плоскость). Уровень масштабирования зависит от расстояния, на которое перемещается устройство: масштабирование постепенно изменяется в 2 раза, если телефон перемещается на 5 см, и 10-кратное увеличение является максимальным (когда телефон перемещается на 30 см).

Здесь я использовал вот так : Как узнать расстояние перемещения устройства ???

motionManager.StartDeviceMotionUpdates(CMAttitudeReferenceFrame.XArbitraryCorrectedZVertical, 
        NSOperationQueue.CurrentQueue, delegate (CMDeviceMotion motion, NSError error) {

                CMAttitude attitude = motion.Attitude;
                CMAcceleration userAcceleration = motion.UserAcceleration;

                double roll = attitude.Roll;


                double pitch = attitude.Pitch;

                double yaw = attitude.Yaw;

                double accX = userAcceleration.X;

                double accY = userAcceleration.Y;

                double accZ = userAcceleration.Z;


                Console.WriteLine("Y"+ accY);
                Console.WriteLine("Z" + accZ);

                UpdateBallWithRoll(roll, pitch, yaw, accX, accY, accZ);

            });

        private void UpdateBallWithRoll(double roll, double pitch, double yaw, double accX, double accY, double accZ)
    {
        try
        {
            X += 2 * roll;
            Y += 2 * pitch;
           
            

            X *= 0.8;
            Y *= 0.8;
           


            double newX = ball.Frame.X + X;
            double newY = ball.Frame.Y + Y;
            

            newX = Math.Min(280, Math.Max(0, newX));
            newY = Math.Min(527, Math.Max(64, newY));
           
            double newR = R + 10 * accZ;
            ball.Frame = new CoreGraphics.CGRect(newX, newY, newR, newR);
            
        }
        catch (Exception ex)
        {

        }
    }
...