使用RotationVector计算方位角和高程

时间:2019-01-26 02:28:49

标签: java android accelerometer android-sensors gyroscope

我正在尝试开发一个可以跟踪星星的应用程序。为此,我需要知道用户将手机指向的恒星的方位角和仰角。经过一些研究,我认为使用位置矢量来获取此类信息。我想我想出了如何使用旋转矢量获取方位角,但是我对如何获取仰角感到困惑。我能够找到这个已回答的问题:

Should i use Accelerometer or Gyroscope to measure angle of the z-axis

它引用了使用点积,我对此有所了解,但是我不确定如何使用旋转矢量来实现。所以我的问题是我是否可以使用当前代码正确获取方位角,并且stackflow链接中的已回答问题是否是使用旋转矢量获取仰角的正确方法?仅适用于加速度计。

 @Override
public void onSensorChanged(SensorEvent sensorEvent) {


    Log.d(TAG, "onSensorChagnged X" + sensorEvent.values[0]);
    Log.d(TAG, "onSensorChagnged Y" + sensorEvent.values[1]);
    Log.d(TAG, "onSensorChagnged Z" + sensorEvent.values[2]);
    if(sensorEvent.sensor.getType()== Sensor.TYPE_ROTATION_VECTOR) {
        float [] orientation = new float[3];
        float [] rMat = new float[9];
        sensorManager.getRotationMatrixFromVector(rMat, sensorEvent.values);
        mAzimuth = (int) (Math.toDegrees(SensorManager.getOrientation(rMat, orientation)[0]) + 360) % 360;

        Log.d(TAG, "Azimuth Rotation" + mAzimuth);
    } else if (sensorEvent.sensor.getType()==Sensor.TYPE_ACCELEROMETER && sensorEvent.sensor.getType()== Sensor.TYPE_MAGNETIC_FIELD &&
            sensorEvent.sensor.getType() == Sensor.TYPE_GRAVITY){
        float [] gData = new float[3];
        float [] mData = new float[3];
        float [] rMat = new float[9];
        float [] iMat = new float[9];
        float [] orientation = new float[3];
        switch (sensorEvent.sensor.getType()){
            case Sensor.TYPE_ACCELEROMETER:
                gData = sensorEvent.values.clone();
                break;
            case Sensor.TYPE_GRAVITY:
                gData = sensorEvent.values.clone();
                break;
            case Sensor.TYPE_MAGNETIC_FIELD:
                mData = sensorEvent.values.clone();
                break;
            default: return;
        }
        if (SensorManager.getRotationMatrix(rMat,iMat,gData,mData)){
            mAzimuth = (int) (Math.toDegrees(SensorManager.getOrientation(rMat, orientation)[0]) + 360) % 360;
            Log.d(TAG, "Azimuth Tri" + mAzimuth);
        }
    }
}

0 个答案:

没有答案