Как рассчитать высоту бросаемого виртуального шара с помощью мобильного акселерометра - PullRequest
0 голосов
/ 02 марта 2019

Я использую функцию

acc = (float) Math.sqrt(x * x + y * y + z * z) - GRAVITY_EARTH;

, чтобы вычислить начальное ускорение при броске мяча.X, y и z - значения от акселерометра Android.

У меня также есть счетчик, который считает, когда бросающее движение превышает минимальное необходимое ускорение, и я пытаюсь обновить высоту виртуального шараи выведите его положение и скорость, используя эту формулу:

vel = acc + (-GRAVITY_EARTH * Float.parseFloat(timeCounter));

Но это только прилагает силу акселерометра, как я могу получить начальную скорость броска и затем вычислить высоту мяча в режиме реального времени?

Функция акселерометра ниже:

/* Get values from the built in accelerometer while they are being updated. */
@Override
public void onSensorChanged(SensorEvent event) {
    if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {

        float x = event.values[0];
        float y = event.values[0];
        float z = event.values[0];

        acc = (float) Math.sqrt(x * x + y * y + z * z) - GRAVITY_EARTH;
        String a = String.format("%.3f", acc);
        a = a.replace(",", ".");
        currentAccText.setText(String.valueOf(a));

        /* Is the current acc larger than set minimum value? */
        if (acc >= minAcc) {

            /* Has the timer not been started yet? */
            if (timeCounter.equals("0.0")) {

                timer.start();
                a = String.format("%.3f", acc);
                a = a.replace(",", ".");
                thrownAccText.setText(a);

                String hr = String.format("%.3f", heightRecord);
                hr = hr.replace(",", ".");
                recordHeightText.setText(hr);

            }

        }

        vel = acc + (-GRAVITY_EARTH * Float.parseFloat(timeCounter));


        height += vel;
        heightBar.setProgress((int) height);

        if (vel < 0.01f && vel > -0.01f) sound.start();
        if (height > heightRecord) heightRecord = height;

        if (height < 0.01f) height = 0.f;
        String h = String.format("%.3f", height);
        h = h.replace(",", ".");
        heightText.setText(h);

        if (height > 0.f) throwOrGroundText.setText("Throw!");
        else throwOrGroundText.setText("On the ground.");

    }

}
...